#żeby każde uruchomienie dało to samo (gen liczb losowych)set.seed(2011)raty = read.csv2("Raty.csv")#Przekształćmy raty na 0/1(raty$Raty = c(raty$Raty)-1)#tu wyodrenienie zbiorów uczącego i testowegoucz = sample(127,100, rep = F)raty_ucz = raty[ucz,]raty_test = raty[-ucz,]#wykres (por. wykład 11)plot(raty$Dochody, raty$Wydatek, col = raty$Raty+1)#widać, że będą błędy w klasyfikacji#teraz fragment wykładu 8:attach(raty_ucz)#regresja logistyczna od dwóch zmiennychregl2 = glm(Raty ~ Wydatek+Dochody, family = "binomial")summary(regl2)#a może lepiej rzut na wykres dwuwymiarowy?logit = predict(regl2)plot(logit, Raty)x = seq(min(logit), max(logit), length = 300)y = 1/(1+exp(-x))lines(x, y, lwd = 2, col = "blue2")#widać, że model jest niezłydetach(raty_ucz)#klasyfikator:#wartość funkci logit > 0 <-> przewidujemy Raty=1#działanie na zbiorze uczącym (mnożenie przez 1, żeby były zera i jedynki)(raty_pred = 1*(predict(regl2) > 0))#wykres dla zbioru uczącego#kolor - prognoza, litera - decyzjaplot(raty$Dochody, raty$Wydatek, col = "white")text(raty_ucz$Dochody, raty_ucz$Wydatek, c("N", "T")[raty_ucz$Raty+1], col = raty_pred+1)#dodaję zbiór testowy(raty_pred2 = 1*c(predict(regl2, raty_test) > 0))text(raty_test$Dochody, raty_test$Wydatek, c("N", "T")[raty_test$Raty+1], col = raty_pred2+1, font = 2)#ocena klasyfikacji(tabela_ucz = table(decyzja = raty_ucz$Raty, progn = raty_pred))print("Błąd na zbiorze uczącym:", quote = F)1-sum(diag(tabela_ucz))/sum(tabela_ucz)#na zbiorze testowym(tabela_test = table(decyzja = raty_test$Raty, progn = raty_pred2))print("Błąd na zbiorze testowym:", quote = F)1-sum(diag(tabela_test))/sum(tabela_test)#linia rozgraniczająca do wykresu (można dorysować) - zadanie dla czytających#klasyfikator liniowy powinien dać (mniej więcej) to samolibrary(MASS)klas1 = lda(Raty~Dochody+Wydatek, data = raty_ucz)klas1.pred = predict(klas1)raty_predklas1.pred$class#wynik dokładnie ten sam - wszędzie 0raty_pred - c(klas1.pred$class)+1#na zbiorze testowym też to samopredict(klas1, raty_test)$classraty_pred2#wynik dokładnie ten sam - wszędzie 0raty_pred2 - c(predict(klas1, raty_test)$class)+1#czyżby były takie same? spróbuję narysować wykreslibrary(klaR)drawparti(raty_ucz$Raty, raty_ucz$Dochody, raty_ucz$Wydatek, prec = 200, xlab = "Dochody", ylab = "Wydatek")#linia, która rozgranicza klasyfikację logistyczną:regl2$coeff#ma postać: regl2$coeff[1]+Wyd*regl2$coeff[2]+Doch*regl2$coeff[3] = 0doch = c(min(raty$Dochody), max(raty$Dochody))wyd = -(regl2$coeff[1]+doch*regl2$coeff[3])/regl2$coeff[2]lines(doch, wyd, lwd = 2)#czyli jednak trochę się różnią
aivliska