【发布时间】:2021-02-20 03:21:19
【问题描述】:
我正在使用 scikit-learn 对我的数据进行分类,目前我正在运行一个简单的决策树分类器。 我有三个班级存在很大的不平衡问题。类是 0,1 和 2。次要类是 1 和 2。
让您了解类的样本数量:
0 = 25.000 samples
1 = 15/20 less or more
2 = 15/20 less or more
所以小类大约占数据集的 0.06%。 我遵循的解决不平衡问题的方法是次要类的 UPSAMPLING。代码:
from sklearn.utils import resample,
resample(data, replace=True, n_samples=len_major_class, random_state=1234)
现在问题来了。我做了两个测试:
- 如果我对次要类进行上采样,然后将我的数据集分为两组,一组用于训练,一组用于测试...准确度为:
precision recall f1-score support 0 1.00 1.00 1.00 20570 1 1.00 1.00 1.00 20533 2 1.00 1.00 1.00 20439 avg / total 1.00 1.00 1.00 61542
非常好的结果。
- 如果我只对 training 数据进行上采样并保留原始数据进行测试,则结果是:
precision recall f1-score support 0 1.00 1.00 1.00 20570 1 0.00 0.00 0.00 15 2 0.00 0.00 0.00 16 avg / total 1.00 1.00 1.00 20601
如您所见,全局准确率很高,但第 1 类和第 2 类的准确率是零。
我是这样创建分类器的:
DecisionTreeClassifier(max_depth=20, max_features=0.4, random_state=1234, criterion='entropy')
我也尝试将class_weight 与 balanced 值相加,但没有任何区别。
我应该只对训练数据进行上采样,为什么会出现这个奇怪的问题?
【问题讨论】:
标签: python machine-learning scikit-learn