Sadowski_Sylwester_kolokwium1_21.01.2011.txt

(4 KB) Pobierz
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")
Zgłoś jeśli naruszono regulamin