10.5 递归式特征消除
问题描述
自动选择需要保留的最优特征。
解决方案
使用scikit-learn的RFECV类通过交叉验证(Crossing Validation,CV)进行递归式特征消除(Recursive Feature Elimination,REF)。该方法会重复训练模型,每一次训练移除一个特征,直到模型性能(例如精度)变差。剩余的特征就是最优特征:
执行完RFE后,就可以得到应该保留的特征数量:
也可以查看哪些特征应该被保留:
甚至可以查看特征的排名:
讨论
这可能是到目前为止本书所讲的最先进的解决方案,涉及一些我们尚未详细讨论的内容。不过它的思路很简单,可以直接在这里解释。 RFE背后的思想是重复训练一个包含若干参数(也称为权重或系数)的模型,如线性回归或支持向量机。RFE首先会使用所有的特征训练模型,然后找出具有最小参数的特征(这代表该特征并不重要),并将它从特征集中移除。注意,在该方法中我们假设特征已经进行过标准化处理。
一个显而易见的问题是:应该保留多少特征?我们可以重复这个循环,直到只剩下最后一个特征。另一个选择是引入一种被称为交叉验证(CV)的方法。我们将在下一章中详细讨论交叉验证,这里只介绍总体思路。
假设有两种数据:要预测的目标向量和特征矩阵。第一步,将数据分为两组:训练集和测试集。第二步,使用训练集来训练模型。第三步,假装不知道测试集的目标向量(预测结果),将模型应用于测试集的特征,得到测试集的预测结果。最后,将测试集的预测结果与真实值进行比较,以评估模型性能。
可以通过交叉验证方法计算出RFE期间需要保留的最优特征数量。具体做法如下:在每次RFE迭代中,使用交叉验证来评估模型。如果交叉验证显示在减少一个特征后模型的性能有所改进,则继续下一次循环。如果交叉验证显示在丢弃某个特征后模型的性能变差,则将该特征重新加入到特征集,并选择这些特征作为最优特征。
在scikit-learn中,带有交叉验证的递归式特征消除是由RFECV类实现的,它包含许多重要参数。参数estimator决定训练模型的类型(如线性回归),参数step决定每次迭代丢弃的特征的数量或比例,参数scoring决定在做交叉验证时评估模型性能的方法。
延伸阅读
● 使用交叉验证进行递归式特征消除(http://bit.ly/2Ftuffz)
本书评论