MATLAB经典代码实现---LASSO和Elastic net

     作为正则化约束或者变量稀疏筛选相关领域的经典分析方法,最小绝对收缩和选择方法(Least Absolute Shrinkage and Selection Operator, LASSO)和弹性网络(Elastic net)已被广泛应用到各行各业,其中较为常见的有食品、化工、医药及通信行业,两种的基本思路是在最小二乘的基础上添加变量约束实现特征筛选或变量稀疏。

   (注:前期认为正则化约束后的变量为特征变量,但是现在分析发现这个说法不一定正确,当分析对象变量维度远大于样本变量数时,LASSO只能选择样本大小的变量数,这个主要因为LASSO于1996年被Robert Tibshirani提出,当时的测量信号或检测信号维度较低,不存在现在所谓的“维度灾难”一说,结合岭回归和LASSO,Zou等于2005年提出Elastic nets算法(论文题目:Addendum: Regularization and variable selection via the elastic net  链接:http://stanford.edu/~hastie/Papers/B67.2%20(2005)%20301-320%20Zou%20%26%20Hastie.pdf),相比于LASSO,Elastic net分析性能更优)。

    MATLAB中通过参数Alpha来选择LASSO、岭回归和Elastic net三种算法,具体表示为:

[b,fitinfo] = lasso(x,y,'CV',10,'Alpha',0.2); % 参数初始化
axTrace = lassoPlot(b,fitinfo); 交叉验证训练轨迹
axCV = lassoPlot(b,fitinfo,'PlotType','CV');
lam = fitinfo.IndexMinMSE;  % 最小MSE对应lambda
mat = b(:,lam);             % 最优lambda对应的稀疏系数
[row, ] = find(b(:,lam)~=0);% 非零系数对应的行
Xla = X1(:, row');           % 筛选稀疏变量
  1. x:为输入自变量,y为因变量;CV表示交叉验证(Cross-Validation),Alpha表示惩罚参数 \alpha (0\leq \alpha\leq 1),当\alpha = 1 时,该代码表示LASSO, 当\alpha=0  时表示岭回归,其他值表示Elastic net;
  2. 对于稀疏系数的确定,主要有两个指标(MSE和SE),如果选择MSE作为最佳参数指标的话,那么稀疏系数的确定点在MinMSE,具体表现为第四至六行。

仿真结果:

训练轨迹,绿线上方表示最佳参数MinMSE对应的非零变量个数;

MSE变化曲线,其中绿色表示MinMSE点,蓝色表示MinSE,一般选择MinMSE。

(好累,晚上10点半,写不动了,撤了)

个人新建立的weixin公众号,光谱学与光谱分析,欢迎大家关注

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值