Python 如何通过交叉验证检测过度拟合:差异阈值应该是多少?

Python 如何通过交叉验证检测过度拟合:差异阈值应该是多少?,python,machine-learning,classification,cross-validation,Python,Machine Learning,Classification,Cross Validation,在建立分类模型后,我通过准确度、精密度和召回率对其进行了评估。为了检查过盈,我使用了K折叠交叉验证。我知道,如果我的模型分数与交叉验证分数相差很大,那么我的模型就过拟合了。然而,我一直在思考如何定义阈值。比如,分数上的差异到底有多大,这就意味着模型过于拟合了。例如,这里有3个分割(3倍CV,shuffle=True,random_state=42)及其在逻辑回归模型上的各自得分: Split Number 1 Accuracy= 0.9454545454545454 Precision= 0.

在建立分类模型后,我通过准确度、精密度和召回率对其进行了评估。为了检查过盈,我使用了K折叠交叉验证。我知道,如果我的模型分数与交叉验证分数相差很大,那么我的模型就过拟合了。然而,我一直在思考如何定义阈值。比如,分数上的差异到底有多大,这就意味着模型过于拟合了。例如,这里有3个分割(3倍CV,shuffle=True,random_state=42)及其在逻辑回归模型上的各自得分:

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的逻辑回归模型的直接训练:

Accuracy= 0.9530201342281879
Precision= 0.952054794520548
Recall= 1.0

那么,我如何决定我的分数需要变化多少才能推断出一个过拟合的情况呢?

我假设您使用的是:

这将分割您的培训和测试数据

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

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\u train\u score默认设置为False以保存计算 时间要评估培训集上的分数,您需要 设为真

在那里你还可以看到你的褶皱的训练分数。如果您希望看到训练集的精度为1.0,那么这是过度拟合

另一个选择是: 多跑几步。然后你确定算法没有过度拟合,如果每个测试分数都有很高的准确性,那么你做得很好


你添加了基线吗?我会假设它是二进制分类,我感觉数据集是高度不平衡的,所以0.96 accuracy通常不是很好,因为你的虚拟分类(总是一个类)的准确度是0.95。

我的训练分数是0.99710,但是,它是一个分类模型,运行在一袋单词特征上进行审查分析。课堂上也没有不平衡。对于正面情绪和负面情绪,桶大小分别为400和30。那么,上面的训练分数是否暗示过度适合?