以下のKNN Rコードが異なる種子について異なる予測を与える理由を知っている人はいますか?これはK < -5のように奇妙であり、したがって、大多数が明確に定義されています。さらに、浮動小数点数は大きいので、データの問題の精度は(postのように)発生しません。Q:R - 異常行動のKNN
library(class)
set.seed(642002713)
m = 20
n = 1000
from = -(2^30)
to = -(from)
train = matrix(runif(m*n, from, to), nrow=m, ncol=n)
trainLabels = sample.int(2, size = m, replace=T)-1
test = matrix(runif(n, from, to), nrow=1)
K <- 5
seed <- 544336746
set.seed(seed)
pred_1 <- knn(train=train, test=test, cl = trainLabels, k=K)
message("predicted: ", pred_1, ", seed: ", seed)
#predicted: 0, seed: 544336746
seed <- 621513172
set.seed(seed)
pred_2 <- knn(train=train, test=test, cl = trainLabels, k=K)
message("predicted: ", pred_2, ", seed: ", seed)
#predicted: 1, seed: 621513172
手動チェック:
euc.dist <- function(x1, x2) sqrt(sum((x1 - x2)^2))
result = vector(mode="numeric", length=nrow(train))
for(i in 1:nrow(train)) {
result[i] <- euc.dist(train[i,], test)
}
a <- data.frame(result, trainLabels)
names(a) = c("RSSE", "labels")
b <- a[with(a, order(sums, decreasing =T)), ]
headK <- head(b, K)
message("Manual predicted K: ", paste(K," class:", names(which.max(table(headK[,2])))))
#Manual predicted K: 5 class: 1
トップKと、予測1を与える(= 5)RSSE:
RSSE labels
28479706980 1
28472893026 0
28063242772 1
27966740954 1
27927401005 1
ので、大部分が明確に定義された+問題なしRSSEの小さなフロートの違いの
非常に興味深い:いくつかのアイデアを試してみよう - データは拡大縮小されずに中央に配置されません。もしあなたがそれらを前処理すればそれは持続するのですか? 「キャレット」パッケージからkNNを試してみてください。それが続くなら...私が家に帰るとテストします –
'knn()'のRコードには何も確率的なものはありませんので、違いはclass.cの 'VR_knn()' Cルーチンになければなりません。それはそれによって呼び出される。 –