正确实施加权 K 最近邻

Correct implementation of weighted K-Nearest Neighbors

据我了解,classical KNN 算法是这样工作的(对于离散数据):


我如何在这个 classic KNN 上引入权重?我读到应该更重视更近的点,我读到 this,但不明白这将如何应用于离散数据。

对我来说,首先,使用 argmax 没有任何意义,如果权重增加了距离,那么它会使距离变差。对不起,我在胡说八道。

好吧,坦白说我不是你提供的 link 的粉丝,它有图像方程式并且在图像中遵循不同的符号和正文。


因此,让我们看看常规的 k-NN 算法。 regulark-NN其实只是weightedk-NN的一个特例。您将权重 1 分配给 k 个邻居,将 0 分配给其余邻居。

  1. Wqj表示一个点j相对于一个点的权重q
  2. yj 为与数据点 j 关联的 class 标签。为简单起见,让我们假设我们 class 将鸟类定义为乌鸦、母鸡或火鸡 => 离散的 classes。所以对于所有 j,yj <- {乌鸦,火鸡,母鸡}
  3. 一个好的权重度量是距离的倒数,无论距离是欧几里德、马氏等
  4. 考虑到所有这些,class 标签 yq 您将与点 q 相关联 您试图预测的是 wqj 的总和。 yj 项除以所有权重的总和。如果先对权重进行归一化,则无需除法。
  5. 你最终会得到如下等式 somevalue1 。乌鸦 + somevalue2 。母鸡 + somevalue3 。火鸡
  6. 其中一个 classes 将具有更高的 somevalue。具有最高值的 class 是您将预测的点 q
  7. 为了训练的目的,您可以根据需要考虑任何错误。由于 classes 是离散的,因此调整权重以提高准确性的简单方法数量有限

考虑一个包含三个分类(红绿蓝)和用 R、G、B 表示的六个最近邻居的简单示例。我将其设为线性以简化可视化和算术

R B G x G R R

列出距离的点是

class dist
  R     3
  B     2
  G     1
  G     1
  R     2
  R     3

因此,如果我们使用未加权的最近邻,简单的 "voting" 算法是 3-2-1,有利于 Red。但是,由于 加权 影响,我们有 ...

red_total   = 1/3^2 + 1/2^2 + 1/3^2  = 1/4 + 2/9 ~=  .47
blue_total  = 1/2^2 ..............................=  .25
green_total = 1/1^2 + 1/1^2 ......................= 2.00

... 并且 x 由于距离接近 Green 而结束。

那个lower-delta函数仅仅是分类函数;在这个简单的例子中,它 returns red | green | blue。在一个更复杂的例子中,......好吧,我会把它留给后面的教程。