【问题标题】:How to get actual mean of k folds by using GridSearchCV?如何使用 GridSearchCV 获得 k 折的实际平均值?
【发布时间】:2017-07-30 11:43:33
【问题描述】:

我正在使用 GridSearchCV 和 cv = KFold(n_splits=10),scoring='accuracy' 和一些测试 SVM (c=1, gamma=1)。

对于这个测试,我只使用了 51 个值的向量,以及 51 个二进制响应中的另一个。

我的结果如下所示:

 'split0_test_score': array([ 0.16666667]), 'split1_test_score': array([ 0.4]), 'split2_test_score': array([ 0.8]), 'split3_test_score': array([ 0.6]), 'split4_test_score': array([ 0.2]), 'split5_test_score': array([ 1.]), 'split6_test_score': array([ 0.2]), 'split7_test_score': array([ 0.]), 'split8_test_score': array([ 0.4]), 'split9_test_score': array([ 0.6]), 

'mean_test_score': 数组([ 0.43137255]) ...

问题是平均分并不是所有折叠测试分数的实际平均分(应该是0.4367)。有没有办法从 GridSearchCV 获得所有折叠的真实平均值?还是我必须手动提取它? 谢谢

【问题讨论】:

  • 您要发送到 GridSearchCV 的参数是什么?
  • 正如我所说,我发送以下内容:svm(或 svc),rbf,C=1,gamma = 1,cv = kFold (n_splits=10),njobs=-1,scoring = '准确度')然后我将它拟合到我的两个向量上,一个响应和一个带有值(特征)。看起来,如果省略一个,平均值很好(也许看起来很好,因为有 51 个,所以它使用这种评分方法收敛)。我最终使用了手动从折叠中提取的值的平均值,但发生这种情况对我来说仍然很奇怪。
  • 这意味着您没有为要检查的参数使用任何多个值,所以为什么要使用 gridSearchCV。
  • 我只是将它用于测试,所以这只是一个例子。我认为它也应该起作用。另外,我尝试了多个参数和更多功能,如果我记得很清楚,我遇到了同样的问题(这就是我得到这个测试示例的方式)。

标签: scikit-learn


【解决方案1】:

我还注意到使用来自 Scikit-learn 的 GridSearchCV 的这种差异。使用我自己的测试用例,splitX_test_score[i]mean_test_score 的平均值 (numpy.mean) 与属性 cv_results_ 之间的差异从小数点后 17 位可以看出,有 2 倍。有 10 倍,与小数点后 6 位有差异。 我认为这个问题可能与浮点精度有关。请问,有人能解释一下mean_test_score(使用哪个函数,使用哪个浮点精度)吗?非常感谢。

编辑:我在以下主题中阅读了 Leena 的答案:sikit learn cv grid scores - Unexpected results。区别在于参数iid。如果设置为False,则mean_test_score 是根据折叠的平均值计算得出的。

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 2012-03-18
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多