《Python大规模机器学习》 —3.3正则化特征选择

举报
华章计算机 发表于 2020/02/14 22:27:04 2020/02/14
【摘要】 本节书摘来自华章计算机《Python大规模机器学习》 一书中第3章,第3.3节,作者是[荷]巴斯蒂安·贾丁(Bastiaan Sjardin)[意]卢卡·马萨罗(Luca Massaron)[意]阿尔贝托·博斯凯蒂(Alberto Boschetti),王贵财 刘春明 译。

3.3正则化特征选择

在批处理环境中,以下是几种常见的特征选择操作:

 基于完整性(缺失值发生率)、方差和变量之间的高度多重共线性进行初步筛选,以便获得关联和可操作的特征的更干净的数据集。

 基于特征与响应变量之间的单变量关联的(卡方检验、F值和简单线性回归)的初始筛选,以便立即剔除对预测任务无用的特征,因为它们与响应的关系度不高,甚至无关。

 在建模过程中,递归方法根据其提高算法预测能力的程度来插入和/或排除特征,此判断通过对所持样本进行测试得到。使用较小的仅相关特征的子集会使机器学习算法受过拟合影响较小,其原因一是噪声变量,二是特征高维性所导致的参数过多。

通过在线设置来应用这些方法仍然可行,但所需时间很长,因为完成单个模型所需的流化数据量很大。基于大量迭代和测试的递归方法需要一个能放入内存中的灵活数据集。如前所述,在这种情况下,子采样是个很好选择,便于找出稍后将用于更大规模的特征和模型。

在继续使用非核心方法的同时,正则化是一种理想的解决方案,能在流化时选择变量并剔除嘈杂或冗余的特征。正则化对在线算法效果良好,因为当在线机器学习算法正在工作并从示例中拟合其系数时,它与之同时工作,而无须为了选择特征再运行其他数据流。事实上,正则化只是一个惩罚值,它被加入到学习过程的优化中。它依赖于特征的系数和用于设置正则化影响的参数alpha。正则化平衡机制会干预系数的权重何时由模型更新,那时,

如果更新值不够大,正则化就会通过减少结果权重起作用

。正则化alpha参数设置能排除或减少冗余变量,为获得最佳结果,必须根据经验以正确的量级为每个要学习的特定数据设置该参数。

SGD在批处理算法中实现了相同的正则化策略:

 L1惩罚将冗余而不是很重要的变量推到零

 L2减少次重要特征的权重

 弹性网络混合L1和L2正则化的影响

当有异常和冗余时,L1正则化是完美的策略,因为它会将这些特征系数推到零,使其在计算预测时不相关。

当变量之间存在许多相关性时,L2是合适的,因为其策略是仅仅减小那些其变化对于使损失函数最小化不那么重要的特征的权重。

弹性网络使用加权和来混合L1和L2,这个解决方案很有趣,因为有时L1正则化在处理高度相关的变量时不稳定,这时,它会针对所看到的示例选择这个或另一个变量。通过使用ElasticNet,许多不寻常的特征仍然会像L1正则化一样被推到零,但相关的特征将会像L2中一样被衰减。

SGDClassifier和SGDRegressor都能使用penalty、alpha和 l1_ratio等参数来实现L1、L2和弹性网络正则化。

决定惩罚方式或者两者混合后,alpha是最关键的参数。理想情况下,通过使用由10.0**- np.arange(1,7)生成的值列表来测试0.1~10-7范围内的合适值。

如果penalty决定选择何种正则化,那么如上所述,alpha决定其强度。alpha是一个乘以惩罚项的常数; 低α值对最终系数影响不大,而高值会有显著影响。最后,当 penalty='elasticnet'时,l1_ratio代表L1相对L2惩罚的百分比。

使用SGD设置正则化非常简单。例如,可以尝试将惩罚L2插入SGDClassifier中来修改之前的示例代码:

 image.png

如果想测试弹性网络混合两种正则化方法的效果,只需通过设置l1_ratio来设置 L1和L2之间的比率:

 image.png

由于正则化的成功依赖于插入正确的惩罚值和最佳alpha值,因此在处理超参数优化问题时我们会在例子中用到它。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。