当我在最近的邻居中传递不同形式的K时出错(Sci kit learn)

时间:2015-01-11 06:31:36

标签: machine-learning scikit-learn

当在scikit中运行k个最近邻居时,当我将k设置为21时,我得到值错误。但当我将k设为k=np.arange(20) +1时,我没有收到错误,那么这两者之间的区别是什么?

k = np.arange(21)

parameters = {'n_neighbors': k}
knn = sklearn.neighbors.KNeighborsClassifier()

clf = sklearn.grid_search.GridSearchCV(knn, parameters, cv=10)
clf.fit(X_train, Y_train)

ValueError: Invalid shape in axis 1: 0.

也可以有人解释一下

是什么
a = clf.grid_scores_
scores = [b.cv_validation_scores for b in a]

得分如下:

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

clf.grid_scores_是分类器的准确性但cv_validation得分是多少?

1 个答案:

答案 0 :(得分:1)

GridSearchCV需要搜索每个参数的值列表。如果您只想为搜索设置一个值,请将其放入列表中:

parameters = {'n_neighbors': [21]} # ok
parameters = {'n_neighbors': np.range(21)} # error, the first value is 0
parameters = {'n_neighbors': np.range(21) + 1} # ok

请注意,该列表中的每个值都应该是该参数的有效值。例如,使用np.range(p)作为n_neighbors的参数列表是错误的,因为它有0,这是邻居数量的无效值。

根据documentation

  

cv_validation_scores [是]每个折叠的分数列表

因此grid_scores_必须是相应cv_validation_scores的平均值。