如何使用交叉验证检测过度拟合:差异阈值应为多少?

时间:2019-11-27 05:08:01

标签: python machine-learning classification cross-validation

建立分类模型后,我通过准确性,准确性和召回率对其进行了评估。为了检查拟合度,我使用了K折交叉验证。我知道,如果我的模型得分与交叉验证得分相差很大,那么我的模型就不合适了。但是,如何定义阈值仍然存在问题。就像分数有多少差异实际上可以推断出模型过度拟合。例如,这是3个分割(3个折叠CV,shuffle = True,random_state = 42)及其在Logistic回归模型上的相应得分:

Split Number  1
Accuracy= 0.9454545454545454
Precision= 0.94375
Recall= 1.0

Split Number  2
Accuracy= 0.9757575757575757
Precision= 0.9753086419753086
Recall= 1.0

Split Number  3
Accuracy= 0.9695121951219512
Precision= 0.9691358024691358
Recall= 1.0  

没有CV的Logistic回归模型的直接训练:

Accuracy= 0.9530201342281879
Precision= 0.952054794520548
Recall= 1.0

那么我该如何决定我的分数需要变化多大才能推断出过度适合的情况?

1 个答案:

答案 0 :(得分:1)

我认为您正在使用Cross-validation

enter image description here

这将拆分您的训练和测试数据。

现在您可能已经实现了以下内容:

from sklearn.model_selection import cross_validate
from sklearn.metrics import recall_score
scoring = ['precision_macro', 'recall_macro']
clf = svm.SVC(kernel='linear', C=1, random_state=0)
scores = cross_validate(clf, iris.data, iris.target, scoring=scoring,cv=5)

所以现在您只计算考试成绩,这在所有3种情况下都非常好。

第一个选项是:

  

return_train_score默认情况下设置为False以保存计算   时间。要评估训练集上的分数,您还需要   设置为True

您还可以在这里查看褶皱的训练成绩。如果您看到训练集的准确度为1.0,则表示过拟合。

另一个选项是: 运行更多拆分。然后,您可以确保算法不会过拟合,如果每个测试分数都具有很高的准确性,那么您做得很好。

您是否添加了基准?我认为这是二进制分类,并且我感觉数据集高度不平衡,所以一般来说0.96的精度可能不太好,因为您的虚拟分类(总是一个类)的精度为0.95。