1、full Elastic Net model and Ridge Regression are equal
beta_en = larsen(X, y, 1e-9, 0, [], false, false); % 将弹性网的1范数约束变为0 beta_ridge = (X'*X + 1e-9*eye(p))\X'*y; beta_lasso = lasso(Xtilde, ytilde, 0, false, false); % lasso的1范数约束为0
以上两种代码求解代码,结果几乎一样
2、Lar算法:
B. Efron, T. Hastie, I. Johnstone, and R. Tibshirani. Least Angle
% Regression. Ann. Statist. 32(2):407-499, 2004.
Lar算法和Lasso算法的结果几乎一样
b_lar = lar(X,y); b_lasso = lasso(X, y);
b_ols = X\y;
3、 Lasso和其另外一种解法
clear; close all; clc;
%% TEST
% Assert that LASSO gives expected results when run with orthogonal
% predictors.
n = 100;
p = 10;
X = gallery('orthog',n,5);
X = X(:,2:p+1);
y = center((1:100)');
b_lasso = lasso(X, y);
b_ols = X'*y;
% First compare using theoretical value of lambda/2 at each breakpoint.
% Call this value gamma
gamma = [sort(abs(b_ols), 'descend'); 0];
b_lasso2 = zeros(size(b_lasso));
for i = 1:length(gamma)
b_lasso2(:,i) = sign(b_ols).*max(abs(b_ols) - gamma(i),0);
end
assert(norm(b_lasso - b_lasso2) < 1e-12)
% Then compare for some arbitrary value of lambda, the value of lambda is
% given by the lasso procedure
t = 150; % constraint on the L1 norm of beta
[b_lasso info] = lasso(X, y, t, false);
b_lasso2 = sign(b_ols).*max(abs(b_ols) - info.lambda/2, 0);
assert(norm(b_lasso - b_lasso2) < 1e-12)
4、SPCA在没有1范数约束的情况下和PCA得到的投影矩阵一样
clear; close all; clc; %% TEST % Assert that the full SPCA model and PCA are equal n = 100; p = 25; Z = rand(p); C = Z'*Z; X = center(mvnrnd(zeros(1,p), C, n)); K = p; % all possible components delta = 5; % any value will do stop = 0; % no L1 constraint B = spca(X, [], K, delta, stop); [U D V] = svd(X, 'econ'); assert(norm(abs(V) - abs(B)) < 1e-12)
5、在SPCA的调用中, stop = -[250 125 100] 这么设置表示每列取多少个非零项;
6、关于AX=B的解法
可以用MSE那种inv(A'A+lambda*I)*A'*B来解,或者调用LSQR函数,在MSE中测试的结果识别率一样
[eigvector, istop] = lsqr2(A, B, options.ReguAlpha, nRepeat);
另外 若对A添加1范数约束,则可以调用如下lars函数,一列一列的解
for i = 1:size(B,2)
eigvector_T = lars(A, B(:,i),'lasso', -(max(LassoCardi)+5),1,Gram,LassoCardi); eigvector{i} = eigvector_T;
end
7 弹性网
beta = arg min ||y - X*beta||^2 + delta*||beta||^2 + lambda*||beta||_1.
调用函数: [b info] = elasticnet(X, y, delta, stop, storepath, verbose)
For example:
s1 = RandStream.create('mrg32k3a','Seed', 42);
s0 = RandStream.setDefaultStream(s1);
% Create data set
n = 30; p = 40;
correlation = 0.2;
Sigma = correlation*ones(p) + (1 - correlation)*eye(p);
mu = zeros(p,1);
X = mvnrnd(mu, Sigma, n);
% Model is lin.comb. of first three variables plus noise
y = X(:,1) + X(:,2) + X(:,3) + 0.5*randn(n,1);
% Preprocess data
X = normalize(X);
y = center(y);
% Run LASSO
delta = 1e-3;
[beta info] = elasticnet(X, y, delta, 0, true, true);
% Plot results
h1 = figure(1);
plot(info.s, beta, '.-');
xlabel('s'), ylabel('\beta', 'Rotation', 0)
% Restore random stream
RandStream.setDefaultStream(s0);
% [1] H. Zou and T. Hastie. Regularization and variable selection via the
% elastic net. J. Royal Stat. Soc. B. 67(2):301-320, 2005.
ON THE ADAPTIVE ELASTIC-NET WITH A DIVERGING NUMBER OF PARAMETERS
未完待续17:04:17
本文深入探讨了机器学习领域的核心算法,包括Lasso回归、Ridge回归、弹性网、SPCA和PCA等,通过代码示例详细解析了这些算法的实现过程及相互之间的联系,为读者提供了丰富的理论和实践指导。
612

被折叠的 条评论
为什么被折叠?



