楼主: 时光人
726 0

机器学习模型的功能选择 [推广有奖]

  • 3关注
  • 34粉丝

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26907 个
通用积分
428.9260
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39960 点
帖子
1629
精华
3
在线时间
579 小时
注册时间
2019-2-25
最后登录
2023-4-26

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
特征选择可能是机器学习过程中的重要组成部分,因为它可以极大地改善我们模型的性能。考虑到您提供的更多数据可以更好地学习和推广,似乎为您的模型提供了所有信息似乎很直观,但重要的是要认识到,训练模型所需的数据会随着模型的增长呈指数增长。我们用来训练模型的特征数量。这通常被称为维数的诅咒。曾经有一个很好的交互式演示此概念,但似乎该演示不再被托管。也许到某个时候,我会在d3.js中编写一个代码并在此处共享。在此之前,请观看此视频 如果您不熟悉这个概念。

表面上,我们数据集中的某些特征可能比其他特征更重要-某些特征甚至可能完全不相关。但是,我们如何系统地选择要在模型中使用的最佳功能呢?

有两种一般方法可以解决选择特征的问题。第一种方法称为过滤,它会在您将数据实际输入到模型中之前查看您的特征空间并选择最佳特征,以使我们训练的数据相对于原始数据集而言减小。我们将定义一些度量标准,例如信息增益,以评估功能。
下载.png

另一种称为包装的方法是简单地在模型上尝试一些缩小的特征空间,然后看看哪种方法效果最好。通过这种方法,我们将使用搜索中的所有功能来进行最佳选择,并结合模型评估中的性能指标来选择最佳功能。尽管这种方法要慢得多,但是我们可以实际使用模型来帮助进行特征选择,并且结果通常比过滤要好。
Screen-Shot-2017-07-03-at-8.55.40-PM.png
最终,特征选择是在减少训练模型所需的数据量而不牺牲给定模型的学习能力之间的平衡。如果过多减少特征空间,将使其更难学习,但如果根本不减少特征空间,则可能需要大量数据才能正确训练模型。

筛选范例
一种简单的过滤方法是查看每个功能的值之间的方差。方差很小的特征(换句话说,对于大多数观察而言基本相同的特征)在学习期间不会被证明是有帮助的,因此我们可以简单地忽略方差低于某个特定阈值的特征。
  1. from sklearn.feature_selection import VarianceThreshold
  2. selector = VarianceThreshold(threshold= 0.2)
  3. X_reduced = selector.fit_transform(X)
复制代码
另一种过滤方法是在简单模型(例如决策树)上训练数据集,然后使用排名的特征重要性来选择要在所需的机器学习模型中使用的特征。您可以在训练更复杂的模型(例如神经网络)之前使用此技术来减少特征空间,这将需要更长的训练时间。
  1. from sklearn.ensemble import ExtraTreesClassifier
  2. from sklearn.feature_selection import SelectFromModel
  3. simple_model = ExtraTreesClassifier()
  4. simple_model = simple_model.fit(X, y)
  5. selector = SelectFromModel(simple_model, prefit=True)
  6. X_reduced = selector.transform(X)
复制代码

注意:ExtraTreesClassifier是一个随机决策树分类器,用于在决定进行下一个拆分的位置时对特征空间的随机子集进行采样。

最后,您可以分别查看每个功能并进行统计测试以评估其在预测输出中的相对重要性。Sklearn提供选择器以保持顶部ķ 功能(其中 ķ由用户定义),SelectKBest或保持顶部X 的功能(其中 X由用户定义)SelectPercentile。

包装实例
当使用包装技术时,我们实际上将使用所需模型中的性能指标来帮助我们选择功能;例如,我们可以查看验证集的错误。

您基本上可以从两个地方开始,所有功能都存在或不存在。在正向搜索中,我们实际上将一无所获,然后逐一添加增加了验证误差下降幅度最大的功能。我们将继续此过程,直到模型性能的增量增益下降到某个阈值以下。

在向后搜索中,我们将从模型中存在的所有功能开始,然后一个一个地消除对模型性能的损害最小的功能。我们将继续执行此过程,直到对模型性能的损害超过某个阈值为止。

也可以使用向前和向后搜索的组合来执行双向搜索,该搜索可以考虑特征组合对模型性能的影响。

我们可以使用递归特征消除方法在sklearn中执行向后搜索。给定一个为要素分配权重的模型(无论是借助线性回归模型中的系数还是决策树模型中的要素重要性),我们都可以基于权重是要素重要性的代理的假设,以较低的权重迭代修剪要素。这将一直持续到您达到指定数量的功能为止。或者,您可以将此技术与使用RFECV的交叉验证相结合,以自动确定理想的特征数量。

注意:我们还可以在简单模型上利用递归特征消除作为一种过滤技术来减少特征空间,然后再训练更复杂的模型。














二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:机器学习 classifier percentile Threshold transform

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 15:56