1
在这个课程中,所有的大写字母都表示矩阵,所有的小写字母表示向量。
所以,def _predict(self, x) 的 x 是小写,传入的是一个向量,即一个样本;
def predict(self, X_predict) 的 X 是大写,传入的是一个矩阵,一个 m * n 的矩阵,表示有 m 个样本;
所以,def predict(self, X_predict) 的代码中(33 行):https://git.imooc.com/coding-169/coding-169/src/master/04-kNN/02-kNN-in-scikit-learn/kNN/kNN.py 是取出 X_predict 中的每一行(每一个 x),运行 self._predict (x)
2
def predict(self, X_predict) 表示预测 X_predict 这个矩阵中的每一个样本对应的结果;
3
nearest 按照距离 x 的距离大小顺序,存储了所有样本的索引;
比如如果 nearest = [1, 3, 5, 4, 0, 2],就表示样本中,距离 x 最近的是样本1;其次近的是样本 3;其次近的是样本 5;其次近的是样本 4;其次近的是样本 0;其次近的是样本 2;
nearest[:self.k] 取出最近的 k 个样本的索引,比如对于上面的 nearest, nearest[:3] = [1, 3, 5]
[self._y_train[i] for i in nearest[:self.k]] 取出这最近的 k 个索引的样本所对应的 y
所以 topK 中存储的是距离 x 最近的 k 个样本对应的 y。
继续加油!:)