我期待与主要类别特征数据进行分类。 为此目的,欧几里得距离(或任何其它数值假定距离)不适合。
我在寻找一个k近邻实施[R],其中,可以选择不同距离的方法,如汉明距离。 有没有办法使用常用的k近邻实现像在{}类具有不同的距离度量功能的方法吗?
我,使用R 2.15
我期待与主要类别特征数据进行分类。 为此目的,欧几里得距离(或任何其它数值假定距离)不适合。
我在寻找一个k近邻实施[R],其中,可以选择不同距离的方法,如汉明距离。 有没有办法使用常用的k近邻实现像在{}类具有不同的距离度量功能的方法吗?
我,使用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
将抛出一个错误。