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

Posted

技术标签:

【中文标题】属性对 Python 中特定目标的预测能力,使用 Sklearn 中的特征选择【英文标题】:Attribute's predictive capacity for a particular target in Python, using feature selection in Sklearn 【发布时间】:2017-04-08 01:04:15 【问题描述】:

Scikit-Learn(或一般的算法)中是否有任何特征选择方法可以赋予属性的能力/预测能力/重要性以预测特定目标的权重?例如,@ 987654323@,对 4 个属性权重中的每一个进行排序,以分别预测 3 种鸢尾花,但对于具有约 1k-10k 属性的更复杂的数据集。

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

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

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

【问题讨论】:

【参考方案1】:

单一目标

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

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

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

敏感性分析

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

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

回顾模型

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

    高度特定于所讨论的模型技术 复杂,因为模型越非线性,模型的特征交互越多,“解开事物”就越难。

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

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

一般特征重要性

对于一般特征重要性,即所有目标,您可以查看this part of the scikit-learn documentation。

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

【讨论】:

这个目标是特定的吗?或者它是否应用了一般的预测过程? 更新了我的答案,以更好地解决特定于目标的推理。 感谢您的回答更新。单一目标部分提供了一些关于如何完成的见解,但它基本上是说从头开始构建模型并对数据进行分类。敏感性分析和回顾模型部分似乎需要强烈的组合学来尝试所有的变化及其预测能力。一般功能的重要性是我试图避免的。虽然,f 检验非常有趣,但我不知道它的存在。谢谢你。投票赞成。【参考方案2】:

我会为每个不同的可能目标值手动构建单独的二元分类模型并比较模型。您可以对值进行标准化,但是数值本身的信息量不如变量的顺序。

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

【讨论】:

以上是关于属性对 Python 中特定目标的预测能力,使用 Sklearn 中的特征选择的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用 sklearn 对模型进行单一预测?

《python机器学习—预测分析核心算法》:理解数据

python如何预测下一年的数据

机器学习:半朴素贝叶斯分类器

只需一行代码!Python中9大时间序列预测模型

朴素贝叶斯分类:拉普拉斯修正