Lasso 是一种估计稀疏线性模型的方法.由于它倾向具有少量参数值的情况,对于给定解决方案是相关情况下,有效的减少了变量数量。 因此,Lasso及其变种是压缩感知(压缩采样)的基础。在约束条件下,它可以回复一组非零精确的权重系数(参考下文中的 CompressIve sensing(压缩感知:重建医学图像通过lasso L1)点击打开链接)。

用数学形式表达,Lasso 包含一个使用  先验作为正则化因子的线性模型。其目标函数是最小化:

lasso 解决带  惩罚项的最小平方和,其中  是一个常量, 是参数向量的 -norm

Lasso 类实现使用了坐标下降法(一种非梯度优化算法) 来拟合系数.参考另一种实现 Least Angle Regression最小角回归

from sklearn import linear_model
clf = linear_model.Lasso(alpha = 0.1)
clf.fit([[0, 0], [1, 1]], [0, 1])
Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,normalize=False, positive=False, precompute=False, random_state=None,selection='cyclic', tol=0.0001, warm_start=False)
clf.predict([[1, 1]])

函数 lasso_path 对于lower-level任务非常有用。它能够通过搜索所有可能的路径上的值来计算系数.

3.1 设置正则化参数

alpha 参数控制估计的系数的稀疏程度。

3.1.1 使用交叉验证

scikit-learn 暴露以下两个类 LassoCV 和 LassoLarsCV 可以设置 Lasso alpha 参数.
LassoCV 基于下面解释的算法 Least Angle Regression最小角回归
对于含有很多共线性的高维的数据集,LassoCV 是最合适不过了。
然而,LassoLarsCV 在寻找 alpha 参数更相关的值时更具有优势, 并且如果样本相比于观测的数量时,
通常比 LassoCV 更快.

3.1.2 基于模型选择的信息约束

LassoLarsIC 建议使用Akaike information criterion (AIC) 和 Bayes Information criterion (BIC)。 由于在计算:math:alpha 过程中,当使用k-折交叉验证的时候,正则化路径只计算1次而不是k+1次,所以在计算上代价非常小。 然而,这种约束需要一个合适的对于解的自由度的估计(可参考矩阵的解的自由度),这可以从大量的样本(渐进结果)导出并且 假设模型是正确的。例如,数据实际上是有该模型产生的,但是当问题是病态条件时这种数据可能会有问题(参考病态矩阵,条件数等概念),比如 特征维数大于样本数.(小样本问题)

print(__doc__)import timeimport numpy as np
import matplotlib.pyplot as pltfrom sklearn.linear_model import LassoCV, LassoLarsCV, LassoLarsIC
from sklearn import datasetsdiabetes = datasets.load_diabetes()
X = diabetes.data
y = diabetes.targetrng = np.random.RandomState(42)
X = np.c_[X, rng.randn(X.shape[0], 14)]  # add some bad features# normalize data as done by Lars to allow for comparison
X /= np.sqrt(np.sum(X ** 2, axis=0))##############################################################################
# LassoLarsIC: least angle regression with BIC/AIC criterionmodel_bic = LassoLarsIC(criterion='bic')
t1 = time.time()
model_bic.fit(X, y)
t_bic = time.time() - t1
alpha_bic_ = model_bic.alpha_model_aic = LassoLarsIC(criterion='aic')
model_aic.fit(X, y)
alpha_aic_ = model_aic.alpha_def plot_ic_criterion(model, name, color):alpha_ = model.alpha_alphas_ = model.alphas_criterion_ = model.criterion_plt.plot(-np.log10(alphas_), criterion_, '--', color=color,linewidth=3, label='%s criterion' % name)plt.axvline(-np.log10(alpha_), color=color, linewidth=3,label='alpha: %s estimate' % name)plt.xlabel('-log(alpha)')plt.ylabel('criterion')plt.figure()
plot_ic_criterion(model_aic, 'AIC', 'b')
plot_ic_criterion(model_bic, 'BIC', 'r')
plt.legend()
plt.title('Information-criterion for model selection (training time %.3fs)'% t_bic)##############################################################################
# LassoCV: coordinate descent# Compute paths
print("Computing regularization path using the coordinate descent lasso...")
t1 = time.time()
model = LassoCV(cv=20).fit(X, y)
t_lasso_cv = time.time() - t1# Display results
m_log_alphas = -np.log10(model.alphas_)plt.figure()
ymin, ymax = 2300, 3800
plt.plot(m_log_alphas, model.mse_path_, ':')
plt.plot(m_log_alphas, model.mse_path_.mean(axis=-1), 'k',label='Average across the folds', linewidth=2)
plt.axvline(-np.log10(model.alpha_), linestyle='--', color='k',label='alpha: CV estimate')plt.legend()plt.xlabel('-log(alpha)')
plt.ylabel('Mean square error')
plt.title('Mean square error on each fold: coordinate descent ''(train time: %.2fs)' % t_lasso_cv)
plt.axis('tight')
plt.ylim(ymin, ymax)##############################################################################
# LassoLarsCV: least angle regression# Compute paths
print("Computing regularization path using the Lars lasso...")
t1 = time.time()
model = LassoLarsCV(cv=20).fit(X, y)
t_lasso_lars_cv = time.time() - t1# Display results
m_log_alphas = -np.log10(model.cv_alphas_)plt.figure()
plt.plot(m_log_alphas, model.cv_mse_path_, ':')
plt.plot(m_log_alphas, model.cv_mse_path_.mean(axis=-1), 'k',label='Average across the folds', linewidth=2)
plt.axvline(-np.log10(model.alpha_), linestyle='--', color='k',label='alpha CV')
plt.legend()plt.xlabel('-log(alpha)')
plt.ylabel('Mean square error')
plt.title('Mean square error on each fold: Lars (train time: %.2fs)'% t_lasso_lars_cv)
plt.axis('tight')
plt.ylim(ymin, ymax)plt.show()

