lasso线性模型python代码_python机器学习库sklearn——Lasso回归(L1正则化)-Go语言中文社区...

全栈工程师开发手册 (作者:栾鹏)

Lasso

The Lasso 是估计稀疏系数的线性模型。 它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少给定解决方案所依赖变量的数量。 因此,Lasso 及其变体是压缩感知领域的基础。 在一定条件下,它可以恢复一组非零权重的精确集。

在数学公式表达上,它由一个带有ℓ1ℓ1先验的正则项的线性模型组成。 其最小化的目标函数是:

minw12nsamples||Xw−y||22+α||w||1minw12nsamples||Xw−y||22+α||w||1

lasso 估计解决了加上罚项α||w||1α||w||1的最小二乘法的最小化,其中,αα 是一个常数,||w||1||w||1是参数向量的 ℓ1−normℓ1−norm 范数。

Lasso 类的实现使用了 coordinate descent (坐标下降算法)来拟合系数。

设置正则化参数

scikit-learn 通过交叉验证来公开设置 Lasso中αα 参数的对象: LassoCV 和 LassoLarsCV。 LassoLarsCV 是基于下面解释的 最小角回归 算法。

对于具有许多线性回归的高维数据集, LassoCV 最常见。 然而,LassoLarsCV 在寻找 αα 参数值上更具有优势,而且如果样本数量与特征数量相比非常小时,通常 LassoLarsCV 比 LassoCV 要快。

与 SVM 的正则化参数的比较

αα 和 SVM 的正则化参数CC之间的等式关系是 α=1/Cα=1/C 或者 α=1/(nsamples∗C)α=1/(nsamples∗C),并依赖于估计器和模型优化的确切的目标函数。

主参数设置

alpha : float, 可选,默认 1.0。当 alpha 为 0 时算法等同于普通最小二乘法,可通过 Linear Regression 实现,因此不建议将 alpha 设为 0.

fit_intercept : boolean

是否进行拦截计算(intercept)。若 false,则不计算(比如数据已经经过集中了)。此处不太明白,仿佛与偏度有关。

normalize : boolean, 可选, 默认 False

若 True,则先 normalize 再 regression。若 fit_intercept 为 false 则忽略此参数。当 regressors 被 normalize 的时候,需要注意超参(hyperparameters)的学习会更稳定,几乎独立于 sample。对于标准化的数据,就不会有此种情况。如果需要标准化数据,请对数据预处理。然后在学习时设置 normalize=False。

copy_X : boolean, 可选, 默认 True

若 True,则会复制 X;否则可能会被覆盖。

precompute : True | False | array-like, 默认=False

是否使用预计算的 Gram 矩阵来加速计算。如果设置为 ‘auto’ 则机器决定。Gram 矩阵也可以 pass。对于 sparse input 这个选项永远为 True。

max_iter : int, 可选

最大循环次数。

tol : float, 可选

优化容忍度 The tolerance for the optimization: 若更新后小于 tol,优化代码检查优化的 dual gap 并继续直到小于 tol 为止。

warm_start : bool, 可选

为 True 时, 重复使用上一次学习作为初始化,否则直接清除上次方案。

positive : bool, 可选

设为 True 时,强制使系数为正。

selection : str, 默认 ‘cyclic’

若设为 ‘random’, 每次循环会随机更新参数,而按照默认设置则会依次更新。设为随机通常会极大地加速交点(convergence)的产生,尤其是 tol 比 1e-4 大的情况下。

random_state : int, RandomState instance, 或者 None (默认值)

pseudo random number generator 用来产生随机 feature 进行更新时需要用的

seed。仅当 selection 为 random 时才可用。

代码实现

import numpy as np # 快速操作结构数组的工具

import matplotlib.pyplot as plt # 可视化绘制

from sklearn.linear_model import Lasso,LassoCV,LassoLarsCV # Lasso回归,LassoCV交叉验证实现alpha的选取,LassoLarsCV基于最小角回归交叉验证实现alpha的选取

# 样本数据集,第一列为x,第二列为y,在x和y之间建立回归模型

data=[

[0.067732,3.176513],[0.427810,3.816464],[0.995731,4.550095],[0.738336,4.256571],[0.981083,4.560815],

[0.526171,3.929515],[0.378887,3.526170],[0.033859,3.156393],[0.132791,3.110301],[0.138306,3.149813],

[0.247809,3.476346],[0.648270,4.119688],[0.731209,4.282233],[0.236833,3.486582],[0.969788,4.655492],

[0.607492,3.965162],[0.358622,3.514900],[0.147846,3.125947],[0.637820,4.094115],[0.230372,3.476039],

[0.070237,3.210610],[0.067154,3.190612],[0.925577,4.631504],[0.717733,4.295890],[0.015371,3.085028],

[0.335070,3.448080],[0.040486,3.167440],[0.212575,3.364266],[0.617218,3.993482],[0.541196,3.891471]

]

#生成X和y矩阵

dataMat = np.array(data)

X = dataMat[:,0:1] # 变量x

y = dataMat[:,1] #变量y

# ========Lasso回归========

model = Lasso(alpha=0.01) # 调节alpha可以实现对拟合的程度

# model = LassoCV() # LassoCV自动调节alpha可以实现选择最佳的alpha。

# model = LassoLarsCV() # LassoLarsCV自动调节alpha可以实现选择最佳的alpha

model.fit(X, y) # 线性回归建模

print('系数矩阵:n',model.coef_)

print('线性回归模型:n',model)

# print('最佳的alpha:',model.alpha_) # 只有在使用LassoCV、LassoLarsCV时才有效

# 使用模型预测

predicted = model.predict(X)

# 绘制散点图 参数:x横轴 y纵轴

plt.scatter(X, y, marker='x')

plt.plot(X, predicted,c='r')

# 绘制x轴和y轴坐标

plt.xlabel("x")

plt.ylabel("y")

# 显示图形

plt.show()

a00beed17604a3ab15321fda9b3d73a3.png

多任务回归

MultiTaskLasso 是一个估计多元回归稀疏系数的线性模型: yy是一个 (nsamples,ntasks)(nsamples,ntasks) 的二维数组,其约束条件和其他回归问题(也称为任务)是一样的,都是所选的特征值。

下图比较了通过使用简单的 Lasso 或 MultiTaskLasso 得到的 W 中非零的位置。 Lasso 估计产生分散的非零值,而 MultiTaskLasso 的一整列都是非零的。

在数学上,它由一个线性模型组成,以混合的 ℓ1ℓ2ℓ1ℓ2作为正则化器进行训练。目标函数最小化是:

minw12nsamples||XW−Y||2Fro+α||W||21minw12nsamples|版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/luanpeng825485697/article/details/79829926

站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

发表于 2020-03-01 19:58

阅读 ( 190 )

0 推荐

收藏

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页