【问题标题】:k fold cross validation model assessmentk折交叉验证模型评估
【发布时间】:2018-12-17 06:24:37
【问题描述】:

我一直在阅读有关 k-fold 交叉验证技术的信息,我通过 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-fold CV 时,您会得到 k 个不同的估计值 模型的错误——比如 e_1、e_2、e_3、...、e_k。因为每个 e_i 都是一个错误 估计,理想情况下应该为零。

要检查模型的偏差,请找出所有 e_i 的平均值。如果 这个值很低,它基本上意味着你的模型给出的错误很低 平均而言——间接确保你的模型关于 数据足够准确。

根据 iris 数据集的 SVM 的例子,它给出的平均值是 0.98,那么这是否意味着我们的模型不够灵活?

【问题讨论】:

  • 0.98 表示 98% 的准确率,也就是 2% 的误差,听起来一点也不差。

标签: python scikit-learn cross-validation


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

Accuracy: 0.98 (+/- 0.03)

您的结果表明,您有 95% 的信心认为平均准确度将介于 0.95 和 1 之间。

【讨论】:

    【解决方案2】:

    所以我认为您的问题是对 k-fold 用途的误解。我想我会解释一些关于它的事情。

    当您的样本量较小并且您需要能够测试它的准确度时,它会用于机器学习。 K-fold 将您的数据拆分为 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.
    

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 2016-01-15
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多