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