zadanie1. library(MASS) set.seed(2011) dane=read.csv2("dane_perla2.csv") dane attach(dane) kolory = c("red","black", "blue") #spróbujemy dokonać klasyfikacji według kolumny klasa #pusty wykres plot(dane$x, dane$y, col = "white", xlab = "x", ylab = "y") text(dane$x, dane$y, dane$klasa, col = kolory[dane$klasa]) #wyodrębnienie zbioru uczšcego i testowego ucz=sample(3000,2000,rep=F) perla_ucz=dane[ucz,] perla_test=dane[-ucz,] #wykres (pogrubiony jest zbiór testowy) plot(dane$x, dane$y, col = "white", xlab = "x", ylab = "y") text(dane$x[ucz], dane$y[ucz], dane$klasa[ucz], col = kolory[dane$klasa[ucz]]) text(dane$x[-ucz], dane$y[-ucz], dane$klasa[-ucz], col = kolory[dane$klasa[-ucz]], font = 2) #klasyfikator liniowy lda.perla = lda(klasa~x+y, data = dane[ucz,]) lda.perla #wykres w p-ni zmiennych kanonicznych plot(lda.perla) predict(lda.perla) # plot(lda.perla, col = "white") text(predict(lda.perla)$x[,1], predict(lda.perla)$x[,2], dane$klasa[ucz], col = kolory[predict(lda.perla)$class], cex=0.7, adj =1) #na zbiorze testowym dane.ldatestpred = predict(lda.perla, dane[-ucz,]) text(dane.ldatestpred$x[,1], dane.ldatestpred$x[,2], dane$klasa[-ucz], col = kolory[dane.ldatestpred$class], cex=1, adj =1, font=2) #teraz wykresy w oryginalnej przestrzeni plot(dane$x, dane$y, col = "white", xlab = "x", ylab = "y") text(dane$x[ucz], dane$y[ucz], dane$klasa[ucz], col = kolory[predict(lda.perla)$class]) text(dane$x[-ucz], dane$y[-ucz], dane$klasa[-ucz], col = kolory[dane.ldatestpred$class], font=2) #ocena klasyfikatora #błędy na zbiorze uczšcym (tabl = table(prognoza = predict(lda.perla)$class, prawdziwe = dane$klasa[ucz])) print("Błšd na zbiorze uczšcym:", quote = F) 1-sum(diag(tabl))/sum(tabl) #błędy na zbiorze testowym (tabl2 = table(prognoza = dane.ldatestpred$class, prawdziwe = dane$x[-ucz])) print("Błšd na zbiorze testowym:", quote = F) (blad_lda=1-sum(diag(tabl2))/sum(tabl2)) #wykres klasyfikatora library(klaR) drawparti(dane$klasa[ucz], dane$x[ucz], dane$y[ucz], prec = 200, xlab = "x", ylab = "y") #klasyfikator kwadratowy qda.perla = qda(klasa~x+y, data = dane[ucz,]) qda.perla #wykres plot(dane$x, dane$y, col = "white", xlab = "x", ylab = "y") text(dane$x[ucz], dane$y[ucz], dane$klasa[ucz], col = kolory[predict(qda.perla)$class]) text(dane$x[-ucz], dane$y[-ucz], dane$klasa[-ucz], col = kolory[predict(qda.perla, dane[-ucz,])$class], font=2) #ocena klasyfikatora #błędy na zbiorze uczšcym (tabl = table(prognoza = predict(qda.perla)$class, prawdziwe = dane$klasa[ucz])) print("Błšd na zbiorze uczšcym:", quote = F) 1-sum(diag(tabl))/sum(tabl) #błędy na zbiorze testowym (tabl3 = table(prognoza = predict(qda.perla, dane[-ucz,])$class, prawdziwe = dane$klasa[-ucz])) print("Błšd na zbiorze testowym:", quote = F) (blad_qda=1-sum(diag(tabl3))/sum(tabl3)) #wykres klasyfikatora drawparti(dane$klasa[ucz], dane$x[ucz], dane$y[ucz], prec = 200, method = "qda", xlab = "x", ylab = "y") #metoda k najbliższych sšsiadów #wersja z pakietu klaR perla = dane perla$x = scale(perla$x) #zamiast perla$x = (perla$x-mean(perla$x))/sd(perla$x) perla$y = scale(perla$y) #teraz klasyfikacja - ns kns.perla = sknn(klasa~x+y, data = perla[ucz,], kn = 5) kns.perla #wykres plot(dane$x, dane$y, col = "white", xlab = "x", ylab = "y") text(dane$x[ucz], dane$y[ucz], dane$klasa[ucz], col = kolory[predict(kns.perla)$class]) text(dane$x[-ucz], dane$y[-ucz], dane$klasa[-ucz], col = kolory[predict(kns.perla, perla[-ucz,])$class], font=2) #ocena klasyfikatora #błędy na zbiorze uczšcym (tabl = table(prognoza = predict(kns.perla)$class, prawdziwe = dane$x[ucz])) print("Błšd na zbiorze uczšcym:", quote = F) 1-sum(diag(tabl))/sum(tabl) #błędy na zbiorze testowym (tabl4 = table(prognoza = predict(kns.perla, perla[-ucz,])$class, prawdziwe = dane$klasa[-ucz])) print("Błšd na zbiorze testowym:", quote = F) (blad_kns=1-sum(diag(tabl4))/sum(tabl4)) #wykres klasyfikatora drawparti(perla$klasa[ucz], perla$x[ucz], perla$y[ucz], prec = 80, method = "sknn", kn = 5, xlab = "x", ylab = "y") #ranking klasyfikatorów najlepszy=min(blad_lda,blad_qda,blad_kns) najgorszy=max(blad_lda,blad_qda,blad_kns) print("Najlepszym klasyfikatorem jest:", quote = F) print(najlepszy) print("Najgorszym klasyfikatorem jest:", quote = F) print(najgorszy) #Klasyfikator dla 5 najbliższych sšsiadów na poziomie prognozy powoduje "zawieszanie" programu. #Poza tym pojawia się błšd o różnych długociach argumentów. #Natomiast przypuszczamy że byłby to najlepszy z tych trzech klasyfikatorów. zadanie3. dane=read.csv2("dane_perla2.csv") dane attach(dane) x=dane[,1] y=dane[,2] ndane=data.frame(c1/sd(c1),c2/sd(c2)) #metoda grupowania wokół centroidów duze1=data.frame(x/sd(x),y/sd(y)) duze1 p2<-clara(duze1,4,metric="euclidean") plot(duze1,col=p2$cluster) points(p2$medoids,pch=2,col="black")
aivliska