使用 smote 的过采样和下采样不适用于随机森林

数据挖掘 机器学习 分类 r 阶级失衡
2021-10-01 12:25:09

我正在尝试解决高度不平衡的数据集上的分类问题。我正在使用 SMOTE 对少数样本进行过度采样,并对多数样本进行下采样。创建平衡数据集后,我应用了随机森林模型。但是,即使使用平衡的数据集,少数类的预测误差也非常高。可能出了什么问题?

library(DMwR)
new.data <- SMOTE(Clicked ~ ., train, perc.over = 600, perc.under =  80)
table(new.data$Clicked)

rand.forest <- randomForest(Clicked ~., data=new.data, mtry = 7,
                            importance = TRUE, proximity=TRUE, ntree = 1000
                            )


#confusion matrix
table(yhat.rf, test$Clicked)

yhat.rf   0   1
      0 889  47
      1  57   7
4个回答

根据我的经验,赋予观察权重(如果使用的算法支持它)通常对于高度不平衡的分类问题效果更好。因为,您正在使用 RandomForests,我建议您尝试一下。

平衡您的数据集并不能保证均匀的预测拆分。想象一下,你的特征根本无法区分正面和负面的例子。在这种情况下,即使你平衡了数据集,你也会学习到一个基本上随机猜测每个示例的决策边界。因此,您会期望您的预测误差会反映多数/少数类的分布。

在这种情况下,您可能具有很强的预测功能,或者您可能没有足够的数据。

SMOTE 不适用于严重的数据不平衡,特别是如果您在少数类中存在很大差异尝试边界 SMOTE 或 SMoteBoosting

根据经验,我也会考虑检查 ROC 和 AUC。人们可能会尝试使用欠采样以及其他过采样方法。在 R 中,您拥有可以为您提供不同选项的工具箱。

您还可以查看这篇论文,该论文提供了不同方法之间的比较,并在过度采样或欠采样更可取时得出一些见解。

但是,我同意 jamesmf 首先检查您的功能的辨别力。