Scikit-Learn
(或algos总体上)是否有任何特征选择方法可以给出属性能力/预测能力/重要性的权重以预测特定目标?例如,from sklearn.datasets import load_iris
对4个属性中的每个属性进行排名,以分别预测3种虹膜物种,但对于更复杂的数据集,w/〜1K-10k属性。
我正在寻找类似于RandomForestClassifier的feature_importances_
的东西。但是,RandomForestClassifer
给出了整个预测过程的每个属性的权重。权重不需要加起来,但是我想找到一种将特定属性子集与特定目标相关联的方法。
首先,我尝试"过度拟合"模型来丰富特定目标,但结果似乎在目标之间没有太大变化。其次,我尝试通过查找哪些属性具有最大的变化来进行安排,但这并没有直接转化为预测能力。第三,我尝试了稀疏模型,但遇到了与使用feature_importances_
相同的问题。
完全做到这一点的示例或教程的链接。可能是关于如何在随机森林中遍历决策树并存储预测特定目标的节点的教程。
单个目标
大多数模型几乎不是黑匣子,因此,如果您对特定目标感兴趣,则可以简单地查看模型的系数,然后手工进行模型计算,以了解该模型如何达到其输出。例如:
- 对于线性模型,您只需要与系数倍增并添加偏差
- 对于神经网络,您需要了解所有系数和激活功能,并进行一些计算,以查看如何将输入转换为隐藏层中的新"功能",然后最后输出
- 对于一个随机的森林,您需要查看森林中所有树木的决策边界
- 等。
基于此类分析,您可以决定最重要的输入。
灵敏度分析
也许更有用的是,当您的输入值更改时,模型输出如何变化。这将使您对输入的重要性和敏感性有更高的了解。这个概念称为灵敏度分析。对于大多数方法,您可以简单地对输入进行一些随机抽样并分析输出。
这对于特征选择很有用,因为不敏感的输入是修剪的候选。
回头看模型
灵敏度分析基于扰动模型输入的想法,以了解有关模型如何产生其输出的信息。查看事物的另一种方法是将输出和推理向后倒入模型,最后将输入倒入模型。这样的方法是:
- 高度特定于相关模型技术
- 复杂,因为模型的非线性越多,并且模型具有越多的特征交互,那么"解开事物"的难度就越大。
对于特定于随机森林的讨论,请看一下此Q& a。
可视化技术可以帮助您。来自可以提供见解的神经网络工具的示例:http://playground.tensorflow.org/
一般功能重要性
为了一般特征的重要性,即在所有目标上,您可以查看Scikit-Learn文档的这一部分。
这里的示例显示了如何使用F-TEST进行单变量特征选择以进行功能评分。
我将为您的每个可能的目标值手动构建单独的二进制分类模型并比较模型。您可能可以使值归一化,但是数值本身与变量的排序相比,内容本身不太有用。
您也可能想考虑使用逻辑回归模型来计算特征重要性的不同方式。