【问题标题】:Unexpected average of GridSearchCV resultsGridSearchCV 结果的意外平均值
【发布时间】:2015-02-02 21:50:54
【问题描述】:

我试图了解为什么会出现以下情况 - 我正在使用虹膜数据并使用 k-最近邻分类器进行交叉验证以选择最佳 k .

from sklearn.neighbors import KNeighborsClassifier
from sklearn import grid_search
from sklearn.cross_validation import train_test_split

X_train, X_test, Y_train, Y_test = train_test_split(
    X, Y, test_size=0.33, random_state=42)

parameters = {'n_neighbors': range(1,21)}
knn = sklearn.neighbors.KNeighborsClassifier()
clf = grid_search.GridSearchCV(knn, parameters,cv=10)
clf.fit(X_train, Y_train)

clf 对象有结果。

print clf.grid_scores_

[平均:0.94000,标准:0.08483,参数:{'n_neighbors':1},平均:0.93000,标准:0.08251,参数:{'n_neighbors':2},平均:0.94000,标准:0.08456,参数: {'n_neighbors':3},均值:0.95000,标准:0.08101,参数:{'n_neighbors':4},均值:0.95000,标准:0.08562,参数:{'n_neighbors':5},均值:0.93000,标准: 0.08284,参数:{'n_neighbors':6},均值:0.95000,标准:0.08512,参数:{'n_neighbors':7},均值:0.94000,标准:0.08414,参数:{'n_neighbors':8},均值: 0.94000,标准:0.08414,参数:{'n_neighbors':9},均值:0.94000,标准:0.08414,参数:{'n_neighbors':10},均值:0.94000,标准:0.08483,参数:{'n_neighbors':11 },均值:0.93000,标准:0.08284,参数:{'n_neighbors':12},均值:0.93000,标准:0.08284,参数:{'n_neighbors':13},均值:0.94000,标准:0.08414,参数:{' n_neighbors':14},均值:0.94000,标准:0.08483,参数:{'n_neighbors':15},均值:0.93000,标准:0.08284,参数:{'n_neighbors':16},均值:0.94000,标准:0.08483,参数:{'n_neighbors':17},平均值:0.93000,标准: 0.09458,参数:{'n_neighbors':18},均值:0.94000,标准:0.08483,参数:{'n_neighbors':19},均值:0.93000,标准:0.10887,参数:{'n_neighbors':20}]

但是当我得到第一个案例k=1的10个CV结果时

print clf.grid_scores_[0].cv_validation_scores

我们得到

array([ 1.        ,  0.90909091,  1.        ,  0.72727273,  0.9       ,
        1.        ,  1.        ,  1.        ,  1.        ,  0.88888889])

但是,这 10 个观察值的平均值

print clf.grid_scores_[0].cv_validation_scores.mean()

是 0.942525252525,而不是对象上显示的 0.940000。

所以,我对平均值在做什么以及为什么不一样感到非常困惑。我阅读了文档,但没有找到任何对我有帮助的东西。我错过了什么?

【问题讨论】:

    标签: python-2.7 scikit-learn


    【解决方案1】:

    GridSearchCV 的参数之一是“iid”。它采用默认值 True,描述如下:

    如果为 True,则假定数据在折叠中的分布相同,最小化的损失是每个样本的总损失,而不是折叠的平均损失。

    本质上,grid_scores_ 函数默认输出所有样本的平均损失,而不是折叠的平均损失。如果每个折叠中的数据点数量不同(即,如果样本数量不能被 10 整除,因为您正在进行 10 折叠交叉验证),那么这些数字将不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      相关资源
      最近更新 更多