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

How to detect overfitting with Cross Validation: What should be the difference threshold?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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回归模型的直接训练:

1
2
3
Accuracy= 0.9530201342281879
Precision= 0.952054794520548
Recall= 1.0

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


我认为您正在使用交叉验证:

enter

1
2
3
4
5
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 is set to False by default to save computation
time. To evaluate the scores on the training set as well you need to
be set to True

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

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

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