# przykład 2.7 options(OutDec=",") attach(spam) set.seed(123) spam1<-spam[1:55] klasa<-spam$spam m <-length(klasa) ucz <- sample(1:m, size = round(m/3), replace = FALSE, prob = rep(1/m, m)) spam1.ucz <- spam1[ucz,] klasa.ucz<-klasa[ucz] spam1.test <- spam1[-ucz,] klasa.test<-klasa[-ucz] # liczba sasiadow ks<-c(1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50) # ks<-seq(from=1, to=50, by=1) nks<-length(ks) blad.ucz<-numeric(length=nks) blad.test<-numeric(length=nks) names(blad.ucz)<-names(blad.test)<-ks for (i in seq(along=ks)) { mod.ucz<-knn(spam1.ucz,spam1.ucz,k=ks[i],cl=klasa.ucz) mod.test<-knn(spam1.ucz,spam1.test,k=ks[i],cl=klasa.ucz) blad.ucz[i]<-1-sum(mod.ucz==klasa.ucz)/(length(klasa.ucz)) blad.test[i]<-1-sum(mod.test==klasa.test)/length(klasa.test) } print(cbind(blad.ucz,blad.test)) plot(ks,blad.ucz,xlab="Liczba najbliższych sąsiadów",ylab="Błąd klasyfikacji",ylim=c(0,0.15),type="n") lines(ks,blad.test,type="l",col='blue') lines(ks,blad.ucz,type="l",col='red') points(ks,blad.test, cex = .7, pch=3) points(ks,blad.ucz, cex = .7, pch=4) legend("bottomright",lty=1,pch=c(3,4),legend = c("Zbiór testowy ", "Zbiór uczący "))