data-com / discussions

http://data-com.github.io
5 stars 0 forks source link

feature selection的重要性 #11

Open necogy opened 5 years ago

necogy commented 5 years ago

特征量选择应该成为data scientist/machine learning engineer的首要任务。很多时候我们对machine learning engineer的想象一定是在搞一些fancy模型,然而预处理(pre-processing)其实占到了工作的一大半。特征量的选择在任何机器模型训练中都极其重要。正所谓garbage in garbage out,如果进去的特征量无效,那么模型结果一定不会好。选择好的特征量比之后的各种调整参数都要来得有成效(根据我的一点经验)。

如果加进去的特征量不能预测结果,甚至毫无联系,好的情况只是多余信息,但一般情况下会让模型结果变得更糟糕。选择出真正相关且重要的特征量有以下好处:减少overfitting/提高准确率/减少训练模型时间(最大程度上排除了无关特征量)

特征量的选择一般可以分为两个思路:

  1. 考虑各种现场信息,对于有经验的人而言到底什么因素会产生影响(比如问出租车司机你觉得堵车的时候大概都是些什么情况)

  2. 在训练模型之前,观察手里有的预备特征量之间的关系,以及他们和目标(y)之间的关系。 具体而言,有几种方法 i. 单因素选择 ii. 特征量重要度 iii. 相关度矩阵

i. 单因素选择: sklearn是一个相对齐全的一个python ML/data science library, selectkbest 是sklearn提供的可以使用统计测验来找到和y(目标量)有最大相关的predictor set的工具。根据目标是分类或者回归(普通的数字也非类别)可以选择不同的计算方式。其结果会输出k个最好的特征量(这个工具的名字也很直白)。

ii. 特征量重要度(feature importance) 这个量是训练模型完成之后会得到的内置类。比如说训练完成的model叫做rfr_model, 那么rfr_model.feature_importances_里会罗列出所有predictors的重要度。

iii. 相关矩阵heatmap 通过heatmap 我们可以轻易地辨别特征量/目标量之间的相关程度。首先,选择和目标量相关性更高的哪些特征量,其次,高度相关的特征量之间我们应该只选择一个作为代表。

emptymalei commented 5 years ago

published in https://github.com/data-com/weekly/issues/8