为什么我的 KNN 模型中有 0 个邻居?

Why do I get 0 neighbors in my KNN model?

我正在做一个多 class 音频 class化,我有

1) 记录单个单词的每个 .wav 文件的路径 2) 每条路径的 MFCC 向量 3)训练集中每条路径的标签(实际单词)

显然,我的算法无法识别任何邻居。任何原因?

我的布景是这样的:

X_train, X_test, y_train, y_test = train_test_split(new_X, y, test_size=0.4, random_state=5)
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

(56894, 99) (56894,) (37930, 99) (37930,)

我的模型是:

k_range = list(range(1))
scores = []
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    y_pred = knn.predict(X_test)
    scores.append(metrics.accuracy_score(y_test, y_pred))

然后错误显示:

ValueError                                Traceback (most recent call last)
<ipython-input-12-d67236a4ac61> in <module>()
      3 for k in k_range:
      4     knn = KNeighborsClassifier(n_neighbors=k)
----> 5     knn.fit(X_train, y_train)
      6     y_pred = knn.predict(X_test)
      7     scores.append(metrics.accuracy_score(y_test, y_pred))

1 frames
/usr/local/lib/python3.6/dist-packages/sklearn/neighbors/base.py in fit(self, X, y)
    915             self._y = self._y.ravel()
    916 
--> 917         return self._fit(X)
    918 
    919 

/usr/local/lib/python3.6/dist-packages/sklearn/neighbors/base.py in _fit(self, X)
    266                 raise ValueError(
    267                     "Expected n_neighbors > 0. Got %d" %
--> 268                     self.n_neighbors
    269                 )
    270             else:

ValueError: Expected n_neighbors > 0. Got 0

不是不认识邻居,是抱怨你在用n_neighbours = 0

您的循环使用 k_range,即 [0,1],因此在循环的第一次迭代中,失败的调用计算为:

knn = KNeighborsClassifier(n_neighbors=0)

您需要更改范围:

k_range = list(range(1))

不包括零。