Algoritma C4.5 With R

Ardila Cindy Vayuanita-Institut Teknologi Statistika dan Bisnis Muhammadiyah

2023-01-19

Algoritma C4.5

Pengertian Algoritma C4.5

Algoritma C4.5 merupakan algoritma yang digunakan untuk membentuk pohon keputusan (Decision Tree). Algoritma C4.5 menggunakan klasifikasi data dengan teknik pohon keputusan yang dapat mengolah data numerik (kontinu) dan diskrit. Algoritma C4.5 adalah membuat suatu klasifikasi dengan menghasilkan sebuah pola dan polanya dapat digunakan untuk prediksi (kuliah teknokrat, 2020). Menurut Quinlan algoritma C4.5 adalah algoritma yang paling terkenal (Pramudiono, 2003). Algoritma C4.5 merupakan pengembangan dari algoritma ID3, Proses pada pohon keputusan adalah mengubah bentuk data (tabel) menjadi model pohon.

Tahapan Algoritma C4.5

  1. Siapkan Dataset

  2. Menghitung Entropy Total di Dataset.

    \(\operatorname{Entropy}(\mathrm{S})=\sum_{i=1}^n-p i \times \log _2 p i\)

  3. Menghitung Entropy, Gain, SplitInfo, dan GainRatio untuk masing-masing label.

  • Mengitung Entropy

    \(\operatorname{Entropy}(\mathrm{S})=\sum_{i=1}^n-p i \times \log _2 p i\)

  • Menghitung Gain

    \(\operatorname{Gain}(S, A)=\operatorname{Entropy}(S)-\sum_{i=1}^n \frac{\mid \text { Si } \mid}{|S|} \times \operatorname{Entropy}(\) Si \()\)

  • Menghitung SplitInfo

    \(\operatorname{SplitInfo}(S, A)=\sum_{i=1}^n-\frac{\left|S_i\right|}{|S|} \log _2 \frac{\left|S_i\right|}{|S|}\)

  • Menghiung GainRatio

    \(GainRatio =\frac{\text { Gain }}{\text { SplitInfo }}\)

  1. Mencari nilai GainRatio tertinggi dan membuat pohon keputusan sementara.

  2. Membuat Node selanjutnya dengan mengulangi langkah-langkah diatas hingga pohon keputusan selesai dan dapat dibuat kesimpulan.

Eksperimen Algoritma C4.5

Library

library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(rpart.plot)
## Loading required package: rpart

Import Dataset

library(readxl)
Data_penguin <- read_excel("C:/Users/WINDOWS 10/Downloads/Data penguin.xlsx")
View(Data_penguin)
summary(Data_penguin)
##    Species          Culmen.Length    Culmen.Depth   Flipper.Length 
##  Length:342         Min.   :32.10   Min.   :13.10   Min.   :172.0  
##  Class :character   1st Qu.:39.23   1st Qu.:15.60   1st Qu.:190.0  
##  Mode  :character   Median :44.45   Median :17.30   Median :197.0  
##                     Mean   :43.92   Mean   :17.15   Mean   :200.9  
##                     3rd Qu.:48.50   3rd Qu.:18.70   3rd Qu.:213.0  
##                     Max.   :59.60   Max.   :21.50   Max.   :231.0  
##    Body.Mass   
##  Min.   :2700  
##  1st Qu.:3550  
##  Median :4050  
##  Mean   :4202  
##  3rd Qu.:4750  
##  Max.   :6300
str(Data_penguin)
## tibble [342 × 5] (S3: tbl_df/tbl/data.frame)
##  $ Species       : chr [1:342] "Adelie Penguin (Pygoscelis adeliae)" "Adelie Penguin (Pygoscelis adeliae)" "Adelie Penguin (Pygoscelis adeliae)" "Adelie Penguin (Pygoscelis adeliae)" ...
##  $ Culmen.Length : num [1:342] 39.1 39.5 40.3 36.7 39.3 38.9 39.2 34.1 42 37.8 ...
##  $ Culmen.Depth  : num [1:342] 18.7 17.4 18 19.3 20.6 17.8 19.6 18.1 20.2 17.1 ...
##  $ Flipper.Length: num [1:342] 181 186 195 193 190 181 195 193 190 186 ...
##  $ Body.Mass     : num [1:342] 3750 3800 3250 3450 3650 ...
set.seed(3033)
intrain <- createDataPartition(y = Data_penguin$Species, p= 0.7, list = FALSE)
training <- Data_penguin[intrain,]
testing <- Data_penguin[-intrain,]
dim(training);dim(testing)
## [1] 241   5
## [1] 101   5

Pohon Keputusan

trctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
 set.seed(3333)
 dtree_fit_info <- train(Species ~., data = Data_penguin, method = "rpart",
                    parms = list(split = "information"),
                    trControl=trctrl,
                    tuneLength = 10)
 prp(dtree_fit_info$finalModel, box.palette="Reds", tweak=1.2)

set.seed(3333)
 dtree_fit_gini <- train(Species ~., data = Data_penguin, method = "rpart",
                         parms = list(split = "gini"),
                         trControl=trctrl,
                         tuneLength = 10)
 prp(dtree_fit_gini$finalModel,box.palette = "Blues", tweak = 1.2)

library(rpart)
library(rpart.plot)
tress<-rpart(Species ~., data = Data_penguin, method = 'class' )                  
rpart.plot(tress)