LASSO、弹性网

  • Post author:
  • Post category:其他



目录


LASSO


sklearn—-LASSO回归代码实现


弹性网


sklearn—-弹性网回归代码实现


LASSO

此算法通过构造一个一阶惩罚函数获得一个精炼的模型,


通过最终确定一些指标(变量)的系数为0





岭回归估计系数等于0的概率微乎其微


,造成筛选变量困难),解释力很强。LASSO算法擅长处理具有多重共线性的数据,与岭回归一样是有偏估计。


岭回归代价函数:


LASSO代价函数:

LASSO回归和岭回归最大的区别就是LASSO回归更容易使一些对回归没有贡献的系数等于0,直接可以去掉为0的系数,模型的输出不会改变。但是岭回归只能让系数趋于0,如果去掉这些系数,会对模型的效果有所损伤。

sklearn—-LASSO回归代码实现

  • 需要用到的库导入
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
%matplotlib inline
  • 将数据导入,进行数据处理
data = np.genfromtxt(r'longley.csv',delimiter=',')
print(data)

x_data  =data[1:,2:]
y_data = data[1:,1]
print(x_data)
print(y_data)
  • 创建模型
model = linear_model.LassoCV()
model.fit(x_data,y_data)

print(model.alpha_) #lasso 系数
print(model.coef_)  #相关的系数  从打印的结果可以看出 lasso可以通过最终确定一些指标为0,这样可以减小计算量


创建模型结束后,打印出弹性系数以及其他相关系数


我们可以看到相关系数的后三个都是0,这也就是对回归没有贡献的系数,我们可以去掉。

  • 做预测
#做预测  和y_data的值比较
model.predict(x_data[-2,np.newaxis])

上边的代码表示我们对x_data的倒数第2行数据进行预测,它的真实值对应的是y_data的倒数第二个数据,由上边的数值图我们可以看到真实值为115.7,我们的预测结果显示

数值很接近,模型训练成功!


弹性网

弹性网是一种使用L1和L2先验作为正则化矩阵的线性回归模型,是综合LASSO回归和岭回归的一种回归算法。弹性网将代价函数中的后半部分处理成了以下的形式:

sklearn—-弹性网回归代码实现

  • 需要用到的库导入
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
%matplotlib inline
  • 将数据导入,进行数据处理
data = np.genfromtxt(r'longley.csv',delimiter=',')
print(data)

x_data  =data[1:,2:]
y_data = data[1:,1]
print(x_data)
print(y_data)
  • 创建模型
model = linear_model.ElasticNetCV()
model.fit(x_data,y_data)

print(model.alpha_)  #弹性往系数
print(model.coef_)  #相关系数 
  • 做预测
#做预测
model.predict(x_data[-2,np.newaxis])

上边的代码表示我们对x_data的倒数第2行数据进行预测,它的真实值对应的是y_data的倒数第二个数据,由上边的数值图我们可以看到真实值为115.7,我们的预测结果显示

数值很接近,模型训练成功!



版权声明:本文为xiaoming1999原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。