2016-08-11 4 views
-1

次のKNN Rコードが異なる種類について異なる予測を与える理由を知っている人はいますか? これはK < -5と変わったので、大多数が明確に定義されています。さらに、浮動小数点数は、データ問題の精度の下ではあまり小さくありません。 (発言:私はテストはトレーニングから変なふうに異なっている知っている。これは奇妙なKNNの挙動を示すために作成された唯一の合成例である。)Q:R - 異常行動のKNN

library(class) 

train <- rbind(
    c(0.0626015, 0.0530052, 0.0530052, 0.0496676, 0.0530052, 0.0626015), 
    c(0.0565861, 0.0569546, 0.0569546, 0.0511377, 0.0569546, 0.0565861), 
    c(0.0538332, 0.057786, 0.057786, 0.0506127, 0.057786, 0.0538332), 
    c(0.059033, 0.0541484, 0.0541484, 0.0501926, 0.0541484, 0.059033), 
    c(0.0587272, 0.0540445, 0.0540445, 0.0505076, 0.0540445, 0.0587272), 
    c(0.0578095, 0.0564349, 0.0564349, 0.0505076, 0.0564349, 0.0578095) 
) 
trainLabels <- c(1, 
       1, 
       0, 
       0, 
       1, 
       0) 
test <- c(0.1923241, 0.1734074, 0.1734074, 0.1647619, 0.1734074, 0.1923241) 

K <- 5 

set.seed(494139) 
pred <- knn(train=train, test=test, cl = trainLabels, k=K) 
message("predicted: ", pred, ", seed: ", seed) 
# **predicted: 1**, seed: 494139 

set.seed(5371) 
pred <- knn(train=train, test=test, cl = trainLabels, k=K) 
message("predicted: ", pred, ", seed: ", seed) 
# **predicted: 0**, seed: 5371 
+3

あなたの質問は何ですか? Rコードには1つのバグがあります:最後のテストは、2番目と最後の同じシードを使うふりをしますが、設定されていないためではありません。それはあなたの混乱の源ですか? – AlexR

答えて

0

knn機能は、基礎となるC function(ライン122)はVR_knnと呼ばれる呼び出しますこれには、「毛羽」または小さな値(イプシロン、EPS)を導入するステップが含まれます。あなたのサンプルのパラメータ値が、その "ファズ"ステップに対して打撃を与えるかもしれないように見えます。これの証拠は、値を4桁に丸めると一貫性が得られるという事実です。したがって:

rm(list=ls()) 

library(class) 
train <- rbind(
    c(0.0626015, 0.0530052, 0.0530052, 0.0496676, 0.0530052, 0.0626015), 
    c(0.0565861, 0.0569546, 0.0569546, 0.0511377, 0.0569546, 0.0565861), 
    c(0.0538332, 0.057786, 0.057786, 0.0506127, 0.057786, 0.0538332), 
    c(0.059033, 0.0541484, 0.0541484, 0.0501926, 0.0541484, 0.059033), 
    c(0.0587272, 0.0540445, 0.0540445, 0.0505076, 0.0540445, 0.0587272), 
    c(0.0578095, 0.0564349, 0.0564349, 0.0505076, 0.0564349, 0.0578095) 
) 
trainLabels <- c(1,1,0,0,1,0) 
test <- c(0.1923241, 0.1734074, 0.1734074, 0.1647619, 0.1734074, 0.1923241) 
K <- 5 

train <- round(train,4) 

seed <- 494139 
set.seed(seed) 
pred <- knn(train=train, test=test, cl = trainLabels, k=K) 
message("predicted: ", pred, ", seed: ", seed) 
# predicted: 0, seed: 494139 

seed <- 5371 
set.seed(seed) 
pred <- knn(train=train, test=test, cl = trainLabels, k=K) 
message("predicted: ", pred, ", seed: ", seed) 
# predicted: 0, seed: 5371 
関連する問題