r - 距离加权在 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
}
解决方案
推荐阅读
- python-3.x - 在 Linux 中保存绘图会导致 GL_INVALID_OPERATION
- javascript - 如何在Vue中使用axios在vue-router或组件中设置页面元(title,description,og)
- javascript - 在 Node.js 中使用 libsodium 进行 GitHub API 秘密加密:UnhandledPromiseRejectionWarning: Error: bad public key size
- python - 使用 Python 的 OpenCV 模块访问网络摄像头时出错
- elasticsearch - 弹性搜索。在日期数组中按日期范围选择并按匹配日期排序
- ruby-on-rails - 将未维护的 ActiveRecord 适配器强制转换为 Rails 版本 6
- jmeter - 恒定吞吐量计时器在 Jmeter 中未按预期工作
- javascript - 当 Html 复选框未选中时,有什么方法可以在 Javascript 中触发事件?
- python - 如何处理通过 HTTP 请求发送的类实例?
- mysql - mySQL 对非常大的表进行分组以消除重复