非常显着的特征?

数据挖掘 随机森林 特征选择 scikit-学习
2021-09-29 22:46:51

我是数据科学的新手。我想知道一个人应该如何对待一个非常重要的特征。

例如,其中一个功能是“开”/“关”,当它“关”时,其他任何功能都不重要,输出将始终为 0。所以我应该删除它“关”的所有行我的训练/测试数据集?我觉得这样我会变得更好。

如果我删除这些行,我会担心如何处理测试集中的这些行。例如,我必须编写代码来循环遍历数据并在这些行的预测列中放置一个 0,并确保其他所有内容都对齐。(这都是与 Kaggle 相关的,所以训练集是几列特征和一个 y_column,而测试集没有 y_column,我们应该预测它。)

如果这很重要,我正在使用 Python 和 Scikit Learn 的随机森林。

4个回答

与其丢弃主要特征(这将丢弃信息),不如尝试减少在进行每个分区时随机选择的特征数量。在 scikit 的语法中,这是max_featuresmtry在 R 的 randomForest 中)。默认情况下,这被设置为比较所有特征的平方根(http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html),而不是尝试更小(甚至可能是 2 aka 决策树桩)。您可能还需要更多的树而不是更高的设置。这将允许您从更细微的特征中提取信息,而不会丢失主要特征提供的所有重要信息。

实际上,您使用哪种分类算法并不重要。机器学习的重点在于算法学习如何组合可用的特征来达到预期的结果。如果一个功能能够“关闭其他功能”,算法就会学习到这一点(它还会学习很多你可能不知道的东西)。

所以简而言之,不,以这种方式修改数据可能不会影响分类性能。不需要将这些东西合并到训练集中是机器学习如此酷的部分原因!

如果您使用的是 RandomForest,那么我相信它会采用此规则,因为离开0提供完整的节点纯度。但是,您的直觉是正确的,预处理数据并不少见。您可以将此规则视为单级决策树或决策树桩(又名 1 规则算法)。基本上,您将从测试和训练中删除这些记录以减少噪音。在分类期间,您还将预处理,如果输入向量与规则匹配,则分类为 0,否则将输入向量与您的模型分类。

您似乎正在使用随机森林模型。

我看不出该功能将如何影响模型。它实际上并没有什么区别,因为随机森林迭代地划分样本空间,并且您的样本空间将被划分为switch = 0switch = 1

因此,这些样本点的存在不会影响模型。