使用Sklearn中的特征选择,属性对Python中特定目标的预测能力

O.r*_*rka 9 python classification machine-learning feature-selection scikit-learn

是否有任何特征选择方法Scikit-Learn(或一般算法)给出属性能力/预测能力/重要性的权重来预测特定目标? 例如,对from sklearn.datasets import load_iris4个属性权重中的每一个进行排序,以分别预测3种虹膜种类,但对于更复杂的数据集w/~1k-10k属性.

我寻找的东西类似于feature_importances_RandomForestClassifier.但是,RandomForestClassifer为整个预测过程的每个属性赋予权重.权重不需要加起来,但我想找到一种方法将特定属性子集与特定目标相关联.

首先,我尝试"过度拟合"模型以丰富特定目标,但结果似乎在目标之间没有太大变化.其次,我尝试通过找出哪些属性具有最大变化但不直接转化为预测能力来进行排序路线.第三,我尝试了稀疏模型,但遇到了与使用相同的问题feature_importances_.

指向完成此操作的示例或教程的链接就足够了.可能是关于如何在随机森林中遍历决策树并存储可预测特定目标的节点的教程.

Def*_*_Os 4

单一目标

大多数模型都不是黑匣子,因此如果您对特定目标感兴趣,您可以简单地查看模型的系数并手动进行模型计算,以了解模型是如何得出其输出的。例如:

  • 对于线性模型,您只需乘以系数并添加偏差
  • 对于神经网络,您需要知道所有系数和激活函数,并进行一些计算,看看输入如何转换为隐藏层中的新“特征”,然后最终输出
  • 对于随机森林,您需要查看森林中所有树木的决策边界
  • ETC。

基于此类分析,您可以决定您认为最重要的输入。

敏感性分析

也许更有用的是查看当输入值发生变化时模型输出如何变化。这将使您更深入地了解输入的重要性和敏感性。这个概念称为敏感性分析。对于大多数方法,您可以简单地对输入进行一些随机采样并分析输出。

这对于特征选择很有用,因为不敏感的输入是修剪的候选者。

回顾模型

敏感性分析基于扰动模型输入的想法,以了解模型如何得出其输出。另一种看待事物的方式是将输出和推理倒推到模型中,最后是输入。这样的方法是:

  1. 特定于所讨论的模型技术
  2. 复杂,因为模型越非线性,模型的特征交互越多,“理清事物”就越困难。

有关随机森林的具体讨论,请查看此问答

可视化技术可以提供帮助。可以提供洞察力的神经网络工具示例: http: //playground.tensorflow.org/

一般特征重要性

对于一般功能的重要性,即所有目标,您可以查看scikit-learn 文档的这一部分

此处的示例展示了如何使用特征评分的 F 检验进行单变量特征选择。