Zadanie na ocenę 4:

Zmienne objaśniające: -Area -EquivDiameter -roundness -ShapeFactor3

Zmienna objaśniana: -Class (tylko cztery klasy SBARBUNYA, BOMBAY, DERMASON, SEKER)

Zbudować model klasyfikacji metodą LDA dla dwóch pierwszych zmiennych kanonicznych. Zrobić odpowiedni wykres z obszarami klasyfikacji.

install.packages("readxl")
library(readxl)
Dry_Bean_Dataset_poprawione <- read_excel("~/Dry_Bean_Dataset_poprawione.xlsx")
View(Dry_Bean_Dataset_poprawione)

install.packages("MASS")
library(MASS)
class.lda=lda(Class~Area+EquivDiameter+roundness+ShapeFactor3,data=Dry_Bean_Dataset_poprawione)

Procent poprawnej reklasyfikacji

table(predict(class.lda)$class,Dry_Bean_Dataset_poprawione$Class) sum(diag(table(predict(class.lda)$class,Dry_Bean_Dataset_poprawione$Class)))/7357 

0.982

class.lda predict(class.lda)\$x #prior probabilities 

BARBUNYA 0.17823918 , BOMBAY 0.07037886 , DERMASON 0.47809087, SEKER 0.27329109

Zmienna kanoniczna

zk1=predict(class.lda)$x[,1] 
zk2=predict(class.lda)$x[,2] 
zk.lda=lda(class~zk1+zk2,data=Dry_Bean_Dataset_poprawione)

Obszary klasyfikacji

install.packages("klaR") 
library(klaR) 
partimat(class~zk1+zk2,data=Dry_Bean_Dataset_poprawione)

Wykres

class.lda$scaling 
predict(class.lda)$x 
plot(predict(class.lda)$x,ylab="Zmienna kanoniczna") 
abline(0,0,col="red")

Zbudować model klasyfikacji oparty na regresji logistycznej (z wieloma klasami) z karą dla podanych zmiennych objaśniających i zmiennej objaśnianej. Parametry funkcji kary dobrać tak aby prawdopodobieństwa błędnej klasyfikacji liczone za pomocą kroswalidacji n-krotnej i 10-krotnej było jak najmniejsze.

Dry_Bean_Dataset_poprawione$Class=factor(Dry_Bean_Dataset_poprawione$Class)
Dry_Bean_Dataset_poprawione$Class

install.packages("glmnet")
library(glmnet)

Regresja wielomianowa bez kary

log_dry=glmnet(x=Dry_Bean_Dataset_poprawione[,c(1,2,3,4)],y=Dry_Bean_Dataset_poprawione$Class,family="multinomial",lambda=0)
log_dry
log_dry$beta

Regresja z kara

install.packages("caret")
library(caret)

train(Class~Area+EquivDiameter+roundness+ShapeFactor3,data=Dry_Bean_Dataset_poprawione,method="glmnet",
      trControl=trainControl(method="cv"))

alpha=1, lambda=0.0007041619, pr pop klas= 0.9715533

train(Class~Area+EquivDiameter+roundness+ShapeFactor3,data=Dry_Bean_Dataset_poprawione,method="glmnet",
      trControl=trainControl(method="cv",number = 10))

alpha=1, lambda=0.0007041619, pr= 0.9726317

Kroswalidacja dla regresji, lambda=0.0007041619

train(Class~Area+EquivDiameter+roundness+ShapeFactor3,data=Dry_Bean_Dataset_poprawione,method="glmnet",
      trControl=trainControl(method="cv"),
      tuneGrid=data.frame(alpha=1,lambda=0.0007041619))

pr 0.9755981

Porównać prawdopodobieństwa błędnej klasyfikacji w podpunktach a) i b) za pomocą kroswalidacji n-krotnej i 10-krotnej. Można skorzystać z gotowej funkcji train z biblioteki caret.

Model z czterema zmiennymi

train(Class~Area+EquivDiameter+roundness+ShapeFactor3,data=Dry_Bean_Dataset_poprawione,method="lda",
      trControl=trainControl(method="cv"))

Prawdopodobienstwo poprawnej klasyfikacji wynosi 0.973 (bledu 0.027)

Model ze zmiennymi kanonicznymi

Dry_Bean_Dataset_poprawione$zk1=zk1
Dry_Bean_Dataset_poprawione$zk2=zk2
train(class~zk1+zk2,data=Dry_Bean_Dataset_poprawione,method="lda",
      trControl=trainControl(method="cv"))

0.819 (bledu 0.181)

Model z czterema zmiennymi

set.seed(111)
train(Class~Area+EquivDiameter+roundness+ShapeFactor3,data=Dry_Bean_Dataset_poprawione,method="lda",
      trControl=trainControl(method="cv",number=10))

0.974 (0.0026)

Model ze zmiennymi kanonicznymi

set.seed(111)
train(class~zk1+zk2,data=dry_bean,method="lda",
      trControl=trainControl(method="cv",number=10))

0.819 (bledu 0.181)

Mniejsze prawdopodobienstwo bledu ma model z czterema zmiennymi