距离加权在KNN中如何工作?

时间:2019-06-22 20:11:35

标签: r knn

我正在R中编写KNN分类器。我想添加权重方案,例如G。倒数索引1 / d。照原样,对于Iris数据集,由于值no,我获得了几乎完美的66%准确性(无论使用何种度量)。 3(“ virginica”)几乎不会出现,我想通过加权使其更好。我的问题是:究竟是什么?如何称重?我已经读过,我应该用这些距离对K个最近邻居的等级进行加权。

我尝试创建到K个最近邻居的类和距离矢量,然后从中获取加权均值:

inverted <- function(vals, distances)
{
  inv_distances <- 1 / distances
  # eliminate division-by-zero errors
  inv_distances <- ifelse((inv_distances < 0.01), 0.01, inv_distances)

  weighted.mean(vals, inv_distances)
}

我的结果很奇怪:对于正确的向量val(类)和距离,我有时会得到NaN(不是数字)或NA值。而且我的权重总和不等于1,...他们应该吗?我不确定。我只需要有人为我清除此加权方案即可。

编辑: 我已经调试了上面的代码,因为它乘以权重太晚了(因此不能消除距离0并导致NaNs)。我也将其更改为谐波序列权重,而不使用距离(因此,第一个邻居的权重为1,第二个为1/2,第三个为1/3等)。我仍然不知道它是如何工作的以及其他权重可能是什么。

inverted <- function(vals)
{
  weights <- 1 / seq(length(vals))

  res <- weighted.mean(vals, weights)
  res
}

0 个答案:

没有答案
相关问题