2016-08-11 3 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 코드에는 하나의 버그가 있습니다. 마지막 테스트는 두 번째와 동일한 시드를 사용하는 것으로 가장하지만, 설정되지 않았으므로 아닙니다. 그게 너 혼란의 근원이야? – AlexR

답변

0

knn 기능 VR_knn를라는 기본 C function (라인 122)를 호출, "퍼지 (fuzz)"또는 작은 값 (엡실론, 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