ElasticNet回归及机器学习正则化(linear_model.ElasticNetCV)

要想理解ElasticNet回归,正则化是必须要首先知道的,其次是岭回归和Lasso回归,知道了这些,弹性网回归自然也就明白了。
首先来看正则化:
假设我们都知道利用最小二乘法来做线性回归,最小二乘法回归成功的条件是(我得承认以下的所有图都是我盗的):

即上面这个函数(损失函数,目前也是目标函数)达到最小值,可得到最优的拟合参数(即θ )。
但是存在这样一种情况,如果我们用来拟合的自变量过多(或者说特征变量过多),而且特征变量之前存在很高的相关关系,比如下面这种情况:

以上两个函数都可以很好的拟合数据,但右边的函数显然有过拟合的嫌疑,为了避免这种情况,有两种方法:1、舍掉x^3和x^4这两个变量(这就是所谓的特征选择,舍弃无用的特征变量。可以人工选择,也可以利用算法来做。但有些时候我们可能并不希望舍弃数据,一方面特征选择有一定的不确定性,另一方面这个过程是比较繁琐的,这种时候我们可以采用第二种方法来解决这一问题。);2、减小θ 3和θ 4的值(即正则化,保留所有特征变量,但减少变量参数的值)。
要减小θ 3和θ 4的值,我们可以在损失函数的后面加上(1000*θ 3^2+1000*θ 4^2) , :

如此一来在最小化目标函数时,因为θ 3和θ 4前面乘了1000这样大的数字,导致θ 3和θ 4的值会非常的小,目标达成。
上面我们有选择的让θ 3和θ 4的值变小,实际情况中,我们很难判断哪些特征变量需要正则化,所以一般情况下,我们是对所有的参数都正则化处理:

即目标函数设为J(θ),其中:

是正则项,lambda为正则参数。需要注意的是,j是从1开始的,这意味着函数的常数项(θ 0)并没有被正则化。所以lambda不能设的太大,否则会导致除了常数项外,所有的参数值都很小,因变量近似等于常数项,出现欠拟合现象。

OK, 正则化介绍到此为止,来看看岭回归和Lasso回归:
岭回归的目标函数就是上面介绍的J(θ):

如果矩阵化的话,也写成:

即最小化loss函数+penalty函数,其中β就是θ(懒得编写公式,直接盗的图)
Lasso回归和岭回归的区别在于惩罚项的不同:

Lasso回归的惩罚项用的是绝对值(也称为L1正则化),而不是岭回归中的平方(L2正则化)。

再来看看ElasticNet回归,目标函数为:

也就是岭回归和Lasso回归的组合。

Python实现ElasticNet回归,有 sklearn.linear_model.ElasticNetCVsklearn.linear_model.ElasticNet两个函数可供选择,前者可以通过迭代选择最佳的lambda1和lambda2(当然你可以指定一组值),后者需要你指定lambda1和lambda2的值。
因为目标函数的形式是:
1  / ( 2  * n_samples)  *  ||- Xw ||^ 2_2 + alpha  * l1_ratio  *  ||w ||_1 +  0.5  * alpha  * ( 1  - l1_ratio)  *  ||w ||^ 2_2
所以lambda1和lambda2的指定是通过l1_ratio和alpha来完成
附上代码:
[python]  view plain  copy
  1. from sklearn import linear_model  
  2. #得到拟合模型,其中x_train,y_train为训练集  
  3. ENSTest = linear_model.ElasticNetCV(alphas=[0.00010.00050.0010.010.1110], l1_ratio=[.01, .1, .5, .9, .99],  max_iter=5000).fit(x_train, y_train)  
  4. #利用模型预测,x_test为测试集特征变量  
  5. y_prediction = ENSTest.predict(x_test))  

参考网页:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值