L1正则化的线性模型——套索回归

1.套索回归的原理:

和岭回归一样,套索回归也会将系数限制在非常接近0的范围内,但是它限制的方式稍微有些不同,我们称之为L1正则化。与L2正则化不同的是,L1正则化会导致在使用套索回归的时候,有一部分特征的系数会正好等于0.也就是说,有一部分特征会彻底被模型忽略掉,这也可以看成是模型对特征进行自动选择的一种方式。把一部分系数变成0有助于让模型更容易理解,而且可以突出体现模型中最重要的那些特征。

2.套索回归实战:

import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
#载入糖尿病情数据集
X,y=load_diabetes().data,load_diabetes().target
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)
#导入岭回归
from sklearn.linear_model import Lasso
#使用岭回归对数据进行拟合
lasso=Lasso().fit(X_train,y_train)
print('训练集得分:{}'.format(lasso.score(X_train,y_train)))
print('测试集得分:{}'.format(lasso.score(X_test,y_test)))
print('套索回归使用的特征数量:{}'.format(np.sum(lasso.coef_!=0)))

请添加图片描述
结果分析:
这里我们看到,套索回归在训练数据集和测试数据集的得分都相当糟糕。这意味着我们的模型发生了欠拟合的问题,而且你会发现,在十个特征里,套索回归只用了其中的2个。与岭回归类似,套索回归也有一个正则化参数alpha,用来控制特征变量系数被约束到0的强度。

3.套索回归的参数调节:

在上面的例子里,我们使用了alpha参数的默认值1,为了降低欠拟合的程度,我们可以试着降低alpha的值,与此同时,我们还需要增加最大迭代次数(max——iter)的默认设置。

import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
#载入糖尿病情数据集
X,y=load_diabetes().data,load_diabetes().target
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)
#导入岭回归
from sklearn.linear_model import Lasso
#使用岭回归对数据进行拟合
lasso=Lasso(alpha=0.1,max_iter=100000).fit(X_train,y_train)
print('训练集得分:{}'.format(lasso.score(X_train,y_train)))
print('测试集得分:{}'.format(lasso.score(X_test,y_test)))
print('套索回归使用的特征数量:{}'.format(np.sum(lasso.coef_!=0)))

请添加图片描述
结果分析:
从结果上来看,降低alpha值可以拟合出更复杂的模型,从而在训练数据集和测试数据集都难获得良好的表现,相对岭回归,套索回归的表现还要更好一些,而且它只用了10个特征中的7个,这一点也会使模型更容易被人理解。
但是,如果我们把alpha设置的太低,就等于把正则化的效果去处了,那么模型就可能会像线性回归一样,出现过拟合的问题。

4.总结

在实践当中,岭回归往往是这两个模型中的优选。但是如果你的数据特征过多,而且其中只有一小部分是真正重要的,那么套索回归就是更好的选择。同样如果你需要对模型进行解释的话,那么套索回归会让你的模型更容易被人理解,因为它只使用了输入的特征值中的一部分。

ps:sklearn中还提供了一种模型,称为弹性网模型,弹性网模型综合了套索回归和岭回归的惩罚因子。在实践当中,这两个模型的组合是效果最好的,然而代价是用户需要调节两个参数,一个是L1正则化参数,另一个是L2正则化参数。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值