k折交叉验证模型评估

时间:2018-07-09 14:17:29

标签: python scikit-learn cross-validation

我一直在阅读有关k倍交叉验证的技术,并且我通过了this example

>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_validation.cross_val_score(
...    clf, iris.data, iris.target, cv=5)
...
>>> scores                                              
array([ 0.96...,  1.  ...,  0.96...,  0.96...,  1.        ])

平均得分和得分估计的标准偏差由下式给出:

>>>
>>> print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
Accuracy: 0.98 (+/- 0.03)

this source

  

执行k倍CV时,您会得到k个不同的估算值   模型的错误-例如e_1,e_2,e_3,...,e_k。由于每个e_i都是错误   估计,理想情况下应该为零。

     

要查看模型的偏差,请找出所有e_i的平均值。如果   该值很低,这基本上意味着您的模型给出的误差很小   平均而言–间接确保您的模型对   数据足够准确。

根据带有虹膜数据集的SVM的示例,其平均值为0.98,这是否意味着我们的模型不够灵活?

2 个答案:

答案 0 :(得分:0)

所以,我认为您的问题是对k折的误解。以为我会解释几件事。

它在机器学习中用于当样本量较小且需要能够测试其准确性时。 K折将您的数据分为k个不同的测试。可以这么说,它是5,其20%用于测试,80%用于培训,而其中20%用于测试,则切换到每个测试,而80%用于培训。当您担心由于数据量太少而产生偏差时,此功能很有用。

您获得的准确度是在k个测试中它平均能够识别出您要寻找的内容的准确度,在这种情况下,可以正确识别出哪个虹膜。

0.98% is quite a decent number so your model is fine. Thats an error rate of 0.02 
which is close to the 0 of the goal, as it is unlikely to ever hit 0.

答案 1 :(得分:0)

  1. 您链接到的Wordpress网站是指“错误”,而您正在使用的代码正在计算accuracy,因此,较高的值对您更有利。
  2. 平均准确度为0.98。好吗?我不能说,因为只能相对于基准进行判断。
  3. 进行交叉验证时,您主要关注分类器的稳定性,而不是平均准确性。交叉验证本质上是在问:“我的分类器在数据集中不同部分的表现如何?”然后您使用结果来回答:“我的分类器对之前从未见过的数据的表现如何?”因此,您确实需要查看准确性得分的标准偏差。

Accuracy: 0.98 (+/- 0.03)

您的结果表明您有95%的置信度,平均准确度将在0.95和1之间。