r - 在具有分类值的 R 中使用 k-NN

标签 r distance knn

我希望对主要具有分类特征的数据进行分类。为此,欧几里得距离(或任何其他数值假设距离)不适合。

我正在寻找 [R] 的 kNN 实现,其中可以选择不同的距离方法,例如汉明距离。
有没有一种方法可以使用具有不同距离度量函数的常见 kNN 实现,例如 {class} 中的实现?

我正在使用 R 2.15

最佳答案

只要您可以计算距离/相异矩阵(以您喜欢的任何方式),您就可以轻松执行 kNN 分类,而无需任何特殊包。

# Generate dummy data
y <- rep(1:2, each=50)                          # True class memberships
x <- y %*% t(rep(1, 20)) + rnorm(100*20) < 1.5  # Dataset with 20 variables
design.set <- sample(length(y), 50)
test.set <- setdiff(1:100, design.set)

# Calculate distance and nearest neighbors
library(e1071)
d <- hamming.distance(x)
NN <- apply(d[test.set, design.set], 1, order)

# Predict class membership of the test set
k <- 5
pred <- apply(NN[, 1:k, drop=FALSE], 1, function(nn){
    tab <- table(y[design.set][nn])
    as.integer(names(tab)[which.max(tab)])      # This is a pretty dirty line
}

# Inspect the results
table(pred, y[test.set])

如果有人知道比上面的脏线更好的找到向量中最常见值的方法,我很乐意知道。
drop=FALSE需要参数来保留 NN 的子集作为矩阵 k=1 .如果不是,它将被转换为向量和 apply会抛出错误。

关于r - 在具有分类值的 R 中使用 k-NN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12367133/

相关文章:

r - 根据第二个数据帧中的值过滤数据帧

r - 添加具有不同数据的图层时,ggplot对象未找到错误

r - 如何使用 dplyr 基于缺失条件合并两个数据框?

java - 计算网格上两个正方形之间的距离 - Java

当 y 不是因子时 R 的插入符训练错误

在 Google Colab 上运行 RStudio

c - 尝试添加代码来计算两个用户输入点之间的距离

R data.table 按组从第 i 个元素到每个剩余元素的距离

machine-learning - SAS : how to get the neighbor list for each row? 中的 k 最近邻

machine-learning - 如何找到两个向量之间的距离,其中一些字段是字符串(名称、地址等)而其他字段是数字