wykład 10, Studia, Stopień 2 Semestr I, Statystyczne systemy informatyczne w AD, Wykłady
[ Pobierz całość w formacie PDF ]
#podstawy analizy skupień w R#tu sš funkcje do generowania testowych zbiorów danychlibrary("mlbench")#żeby zawsze tak samoset.seed(2011)#dwa przykładowe zbioryperla = mlbench.cassini(5000)plot(perla)usmiech = mlbench.smiley(3000)plot(usmiech)#to jeszcze jeden - bardziej realny#chociaż (chyba) błędne danemetraz = read.csv2("Centroid.csv")plot(metraz)#metoda k-rednichpodzial1 = kmeans(perla$x, 5)plot(perla$x, pch = podzial1$cluster, col = podzial1$cluster)points(podzial1$centers, cex=2, pch=19)#jeszcze raz to samopodzial1 = kmeans(perla$x, 5)podzial1plot(perla$x, pch = podzial1$cluster, col = podzial1$cluster)points(podzial1$centers, cex=2, pch=19)#podział na 3 grupypodzial2 = kmeans(perla$x, 3)plot(perla$x, pch = podzial2$cluster, col = podzial2$cluster)points(podzial2$centers, cex=2, pch=19)#ups, nie tak miało być !#troszkę posterujmypodzial2 = kmeans(perla$x, 3, iter.max = 40)plot(perla$x, pch = podzial2$cluster, col = podzial2$cluster)points(podzial2$centers, cex=2, pch=19)#jeszcze nie tak!podzial2 = kmeans(perla$x, 3, iter.max = 50, nstart = 50)plot(perla$x, pch = podzial2$cluster, col = podzial2$cluster)points(podzial2$centers, cex=2, pch=19)#cóż, chyba ten zbiór jest jednak za trudny, do podziału na 3 częci#chyba, żeby pomóc, ale i tak jest problempodzial3 = kmeans(perla$x, matrix(c(0,0,0,0.9,0,-0.9),3,2), iter.max = 10)plot(perla$x, pch = podzial3$cluster, col = podzial3$cluster)points(podzial3$centers, cex=2, pch=19)#inne zbiory:podzial4 = kmeans(usmiech$x, 5)plot(usmiech$x, pch = podzial4$cluster, col = podzial4$cluster)points(podzial4$centers, cex=2, pch=19)#powyżej OK, alepodzial4 = kmeans(usmiech$x, 4, iter.max = 50, nstart = 10)plot(usmiech$x, pch = podzial4$cluster, col = podzial4$cluster)points(podzial4$centers, cex=2, pch=19)#ostatni przykład:podzial5 = kmeans(metraz, 8)plot(metraz, pch = podzial5$cluster, col = podzial5$cluster)points(podzial5$centers, cex=2, pch=19)#problem - iloć osób jest uwzględniania w małym stopniu#poprawka - standaryzacja danychmetraz2 = data.frame(osoby = metraz$OSOBY/sd(metraz$OSOBY), metraz = metraz$METRAZ/sd(metraz$METRAZ))podzial5 = kmeans(metraz2, 8)plot(metraz, pch = podzial5$cluster, col = podzial5$cluster)#problem - jak narysować rodki?#inne metodylibrary("cluster")#Partitioning Around Medoidspodzial6 = pam(perla$x, 5)#niestety nic z tego - trwa to za długo na wykładpodzial7 = pam(metraz2, 8)plot(metraz, pch = podzial7$cluster, col = podzial7$cluster)#to teraz w innej skali - przypominam problem (skalowanie rodków)plot(metraz2, pch = podzial7$cluster, col = podzial7$cluster)points(podzial7$medoids, cex=2, pch=19)#to jeszcze jedna niespodziankaplot(podzial7)#a co ze zbiorem perla?#CLustering LARge Applicationspodzial8 = clara(perla$x, 3)plot(podzial8)plot(perla$x, pch = podzial8$cluster, col = podzial8$cluster)points(podzial8$medoids, cex=2, pch=19)#do metody pam (ale nie tylko) przyda się możliwoć stworzenia#macierzy odległoci - łatwo użyć wtedy innej metryki#sš do tego funkcje dist (standardowa) i np. daisy (pakiet cluster)ndane = metraz[1:10,]dist(ndane, method = "manhattan")daisy(ndane, metric = "manhattan")#niby (prawie) to samo, ale daisy daje standaryzacje w prezencie#za to dist ma zaimplementowane więcej metrykdaisy(ndane, metric = "manhattan", stand = T)podzial9 = pam(daisy(metraz, metric = "manhattan", stand = T), 8, diss = T)#tu skromniejplot(podzial9)plot(metraz, pch = podzial9$cluster, col = podzial9$cluster)points(metraz[podzial9$medoids,], cex=2, pch=19)#na koniec metody hierarchiczne#podziałamy na mniejszym zbiorze usmiechusmiech2 = mlbench.smiley(800)plot(usmiech2)#AGglomerative NEStingpodzial10=agnes(usmiech2$x, method="average")plot(podzial10)klaster10 = cutree(podzial10, k=4)plot(usmiech2$x, pch = klaster10, col = klaster10)#DIvisive ANAlysis Clusteringpodzial11=diana(usmiech2$x)plot(podzial11)klaster11 = cutree(podzial11, k=4)plot(usmiech2$x, pch = klaster11, col = klaster11)#widać minimalnš różnicęplot(usmiech2$x, pch = klaster10, col = klaster11)#analiza dyskryminacyjna w Rlibrary(MASS) #klasyfikatory liniowe i kwadratowe#żeby była powtarzalnoćset.seed(2011)#dane iris (Fisher[1936])#sš już w Riris#zmiana nazwnames(iris) = c("dk", "sk", "dp", "sp", "gat")levels(iris$gat) = c("s", "c", "v")iris$gatkolory = c("red","black", "blue")#spróbujemy dokonać klasyfikacji gatunków według rozmiarów płatków#pusty wykresplot(iris$dp, iris$sp, col = "white", xlab = "Długoć", ylab = "Szerokoć")text(iris$dp, iris$sp, iris$gat, col = kolory[iris$gat])#żeby sprawdzić, czy klasyfikator działa rozbijemy dane na zbiór uczšcy i testowyucz = sample(150, 100, rep = F)#to jeszcze jeden wykres (pogrubiony jest zbiór testowy)plot(iris$dp, iris$sp, col = "white", xlab = "Długoć", ylab = "Szerokoć")text(iris$dp[ucz], iris$sp[ucz], iris$gat[ucz], col = kolory[iris$gat[ucz]])text(iris$dp[-ucz], iris$sp[-ucz], iris$gat[-ucz], col = kolory[iris$gat[-ucz]], font = 2)#klasyfikator liniowylda.irys = lda(gat~dp+sp, data = iris[ucz,])lda.irysplot(iris$dp, iris$sp, col = "white", xlab = "Długoć", ylab = "Szerokoć")text(iris$dp[ucz], iris$sp[ucz], iris$gat[ucz],col = kolory[predict(lda.irys)$class])irys.ldatestpred = predict(lda.irys, iris[-ucz,])text(iris$dp[-ucz], iris$sp[-ucz], iris$gat[-ucz],col = kolory[irys.ldatestpred$class], font=2)#ocena klasyfikatora#błędy na zbiorze uczšcym(tabl = table(prognoza = predict(lda.irys)$class, prawdziwe = iris$gat[ucz]))print("Błšd na zbiorze uczšcym:", quote = F)1-sum(diag(tabl))/sum(tabl)#ważniejsze!#błędy na zbiorze testowym(tabl2 = table(prognoza = irys.ldatestpred$class, prawdziwe = iris$gat[-ucz]))print("Błšd na zbiorze testowym:", quote = F)1-sum(diag(tabl2))/sum(tabl2)#jeszcze jeden ładny wykreslibrary(klaR)drawparti(iris$gat[ucz], iris$dp[ucz], iris$sp[ucz], prec = 200,xlab = "Długoć", ylab = "Szerokoć")#klasyfikator kwadratowyqda.irys = qda(gat~dp+sp, data = iris[ucz,])qda.irys#wykresplot(iris$dp, iris$sp, col = "white", xlab = "Długoć", ylab = "Szerokoć")text(iris$dp[ucz], iris$sp[ucz], iris$gat[ucz],col = kolory[predict(qda.irys)$class])text(iris$dp[-ucz], iris$sp[-ucz], iris$gat[-ucz],col = kolory[predict(qda.irys, iris[-ucz,])$class], font=2)#ocena klasyfikatora#błędy na zbiorze uczšcym(tabl = table(prognoza = predict(qda.irys)$class, prawdziwe = iris$gat[ucz]))print("Błšd na zbiorze uczšcym:", quote = F)1-sum(diag(tabl))/sum(tabl)#ważniejsze!#błędy na zbiorze testowym(tabl2 = table(prognoza = predict(qda.irys, iris[-ucz,])$class, prawdziwe = iris$gat[-ucz]))print("Błšd na zbiorze testowym:", quote = F)1-sum(diag(tabl2))/sum(tabl2)#wykres klasyfikatoradrawparti(iris$gat[ucz], iris$dp[ucz], iris$sp[ucz], prec = 200,method = "qda", xlab = "Długoć", ylab = "Szerokoć")#naiwny klasyfikator bayesowski#pakiet klaRbayes.irys = NaiveBayes(gat~dp+sp, data = iris[ucz,])bayes.irys#wykresplot(iris$dp, iris$sp, col = "white", xlab = "Długoć", ylab = "Szerokoć")text(iris$dp[ucz], iris$sp[ucz], iris$gat[ucz],col = kolory[predict(bayes.irys)$class])text(iris$dp[-ucz], iris$sp[-ucz], iris$gat[-ucz],col = kolory[predict(bayes.irys, iris[-ucz,])$class], font=2)#ocena klasyfikatora#błędy na zbiorze uczšcym(tabl = table(prognoza = predict(bayes.irys)$class, prawdziwe = iris$gat[ucz]))print("Błšd na zbiorze uczšcym:", quote = F)1-sum(diag(tabl))/sum(tabl)#ważniejsze!#błędy na zbiorze testowym(tabl2 = table(prognoza = predict(bayes.irys, iris[-ucz,])$class, prawdziwe = iris$gat[-ucz]))print("Błšd na zbiorze testowym:", quote = F)1-sum(diag(tabl2))/sum(tabl2)#wykres klasyfikatoradrawparti(iris$gat[ucz], iris$dp[ucz], iris$sp[ucz], prec = 150,method = "naiveBayes", xlab = "Długoć", ylab = "Szerokoć")#metoda k najbliższych sšsiadów - inne podejcie#wersja z pakietu klaR#zaczynamy inaczej - najpierw skalowanie danych (dzielenie przez odch std.)irys = irisirys$dp = scale(irys$dp)#zamiast irys$dp = (irys$dp-mean(irys$dp))/sd(irys$dp)irys$sp = scale(irys$sp)#teraz klasyfikacja - 3 nskns.irys = sknn(gat~dp+sp, data = irys[ucz,], kn = 3)kns.irys#wykresplot(iris$dp, iris$sp, col = "white", xlab = "Długoć", ylab = "Szerokoć")text(iris$dp[ucz], iris$sp[ucz], iris$gat[ucz],col = kolory[predict(kns.irys)$class])text(iris$dp[-ucz], iris$sp[-ucz], iris$gat[-ucz],col = kolory[predict(kns.irys, irys[-ucz,])$class], font=2)#ocena klasyfikatora#błędy na zbiorze uczšcym(tabl = table(prognoza = predict(kns.irys)$class, prawdziwe = iris$gat[ucz]))print("Błšd na zbiorze uczšcym:", quote = F)1-sum(diag(tabl))/sum(tabl)#ważniejsze!#błędy na zbiorze testowym(tabl2 = table(prognoza = predict(kns.irys, irys[-ucz,])$class, prawdziwe = iris$gat[-ucz]))print("Błšd na zbiorze testowym:", quote = F)1-sum(diag(tabl2))/sum(tabl2)#wykres klasyfikatoradrawparti(irys$gat[ucz], irys$dp[ucz], irys$sp[ucz], prec = 80,method = "sknn", kn = 3, xlab = "Długoć", ylab = "Szerokoć")text(irys$dp[-ucz], irys$sp[-ucz], iris$gat[-ucz],col = kolory[predict(kns.irys, irys[-ucz,])$class], font=2)#wykres klasyfikator...
[ Pobierz całość w formacie PDF ]