我比较哪两个准确度来查看模型是否过拟合?
您应该比较训练和测试的准确度以识别过度拟合。主观上远高于测试准确度的训练准确度表明过度拟合。
这里的“accuracy”是广义的,可以用F1、AUC、error(增加变减少,高变低)等来代替。
我建议“机器学习向往 - Andrew Ng ”的“偏差和方差”和“学习曲线”部分。它以清晰的叙述呈现所有案件的情节和解释。
当我运行 10 倍交叉验证时,我得到了 10 个准确度,我可以取平均值/平均值。我应该将其称为验证准确性吗?
不,这是一个 [估计] 测试准确度。
验证集和测试集(以及它们相应的准确性)之间的区别在于验证集用于构建/选择更好的模型,这意味着它会影响最终模型。然而,由于 10-fold CV 总是在其 10% 的保留中测试一个已经构建的模型,并且这里不用于在模型之间进行选择,所以它的 10% 保留是测试集而不是验证集。
之后,我在 30% 的测试数据上测试模型并获得测试准确度。
如果不使用 K-fold 在多个模型之间进行选择,则不需要这部分,对 100% 的数据运行 K-fold 以获得测试准确度。否则,您应该保留此测试集,因为 K-fold 的结果将是验证准确度。
在这种情况下,训练准确率是多少?
从 10 折中的每一折中,您可以获得 10% 数据的测试准确度和 90% 数据的训练准确度。在 python 中,方法cross_val_score
只计算测试精度。以下是两者的计算方法:
from sklearn import model_selection
from sklearn import datasets
from sklearn import svm
iris = datasets.load_iris()
clf = svm.SVC(kernel='linear', C=1)
scores = model_selection.cross_validate(clf, iris.data, iris.target, cv=5, return_train_score=True)
print('Train scores:')
print(scores['train_score'])
print('Test scores:')
print(scores['test_score'])
也设置return_estimator = True
获得训练有素的模型。
更多关于验证集
验证集出现在两种一般情况下:(1)构建模型,(2)在多个模型之间进行选择,
构建模型的两个示例:我们 (a) 停止训练神经网络,或 (b) 当验证集上模型的准确性开始下降时停止修剪决策树。然后,我们在一个保留集上测试最终模型,以获得测试精度。
在多个模型之间进行选择的两个示例:
一个。我们在一个有 3 层的神经网络和一个有 5 层的神经网络上进行 K-fold CV(为每个神经网络获取 K 个模型),然后我们选择在 K 个模型上平均验证精度最高的 NN;假设 5 层神经网络。最后,我们在 80% 的训练、20% 的组合 K 折叠的验证拆分上训练 5 层 NN,然后在保留集上对其进行测试以获得测试准确度。
湾。我们在验证集上应用两个已经构建的 SVM 和决策树模型,然后我们选择具有最高验证准确度的一个。最后,我们在保留集上测试所选模型以获得测试准确性。