(в продолжение к этому post)Q: КНН в R - странное поведение
Кто-нибудь знает, почему ниже Knn R код дает разные предсказания для разных семян? Это странно, как K < -5, и поэтому большинство четко определено. Кроме того, плавающие числа являются большими - поэтому не возникает точность проблемы с данными + данные масштабируются и центрируются.
library(class)
from = -(2^30)
to = -(from)
seed <- -229881389
set.seed(seed)
K <- 5
m = as.integer(runif(1, K, 20))
n = as.integer(runif(1, 5, 1000))
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)
sc<-function(x){(x-mean(x))/sd(x)}
train<-apply(train,2,sc)
test<-t(apply(test,1,sc))
seed <- as.integer(runif(1, from, to))
set.seed(seed)
pred_1 <- knn(train=train, test=test, cl = trainLabels, k=K)
message("predicted: ", pred_1, ", seed: ", seed)
seed <- as.integer(runif(1, from, to))
set.seed(seed)
pred_2 <- knn(train=train, test=test, cl = trainLabels, k=K)
message("predicted: ", pred_2, ", seed: ", seed)
Ручная проверка:
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(result, decreasing =T)), ]
headK <- head(b, K)
message("Manual predicted K: ", paste(K," class:", names(which.max(table(headK[,2])))))
print(b)
даст предсказание 0, для Top K (= 5).
Возможный дубликат [Q: KNN in R - странное поведение] (http://stackoverflow.com/questions/38932289/q-knn-in-r-strange-behavior) – nrussell
Это не дубликат, так как этот вопрос делать масштабированные и центрированные (в то время как [этот] (http://stackoverflow.com/questions/38932289/q-knn-in-r-strange-behavior) нет) – erans
Кстати, для воспроизводимого примера вы должны не использовать семя, которое является случайным ... Тем не менее, существует некоторая случайность в применении knn, которая необходима для обработки связей. Таким образом, используя разные семена, вы получаете разные результаты. – DatamineR