需要K近邻算法说明

时间:2019-04-16 14:01:27

标签: python machine-learning scikit-learn

在回归模型中,训练过程为选定函数查找参数。但是如果算法是K最近邻(KNN),那么我们在训练过程中会使用什么呢?

例如,如果我执行以下命令,在后台会做什么?

k = 4

neigh = KNeighborsClassifier(n_neighbors = k).fit(x_train, y_train)

为什么在没有计算常数/参数(之后的预测过程中需要)的情况下,毕竟需要在KNN中进行训练过程?

KNN的步骤如下...

  1. 为k选择一个值。
  2. 计算数据集中每个案例与新案例之间的距离。
  3. 在训练数据中搜索最接近未知数据点测量值的k观测值。
  4. 使用来自K最近邻居的最受欢迎响应值来预测未知数据点的响应。

...但是它们仅在执行预测命令时有效吗?

yhat = neigh.predict(x_test)

2 个答案:

答案 0 :(得分:1)

1)用KNN进行训练是否意味着针对训练数据集中的每一行都计算出相似距离并找到邻居?

neigh = KNeighborsClassifier(n_neighbors = k).fit(x_train, y_train)

2)如果计算相似距离并且仅针对训练数据集找到邻居,那么如何为测试数据集找到类标签。如果我们不知道谁是测试数据集的邻居,那么我们如何找到类标签?

yhat = neigh.predict(x_test)

3)如果我们说“未知实例”或“未知数据点”,那是否表示它对应于测试数据集中的任何行?

答案 1 :(得分:0)

请注意,sklearn.neighbors.KNeighborsClassifier有一个algorithm参数。

此参数控制拟合期间发生的情况。

brute表示我认为您认为KNN可以做到的;它存储数据集的副本,并通过详尽搜索来计算最近的点。

另一方面,

ball_treekd_tree使用称为球树和 k 维树的数据结构表示数据集。基本上,通过以某些方式对数据集进行分区,可以确定数据集中哪些点最靠近任意点而无需进行详尽的搜索。

在这种情况下调用fit时,将构建适当的树。