2014-10-29 2 views
1

에서 배우고 있습니다. k-NN 방법을 사용하여 작성한 인공 데이터 집합을 분류합니다 (두 개의 특성과 두 개의 클래스). 내 코드에서는 교육 및 테스트 세트를 인쇄하지만 마지막 플롯에서 테스트 세트에 대해 예측 된 클래스는 교육 세트의 예제와 일치하지 않습니다 (즉, 테스트 예제의 클래스 1-NN)은 분명히 훈련 예제의 분포를 보면 틀린 것입니다.분명히 "잘못된"분류는 k-NN을 사용하여 R

누군가 코드에서 오류를 식별하는 데 도움을 줄 수 있습니까? 고맙습니다.

코드는 다음 (테스트 세트 예제의 잘못된 분류를 볼 필요에 의한 교육 사례의 임의 세대, 여러 번 실행) :

library(ElemStatLearn) 
require(class) 

c0 <- cbind(runif(50,0,5), runif(50,0,100)) 
c1 <- cbind(runif(50,5,10), runif(50,0,100)) 
training <- rbind(c0,c1) 

classt <- vector() 
classt[1:50] <- 0 
classt[51:100] <- 1 

x_ <- seq(0, 10, 1) 
y_ <- seq(0, 10, 1) 
testset <- matrix(nrow = 0, ncol = 2) 

for(i in x_){ 
    colaux <- cbind(rep(i,11), y_) 
    testset <- rbind(testset, colaux) 
} 

testClass <- knn(train = training, test = testset, cl = classt, k = 1, prob = TRUE) 

plot(training) 
points(training, col=ifelse(classt==1, "coral", "cornflowerblue")) 

plot(testset) 
points(testset, col=ifelse(testClass==1, "coral", "cornflowerblue")) 
+0

코드를 몇 번 실행했지만 출력에 문제가없는 것으로 나타났습니다. 두 플롯에서 'y'스케일이 다른 것을 알았습니까? 그래도 뭔가 잘못되었다고 확신하는 경우 그래프를 포함시키고 정확히 무엇이 잘못되었다고 생각하는지 설명 할 수 있습니다. – NPE

+0

맞습니다. 문제는 플롯의 y 축척입니다. 어리석은 문제에 대해 사과하고 대단히 감사합니다! – dreamscollector

+0

답변으로 게시했습니다. 원하는 경우 언제든지 수락하십시오. – NPE

답변

0

을 분류은 "잘못 아니다 ". 그러나 서로 다른 y 눈금을 사용한다는 점에서 혼란 스럽습니다. 같은 눈금에 그려 놓으면 분급 기가 올바르게 작동하는 것을 볼 수 있습니다.