【机器学习】LASSO算法&弹性网络

1.在上一次我们说了Rigde回归。在那之间我们说了对于代价函数有两种正则化的方式:L1正则化和L2正则化。这两种正则化的目的有一个很重要的共同点就是抵抗多重共线性,在岭回归中我们使用的是L2正则化,那么今天就简单的说一下L1正则化。

                             【机器学习】LASSO算法&弹性网络_第1张图片

上边的函数就是Lasso算法的代价函数,也是L1正则化之后的代价函数。在这种方法下,对于代价函数最小值的求解其实是一样的,就不再仔细的说明了,但是我们来看一下Lasso算法和岭回归的关系。说到二者的关系,就要说一个很重要的图:

                                       【机器学习】LASSO算法&弹性网络_第2张图片

 

红色是求最小值区域,而蓝色是约束条件区域。由此可见,由于Lasso的约束条件是以绝对值形式呈现,约束条件更加尖锐,回归的估计参数更加容易为零。所以在Lasso算法中,对于一下对答案贡献比较小的系数很容易被压缩成0.我们采用上节的数据,在Py中实现一下算法。

import numpy as np
from sklearn import linear_model
data=np.genfromtxt("D:/ML/data.csv",delimiter=',')
x_data=data[1:,2:]
y_data=data[1:,1]
model=linear_model.LassoCV()
model.fit(x_data,y_data)
print(model.alpha_)
print(model.coef_)

比较简洁,得到的效果是这样的:

【机器学习】LASSO算法&弹性网络_第3张图片

可以看到,后边三个相关系数就被压缩成了0.Lasso算法在抵抗多重共线性并且数据稀疏时,具有很好的效果。

2.这一节和上一节我们说到了两种基于代价代价函数正则化的算法:Ridge和Lasso。他们各有利弊,所有在05年,一种新的代价函数附加惩罚的方法被提出来了:弹性网络。

     

弹性网络结合了Ridge和Lasso算法,是的二者在代价函数中各自占有一定的贡献值。其中ra是一个很重要的参数,它决定了到底哪种正则方法占据主导地位,在实际的应用过程中,这种回归算法使用的更加广泛。我们依然可以用Py中sklearn的库函数实现。

import numpy as np
from sklearn import linear_model
data=np.genfromtxt("D:/ML/data.csv",delimiter=',')
x_data=data[1:,2:]
y_data=data[1:,1]
model=linear_model.ElasticNet()
model.fit(x_data,y_data)
print(model.alpha)
print(model.coef_)

得到的输出是:

【机器学习】LASSO算法&弹性网络_第4张图片

可以看出来,后边对于相关系数,后三个变化不大,但是对于前三个,弹性网络得到的更加符合实际。回归到此告一段落。下一阶段是:分类。

你可能感兴趣的:(机器学习)