正确实施加权K近邻

时间:2018-03-30 18:51:33

标签: algorithm machine-learning classification knn

根据我的理解,经典的KNN算法就像这样(对于离散数据):

  • x 成为您想要分类的点
  • dist(a,b)为点 a b
  • 之间的欧几里德距离
  • 迭代训练设定点pᵢ,取距离 dist(pᵢ,x)
  • x 归类为 K 点最近(根据 dist )与 x 之间最常见的等级

我如何在这款经典KNN上引入重量?我读到更重要的是应该给更近的点,我读this,但不明白这将如何适用于离散数据。

对我而言,首先,使用 argmax 没有任何意义,如果重量增加距离,则会使距离变得更糟。对不起,如果我说废话。

2 个答案:

答案 0 :(得分:2)

考虑一个简单的例子,它有三个分类(红绿蓝)和六个最近的邻居,由R,G,B表示。我将使这个线性简化可视化和算术

R B G x G R R

与距离列出的点是

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

因此,如果我们使用未加权的最近邻居,那么简单的"投票"算法是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

低delta函数仅仅是分类函数;在这个简单的例子中,它返回red | green | blue。在一个更复杂的例子中,......好吧,我将其留给以后的教程。

答案 1 :(得分:1)

好吧,关闭蝙蝠让我说我不是你提供的链接的粉丝,它有图像方程式,并在图像和文本中使用不同的符号。

因此,请关注常规的 k-NN 算法。常规k-NN实际上只是加权k-NN的特例。您为 k 邻居分配权重1,为其余邻居分配权重。

  1. W qj 表示与 j 点相关的权重相对于点 q
  2. y j 成为与数据点j关联的类标签。为简单起见,我们假设我们将鸟类分类为乌鸦,母鸡或火鸡=&gt;离散班。所以对于所有j, y j <- {crow,turkey,hen}
  3. 一个好的权重指标是距离的倒数,无论是欧几里德,马哈拉诺比斯等距离。
  4. 鉴于所有这些,您将与您尝试预测的点 q 关联的类标签 y q 将是总和 w qj 的内容。 y j 由所有权重之和除以的项。如果首先将权重标准化,则不需要除法。
  5. 您最终得到的公式如下 somevalue 1 。 crow + somevalue 2 。 hen + somevalue 3 。火鸡
  6. 其中一个类会有更高的 somevalue 。具有最高值的类是您将预测的点 q
  7. 为了进行培训,您可以随心所欲地考虑错误。由于这些类是离散的,因此可以通过有限的简单方法调整重量以提高准确度