我总是被教导三件事:
训练算法(rf、树等)在不平衡数据上表现不佳。
我应该只在执行特征选择后才平衡数据(主要是保持变量独立)
特征选择算法通常基于训练算法。
考虑到这三点,如何对不平衡的数据集进行特征选择?
编辑:
在与很多人交谈后,我们都得出结论,最好的办法是将训练和验证数据分开并分别平衡。在这种情况下,特征选择将使用合成数据点完成,但它们仅属于训练集,不会“泄漏”到验证/测试集,因此我在这样的情况下获得了最客观的特征选择案子。
谁能证实这个理论?
我总是被教导三件事:
训练算法(rf、树等)在不平衡数据上表现不佳。
我应该只在执行特征选择后才平衡数据(主要是保持变量独立)
特征选择算法通常基于训练算法。
考虑到这三点,如何对不平衡的数据集进行特征选择?
编辑:
在与很多人交谈后,我们都得出结论,最好的办法是将训练和验证数据分开并分别平衡。在这种情况下,特征选择将使用合成数据点完成,但它们仅属于训练集,不会“泄漏”到验证/测试集,因此我在这样的情况下获得了最客观的特征选择案子。
谁能证实这个理论?
根据我的经验,如果您使用具有某些特征(例如正则化)以避免过度拟合的现代机器学习方法,则特征选择往往会使性能更差而不是更好。米勒关于特征选择的专着在附录中隐藏了类似的建议(遗憾的是有人借了我的副本,所以我找不到它)。基本上,特征选择是为每个输入特征的学习问题添加一个二元自由度。这意味着可以通过两种方式减少特征选择标准(i)摆脱真正无信息的特征(ii)选择恰好利用数据的某些随机采样特性(即过度拟合)的一组特征。有关特征选择中过度拟合的示例,请参阅我的回答关于交叉验证和特征选择的相关问题。Ambroise 和 MacLachlan的论文也非常值得任何想将特征选择与现代机器学习方法结合使用的人阅读。
其次,类不平衡问题实际上并不是由于不平衡本身,而是因为属于少数类的模式太少,无法充分描述其分布。只要您有大量数据,大多数分类器都可以很好地处理不平衡的数据。试图平衡数据集可能会使事情变得更糟,而不是更好地通过过度纠正由于类不平衡而导致的偏差。
因此,如果由于类不平衡而出现性能问题,则意味着您没有足够的数据来充分估计模型参数,在这种情况下,您应该做的最后一件事是执行特征选择,因为这增加了自由度问题只会使估计问题变得更糟。正则化可能是一个更好的解决方案,因为它本质上增加了一个连续的自由度,并且不太容易受到过度拟合的影响。
您似乎混合了两个问题:1)使用集成学习算法(例如随机森林,RF)执行特征选择;2)平衡你的数据集,使你的算法的学习过程最大化。
对于第一个,也许你可以看看这篇论文,其中作者提出了对 RF 的修改(称为引导正则化 RF)来执行特征选择。这里有一个该算法的 R 实现,可能很有用。
然后,第二个问题在很大程度上与第一个问题分离。以我的经验,我从来没有见过一个机器学习算法在默认情况下处理得当的数据不平衡(如果任何读者有相反的经历,我会全神贯注),就像泊松、威布尔或负二项式模型那样。它们根本不适合这项任务,至少在其基本形式上是这样。但这不一定是问题:您可以自己平衡课程。
您应该确保在训练阶段属于每个类的样本数量是偶数,并且您应该使用交叉验证技术和随机选择样本重复此训练阶段,以确保您捕获了不平衡类的大部分方差(埃斯)。这样,后续使用 RF 进行特征选择的过程不应该偏向不平衡类。
这个问题讨论了不止一个重要的话题。第一个:在学习模型之前或学习过程之后,有很多技术可以处理不平衡类。平衡类的技术,如 SMOTE 和成本敏感学习以及学习模型后,包括选择不太敏感的性能指标,如 AUC 分数。第二个问题,我建议应用交叉验证,然后平衡类,然后选择特征选择技术。关于第三点,特征选择技术分为三类(过滤器、包装器和嵌入式技术),并非所有这些技术都基于训练预测模型来衡量特征的重要性。