K 最近邻是一种分类算法。正如每个分类算法很重要一样,该算法不会“记住”答案,并且它得到的答案可以推广到所有人群,而不仅仅是从数据库中学习。
1、为什么KNN算法需要训练过程?在回归模型中,训练过程意味着为选定的函数找到最佳参数。KNN 中的训练是否意味着在 TRAINING 数据点之间计算相似距离?为什么它对以后的预测阶段有好处?
KNN 中需要训练过程,因为(如我之前所述),我们希望避免它从学习数据库中,即著名的“过度拟合”。
正如您所说,在回归中,训练也是为了找到最佳参数,但“参数”的概念略有变化:这里的参数是选定的点(个体),当然还有,在 train/ 中分开test 允许模型在测试数据未知时更通用。k
是的,这意味着 KNN 仅在训练集中计算距离。当在训练集中找到最优参数时,在测试集中的结果更好,更通用。
TRAINING 和 TESTING 数据点之间是否也计算相似距离?如果是这样,那为什么在计算训练数据点之间的距离之前有必要这样做呢?
新数据点(来自 TEST 数据集的数据点)不参与 KNN 的重新计算,新点决定它们是蓝色还是红色的方式由之前计算的点(TRAIN 数据集)确定,通过测量哪种颜色k 最近的邻居(新点的)有。
对于新的绿点,在的情况下,两个是蓝色,一个是红色,新颜色很可能是蓝色(并被指定为蓝色)。k=3
3. 如果执行下面的代码,那么它到底做了什么?这是否意味着计算了 TRAINING 数据点之间的距离?
neigh = KNeighborsClassifier(n_neighbors = k).fit(x_train, y_train)
不,更深思熟虑的解释是它们被“记住”在某个位置和某个 y_value。距离的计算是在拟合 TEST 数据时完成的。
4. 如果执行以下代码,那么它究竟做了什么?手册说返回每个数据样本的类标签。但它是如何完成的?这是否意味着首先计算 TRAINING 和 TESTING 数据点之间的距离?如果没有,那么我们如何才能找到“看不见的数据点”的邻居呢?我们需要知道距离。
yhat = neigh.predict(x_test)
正如另一点所解释的,前一个代码(拟合)没有计算距离,代码记住了点。在预测代码中,计算 x_train 和 x_test 之间的距离,并且对于 x_test 的每个成员,找到 k 个最近邻居(来自 x_train),并且他们投票为这个新数据点(在 x_test 中)检索一个类。
在图像中,当时,他们以 2-1 投票表示绿点(新点)是蓝色的。k=3
