Linear Discriminant Analysis

Linear Discriminant Analysis merupakan salah satu tools supervised machine learning. Metode klasik namun tetap digunakan karena memang powerfull. Tujuan analisis ini adalah melatih algoritma dengan data yang sudah diberi label, berdasarkan parameter-parameter kuantitatif yang ada. Misal, membedakan grade buah. Fitur-fitur buah diekstrak dari buah, seperti diameter, lingkaran, berat, warna, rasa dan lain-lain. Kegunaannya luas, seperti penentuan sortasi. Dengan ciri-ciri tertentu, buah bisa disortasi secara otomatis dan cepat berdasarkan grade 1, 2 atau 3, tanpa penilaian secara subjektif dari manusia.

Syntax linear discriminant analysis menggunakan R bisa dilihat pada bagian berikut. Jika data tersedia dalam jumlah cukup, data dapat dibagi menjadi dua bagian sebagai training set dan prediction set. Tidak ada aturan pasti perbandingan datanya, bisa 60:40, 65:35, atau 70:30. Umumnya, makin banyak porsi training set, maka akurasi model akan semakin baik (walau tidak selalu).

#load necessary libraries
library(ggplot2)
library(MASS)

#load and view data
Dataset
str(Dataset)

#scale predictor variables
Dataset[1:9] <- scale(Dataset[1:9])

#check that each predictor variable has mean=0 and sd=1
apply(Dataset[1:9], 2, mean)
apply(Dataset[1:9], 2, sd)

#split data into training and testing set
set.seed(1)
sample <- sample(c(TRUE, FALSE), nrow(Dataset), replace=TRUE, prob=c(0.7,0.3))
train <- Dataset[sample, ]
test <- Dataset[!sample, ] 

#fit lda model
model <- lda(Decision ~., data=train)
model

#use model to make predictions
predicted <- predict(model, test)
table(predicted$class,test$Decision)
mean(predicted$class==test$Decision)

#visualize linear discriminants
lda_plot <- cbind(train, predict(model)$x)

#minimal 3 cluster, sehingga terdapat LD1 dan LD2
ggplot(lda_plot, aes(LD1, LD2)) + geom_point(aes(color = Decision)) 

#2 cluster, hanya ada LD1
ggplot(lda_plot, aes(x= Decision, y=LD1)) + geom_boxplot(outlier.colour="red", outlier.shape=19, outlier.size=4) 

Jika data tidak tersedia dalam jumlah cukup, model tetap bisa ditraining dengan menggunakan metode cross-validation

#LDA with crossvalidation
lda.fit <- lda(Keputusan ~ ., data = Dataset)
lda.fit
lda.cv <- predict(lda.fit, CV=TRUE)
lda.cv
table(pred=lda.cv$class, true=Dataset$Keputusan)
mean(lda.cv$class == Dataset$Keputusan)

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.