首页 > 解决方案 > 距离加权在 KNN 中如何工作?

问题描述

我正在用 R 编写 KNN 分类器。我想添加加权方案,例如倒排索引 1/d。事实上,对于 Iris 数据集,我得到了几乎完美的 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 并导致 NaN)。我还将其更改为谐波系列权重,而不使用距离(因此第一个邻居的权重为 1、第二个 1/2、第三个 1/3 等)。我仍然不知道它是如何工作的以及其他权重可能是什么。

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

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

标签: rknn

解决方案


推荐阅读