繁体   English   中英

我应该使用哪个,过采样还是欠采样?

[英]Which should I use, oversampling or undersampling?

我的数据不平衡。

大概是45000:1500的失衡,但是在使用oversampling、smote、smotetomek的时候,得到了97%以上的结果。

然而,当实际进行测试时,所有1500个案例的结果都相反。

欠采样时,准确率在85%左右,1500个case中,有300个不一样,但是准确率差异很大

当然,我检查了recall和precision,但是和accuracy没有显着差异,那么你能解释一下为什么会出现这些结果吗?

sm = SMOTE(random_state=42)
X, y = sm.fit_resample(X, y) 

在此处输入图像描述

得到这个混淆矩阵

精度:0.9784
精度:0.9718
召回:0.9854
F1:0.9786
AUC:0.9784

但是实际上当我运行包含 class 1 数据的测试时得到了这个结果

test_result = model.predict(test_x)
pd.DataFrame(test_result).value_counts()

0 1589
数据类型:int64

所有 class 1 预测 0,,,
使用过采样、smote、smotetomek 时也相等

欠采样

准确度:86%

0 354
1 1235
数据类型:int64

不知道哪种情况最好? 还有什么我可以尝试的吗?

添加了我发现并引用了 imbalanced-learn.org

from sklearn.metrics import balanced_accuracy_score
balanced_accuracy_score(y_test, y_pred)  

我应该检查这个准确度分数吗? 如果我有不平衡的数据集?

当我检查有关过采样和欠采样的准确性评估时

过采样:50%
欠采样:84%

对于不知道答案的人

Random Oversampling is problem 因为是从少数class重复插入数据的随机方法,所以会因为数据重复插入而出现过拟合问题。

而且,当输入测试数据时,当然会获得不同的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM