9

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

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

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

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

回答

4

单目标

大多数模型几乎不黑盒子,所以如果你有兴趣在一个特定的目标,你可以简单地看一下模型的系数,并用手做模型计算,以了解如何该模型出现了。例如:

  • 因为你只需要与系数相乘,并添加了偏置
  • 因为你需要知道的所有的系数和激活功能的神经网络,并做了一些计算来看看一个线性模型如何将输入转化为隐藏层新的“功能”,然后最后输出
  • 对于你需要看看所有的树木的决策边界在森林
  • 等等
随机森林

基于这样的分析,你可以决定你认为哪些输入最重要。

敏感性分析

更加有用,也许将是怎么看待模型输出的变化,当你输入值的变化。这将使您更深入地了解投入的重要性和敏感性。这个概念被称为sensitivity analysis。对于大多数方法,您可以简单地对输入进行一些随机抽样并分析输出。

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

回首到模型

敏感性分析是基于扰动输入到模型来学习一些有关的模型是如何出现,其输出的想法。看待事物的另一种方式是将输出和原因反向输入模型,最后输入输入。这样的方法是:

  1. 高度特异性的问题
  2. 复杂的模型技术中,由于多个非线性模型是,越特征交互模型有,就越难是“排解东西。

有关随机森林特定的讨论,请看this Q&A

可视化技术可以提供帮助。 http://playground.tensorflow.org/

一般功能重要性

对于一般功能的重要性,即在所有的目标,你可以看看this part of the scikit-learn documentation:从一个神经网络工具,可以洞察例子。

The example here显示了如何使用功能评分的F检验进行单变量特征选择。

+0

这个目标是否特定?还是一般应用预测过程? –

+0

更新我的答案以更好地解决特定于目标的推理。 –

+0

感谢您的答案更新。单个目标部分提供了一些关于它如何完成的信息,但基本上是说从头构建模型并对数据编目。敏感性分析和回顾模型部分似乎需要强烈的组合学来尝试所有的变化及其预测能力。一般特征的重要性是我试图避免的。虽然,f检验非常有趣,我不知道存在。谢谢你。上投了反对票。 –

2

我会手动为每个不同的可能目标值构建单独的二进制分类模型,并比较模型。您可以对这些值进行归一化处理,但是数值本身对变量排序的信息较少。

另外,您可能需要考虑使用逻辑回归模型来计算特征重要性的不同方式。