3.Lasso线性模型相关推荐

  1. sklearn自学指南(part10)--Lasso及多任务Lasso

    学习笔记,仅供参考,有错必纠 文章目录 线性模型 Lasso 设置正则化参数 使用交叉验证 基于信息标准的模型选择 与支持向量机正则化参数的比较 多任务Lasso 线性模型 Lasso Lasso是一 ...

  2. python ant_('python,-ANT--编程字典',)

    -ANT- MahmoudAbdelRahman ANT 基于Python \ [scikit-learn](http://scikit-learn.org/)模块的Rhino \ grasshopp ...

  3. 第一次参加DC比赛总结

    第一次参加DC比赛,选择一个不太难的"游戏玩家付费金额预测大赛"进行,虽说看了各种'top 1%'.'top 10%'.'top 5%'等文章,成绩依然还是不理想.总结原因发现还是 ...

  4. 构建线性模型(Lasso)并通过系数(coefficients)可视化分析特征重要度

    构建线性模型(Lasso)并通过系数(coefficients)可视化分析特征重要度 Lasso方法最早由Robert Tibshiran于1996年提出,文章发表在"统计四大"之 ...

  5. 一、线性模型----Lasso、Ridge回归及正则化的初步理解

    一些基本概念 正则性: 正则性一般用来刻画函数的光滑程度,正则性越高,函数的光滑性越好.通常用Lipschitz指数k来表征函数的正则性.Lipschitz指数刻画了函数f与局部多项式的逼近程度,而函 ...

  6. 线性模型优化:岭回归和Lasso回归

    文章目录 欠拟合和过拟合 过拟合特征 岭回归和Lasso回归 岭回归 Lasso回归 仿真实例 欠拟合和过拟合 此前已经介绍了线性模型LinearRegression的原理和具体实现.在代码验证阶段, ...

  7. 缺失值填充4——使用线性模型(岭回归、Lasso回归、ElasticNet回归)填充序列缺失值

    原始的问题可能是:一个X(包含x1,x2,缺失x,x3-) =====预测=> y 模型填充缺失值:使用:x1,x2,x3- y =====预测=> 缺失x 算法思路 Lasso回归:在线 ...

  8. 一文读懂线性回归、岭回归和Lasso回归

    (图片由AI科技大本营付费下载自视觉中国) 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失 ...

  9. 线性回归之正则化线性模型

    线性回归之正则化线性模型 Ridge Regression 岭回归 Lasso 回归 Elastic Net 弹性网络 Early stopping 1 Ridge Regression (岭回归,又 ...

最新文章

  1. 【转】C/C++中的日期和时间
  2. Key-Value数据库:Redis与Memcached之间如何选择?
  3. SkFlattenable /Registrar/
  4. Zuul上传文件,中文文件名乱码解决办法
  5. pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】
  6. Linux 基础命令——比较两个文件内容的不同
  7. fir fpga 不同截止频率_一种新的FIR滤波器系数量化方法
  8. html语言hr的用法,htmlhr各种样式使用 - 米扑博客
  9. Android 驱动(17)---如何在linux中添加新的kernel module
  10. Tensorflow一些常用基本概念与函数(4)
  11. JAVA利用google的zxing快速生成QRCode
  12. 【MySQL笔记】MySql5安装图解教程
  13. python环境变量配置_Python零基础入门到年薪二十万-1.1节: 在windows中安装Python
  14. 嵌入式软件工程师所需技能
  15. python写彩票预测软件_python写彩票预测软件
  16. visio绘图:通过excel在visio中插入表格
  17. 微信小程序优惠券的购买和核销的操作流程设计
  18. 用强化学习来玩Atari游戏(基于Tensorflow的深度Q学习模型)
  19. 【VMware vSAN 7.0】4.8 有关 vSAN 许可证的注意事项—我们有软硬件解决方案
  20. 【深度学习框架】-Caffe(入门级学习一:简单介绍)

热门文章

  1. LeetCode.917-只反转字母(Reverse Only Letters)
  2. 除了BAT,国内还有哪些值得关注的人工智能公司?
  3. linux系统的学习经验首篇
  4. android查看Logcat
  5. Flex embed XML and Icon
  6. jQuery Easing 动画效果扩展--使用Easing插件,让你的动画更具美感。
  7. 【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试
  8. 【数据平台】Python解析Ngnix日志
  9. (转载)java工程师15本必读书籍推荐
  10. 如何复制一个含有随机指针节点的链表