即使数据集不平衡,随机森林分类器也只预测一个类别

数据挖掘 机器学习 scikit-学习 随机森林
2022-02-17 21:15:08

这是一个二进制分类任务,我有 15K 1 和 11K 0(目标)

我尝试了以下方法:

X = feature_cols 
y = department_wise[['Threshold']]
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=1)
model = RandomForestClassifier()
model.fit(X, y)
predicted_labels = model.predict(X_test)

X_test 仅预测 0,准确率约为 88%。我不明白为什么,因为我的数据集甚至没有不平衡。无论我尝试使用什么其他分类器,它都能以高精度显示相同的结果。请让我知道我哪里出错了。

1个回答

某些方法(给定一些数据)仅预测一个类别(意味着概率都大于或小于 0.5)并不罕见。我最近使用逻辑回归应用程序遇到了这种情况。原因通常是您没有好的特征 (x) 来预测 y。所以第一件事:看看X,y的相关性。

你可以做些什么来改善你的健康基本上是使用提升。Boosting 也是基于树的,与 RF 类似,它也是一种集成技术。但是 boosting 赋予了难以预测的观察更高的权重。LightGBM 或 Catboost 是提升的好例程。

在我的例子中,Logit 只预测了一个 AUC 约为 0.3 的类。LightGBM 在预测方面要好得多,也更加平衡,AUC 约为 0.7。

您也可以尝试使用 L1 规则(Lasso)的 Logit。也许您的某些功能在进行预测时不是很有帮助。Lasso 缩小了这些特征,这有助于做出正确的预测。