200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 线性回归(四)---Lasso回归

线性回归(四)---Lasso回归

时间:2019-12-25 22:29:20

相关推荐

线性回归(四)---Lasso回归

Lasso回归

Lasso是可以估计稀疏系数的线性模型,尤其适用于减少给定解决方案依赖的特征数量的场合。如果数据的特征过多,而其中只有一小部分是真正重要的,此时选择Lasso比较合适。在数学表达上,Lasso类似于岭回归,也是在代价函数基础上增加了一个惩罚项的线性模型。

主参数设置

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。这里归一化有两个好处:(1):提升模型的收敛速度,减少寻找最优解的时间。(2)提升模型的精度

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 大的情况下。可以是"cyclic"或"random"。它指定了当每轮迭代的时候,选择权重向量的哪个分量来更新。

(1)“random”:更新的时候,随机选择权重向量的一个分量来更新。

(2)“cyclic”:更新的时候,从前向后依次选择权重向量的一个分量来更新。

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

pseudo random number generator 用来产生随机 feature 进行更新时需要用的seed。仅当 selection 为 random 时才可用。

Lasso回归基本操作

%config InteractiveShell.ast_node_interactivity = 'all' #同时输出多行结果from sklearn.linear_model import LassoX = [[3], [8]]y = [1, 2]reg = Lasso(alpha=3.0) # 惩罚项系数为3.0reg.fit(X, y) # 拟合Lasso(alpha=3.0, 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)reg.coef_# 查看系数reg.intercept_# 查看截距reg.predict([[6]])

Lasso(alpha=3.0, 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)Lasso(alpha=3.0, 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)array([0.])1.5array([1.5])

reg = Lasso(alpha=0.2) #调整系数reg.fit(X, y)Lasso(alpha=0.2, 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)reg.coef_reg.intercept_reg.predict([[6]])

Lasso(alpha=0.2, 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)Lasso(alpha=0.2, 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)array([0.168])0.576array([1.584])

Lasso回归例子

#采用lasso CV和lassoLarsCV可实现最佳参数选择 #案例 研究两变量之间的关系,采用lasso回归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矩阵dataj = np.array(data)X = dataj[:,0:1] # 变量xy = dataj[:,1] #变量y# ========Lasso回归========model = Lasso(alpha=0.01) # 调节alpha可以实现对拟合的程度model.fit(X, y) # 线性回归建模print('系数矩阵:\n',model.coef_)print('线性回归模型:\n',model)# 使用模型预测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()

Lasso(alpha=0.01, 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)系数矩阵:[1.52826579]线性回归模型:Lasso(alpha=0.01, 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)<matplotlib.collections.PathCollection at 0x14227d39a58>[<matplotlib.lines.Line2D at 0x14224ab2e80>]Text(0.5,0,'x')Text(0,0.5,'y')<Figure size 640x480 with 1 Axes>

LassoCV回归(可实现最佳参数选择)

# ========Lasso回归========#使用lassoCV选择最佳amodel = LassoCV() # LassoCV自动调节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()

LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False,precompute='auto', random_state=None, selection='cyclic', tol=0.0001,verbose=False)系数矩阵:[1.60985981]线性回归模型:LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False,precompute='auto', random_state=None, selection='cyclic', tol=0.0001,verbose=False)最佳的alpha: 0.002090576613302052<matplotlib.collections.PathCollection at 0x14227e1d0f0>[<matplotlib.lines.Line2D at 0x14227df2400>]Text(0.5,0,'x')Text(0,0.5,'y')

LassoLarsCV回归(可实现最佳参数选择)

# ========Lasso回归========#使用lassoLarsCV选择最佳amodel = LassoLarsCV() # LassoLarsCV自动调节alpha可以实现选择最佳的alphamodel.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()

LassoLarsCV(copy_X=True, cv=None, eps=2.220446049250313e-16,fit_intercept=True, max_iter=500, max_n_alphas=1000, n_jobs=1,normalize=True, positive=False, precompute='auto', verbose=False)系数矩阵:[1.6314263]线性回归模型:LassoLarsCV(copy_X=True, cv=None, eps=2.220446049250313e-16,fit_intercept=True, max_iter=500, max_n_alphas=1000, n_jobs=1,normalize=True, positive=False, precompute='auto', verbose=False)最佳的alpha: 0.0<matplotlib.collections.PathCollection at 0x14228339518>[<matplotlib.lines.Line2D at 0x14227e58a58>]Text(0.5,0,'x')Text(0,0.5,'y')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。