【发布时间】:2018-05-19 18:05:25
【问题描述】:
我正在处理一个数据集,以便比较不同距离指标的效果。我正在使用 KNN 算法。
R 中的 KNN 算法默认使用欧几里得距离。所以我自己写了一篇。我想找到最近邻居和目标之间正确的类标签匹配的数量。
我首先准备了数据。然后我调用了数据(wdbc_n),我选择了 K=1。我用欧几里得距离作为测试。
library(philentropy)
knn <- function(xmat, k,method){
n <- nrow(xmat)
if (n <= k) stop("k can not be more than n-1")
neigh <- matrix(0, nrow = n, ncol = k)
for(i in 1:n) {
ddist<- distance(xmat, method)
neigh[i, ] <- order(ddist)[2:(k + 1)]
}
return(neigh)
}
wdbc_nn <-knn(wdbc_n ,1,method="euclidean")
希望得到与论文类似的结果(“关于高维空间中距离度量的令人惊讶的行为”)(https://bib.dbvis.de/uploadedFiles/155.pdf,第 431 页,表 3)。
我的问题是
我的代码是对还是错?
任何可以指导我的建议或参考将不胜感激。
编辑
我的数据 (breast-cancer-wisconsin)(wdbc) 维度是
569 32
在规范化和删除id和目标列之后,维度是
dim(wdbc_n)
569 30
训练和测试的划分由
给出wdbc_train<-wdbc_n[1:469,]
wdbc_test<-wdbc_n[470:569,]
【问题讨论】:
-
您引用的论文说欧几里得会提供您通常最差的结果,并且似乎确实是提供 46 种其他距离度量的 philentropy 包的重点。你的函数编译没有抱怨,我知道 k=1,method = "euclidean"。那么你的“xmat”是什么?
-
@Chris,我的xmat是'wdbc_n',就是我准备好的数据矩阵
-
您的数据是什么,您的 wdbc_n (xmat) 的尺寸是多少?是不是那种你对结果可能看起来有直觉的数据,合理的。
-
@Chris,我已经编辑了我的问题。
标签: r knn nearest-neighbor