r - SMOTE算法及分类 : overrated prediction success

标签 r machine-learning cross-validation oversampling

我遇到了一个无法找到答案的问题。我有一个二元分类问题(输出 Y=0 或 Y=1),Y=1 为少数类(实际上 Y=1 表示公司默认,原始数据框中比例=0.02)。 因此,我仅在训练集上使用 SMOTE 算法计算过采样(在将数据帧分割为训练集和测试集之后)。我在训练集上训练逻辑回归(“默认”类别的比例=0.3),然后查看 ROC 曲线和 MSE 来测试我的算法是否能很好地预测默认值。 我在 AUC (AUC=0.89) 和 MSE (MSE=0.06) 方面都得到了非常好的结果。 然而,当我尝试更精确地、单独地审视我的预测时,我发现 20% 的违约率没有得到很好的预测。 您是否有一种方法可以很好地评估我的预测的质量(质量对我来说意味着可以很好地预测默认值的预测)。我认为 AUC 是一个很好的标准...... 到目前为止,你还有一个方法来改善我的回归吗? 谢谢

最佳答案

对于每个分类问题,您都可以构建一个 confusion matrix

这是一个双向输入矩阵,不仅可以让您看到您的正确预测真阳性/真阴性 (TP/TN),还可以看到还有误报 (FP)/误报 (FN),这在大多数情况下是您真正感兴趣的。

FP 和 FN 是您的模型所犯的错误,您可以使用灵敏度或<强>特异性(link)。

请注意,您无法在不降低另一个的情况下改进其中一个。所以有时你需要选择一个。

一个很好的折衷方案是 F1-score ,它试图对两者进行平均。

因此,如果您对默认值更感兴趣(假设 defaults=Positive Class ),您会更喜欢具有更高灵敏度的模型。但记住也不要完全忽视特殊性。

这里是 R 中的示例代码:

# to get the confusion matrix and some metrics
caret::confusionMatrix(iris$Species, sample(iris$Species))

关于r - SMOTE算法及分类 : overrated prediction success,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173236/

相关文章:

r - 在 caret::train 函数中使用 bagImpute 预处理时出现缺失值错误

r - 解决 a[b] 可能返回不同长度向量的问题的有效方法是什么?

r - 逐行应用 strsplit

r - 根据缺失行的宽数据计算出的时间差

machine-learning - GoogLeNet 模型的微调

python - 如何从python中sklearn中的cross_val_predict获取排序概率和名称

python - 将 GridSearchCV 用于 RandomForestRegressor

r - 如何在两个名称列表中找到匹配项

matlab - 多步预测神经网络

machine-learning - 如何使用 SelectKBest 选择的特征来训练模型?