使用 Random Forest one-Vs-All 比使用 Random Forest multiclass 性能更好?

机器算法验证 随机森林 scikit-学习 多级
2022-02-15 14:24:58

我正在研究一个包含 9 个可能标签的多类问题,为此我有一个数据集,其中包含约 50.000 个示例和约 200 个特征。每个示例只能属于一个类。不同标签之间的数据相当平衡。

鉴于其稳健性和可扩展性,我决定使用随机森林(包含 1000 棵树的集合)作为学习方法。为了评估给定此数据集的模型的性能准确性,我使用了分层 5Fold 交叉验证(我使用的是 scikit-learn 0.18)。

由于随机森林本质上可以处理多类数据集,因此我直接在给定数据集上使用它并获得了 79.5 的准确度±0.3。我也有兴趣知道哪些特征更重要,可以从scikit的RandomForestClassifier中的属性feature_importances_中轻松提取。然而,鉴于数据集平衡良好,并且正如预期的那样,200 个特征中几乎相同数量的特征对不同的类有贡献,我无法区分哪些特征对每个类的贡献最大。

因此,我采用了使用相同随机森林设置的一对多策略(顺便说一下,成本敏感,考虑到使用 oneVsAll 策略时数据的不平衡),这让我可以查看每个类与其余哪些功能更重要。我得到的结果是合理的。更重要的是,当查看使用这种策略的模型的性能时,我得到了 88.7±0.2 的准确率,这让我感到惊讶,因为我期望多类随机森林能够更好地分类,因为它具有多类性质。

我说得对吗?这样的准确性差异是否合理?此外,考虑到随机森林本身可以解决多类问题而无需任何“黑客”(例如 oneVsAll 策略),上述策略是否正确且公平?

2个回答

我和你有完全相同的问题,发现你的主题没有答案,有点难过......

也就是说,我发现这篇论文:One-Vs-All Binarization Technique in the Context of Random Forest ( https://www.elen.ucl.ac.be/Proceedings/esann/esannpdf/es2015-5.pdf ) 发表于2015 年。

与标准多类随机森林分类器相比,作者展示了使用一对多随机森林分类器的更好分类性能。

作者没有提供很多线索说明为什么它工作得这么好,只是在 one-versus-rest 上下文中生成的树更简单。

我想知道自从您发布问题以来您是否自己找到了一些答案?

归根结底,您选择的模型类定义了决策边界的形状——如果您将 RandomForests 用作多类或一对多的多类分类器,则边界将受到同样的约束,唯一的区别是是您用来拟合模型的数据。根据您的模型与数据的拟合程度,以及您的模型对数据不平衡问题的敏感程度,我并没有真正看到多类应该比一对多更好的先验原因。他们只是给你不同的东西——一个给你一个对每一对类的决定,代价是训练更多的模型,一个给你马上的类决定。这对我来说是完全合理的,特别是考虑到 RandomForests 不能解决凸损失函数,你会得到你所做的结果。

如果您特别有兴趣找到与您的分类器相关的特征,我建议使用 L1 损失惩罚的逻辑回归,因为稀疏性会给您一小部分特征,这些特征可以预测您的每一对类有。