Algoritma ID3
ID3 merupakan algoritma decision tree Learning(algoritma pembelajaran pohon keputusan) yang melakukan pencarian secara menyeluruh (greedy) pada semua kemungkinan pohon keputusan.
Tahapan Algoritma ID3
- Siapkan data training
- Pilih atribut sebagai akar
- Buat cabang untuk tiap-tiap nilai
- Ulangi prosesuntuk setiap cabang sampai semua kasus pada cabang memiliki kelas yang sama
Eksperimen Algoritma ID3
Library
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Masukkan Dataset
library(data.tree)
View(iris)
Mencari Nilai Entropy
<- function(data) {
IsPure length(unique(data[,ncol(data)])) == 1
}
<- function( vls ) {
Entropy <- vls/sum(vls) * log2(vls/sum(vls))
res == 0] <- 0
res[vls -sum(res)
}
Entropy(c(10, 0))
## [1] 0
Entropy(c(0, 10))
## [1] 0
<- function(Species) Entropy(c(Species, 150 - Species))
entropy <- Vectorize(entropy)
entropy curve( entropy, from = 0, to = 150, xname = 'Species')
Nilai Information Gain
<-function(data, feature, target, bins=4) {
IG_numeric#Hapus baris di mana fiturnya adalah NA
<-data[!is.na(data[,feature]),]
data#Menghitung entropi untuk induk(label data)
<-entropy(data[,target])
e0
$cat<-cut(data[,feature], breaks=bins, labels=c(1:bins))
data
#gunakan dplyr untuk menghitung e dan p untuk setiap nilai fitur
<- data %>% group_by(cat) %>% summarise(e=entropy(get(target)),
dd_data n=length(get(target)),
min=min(get(feature)),
max=max(get(feature))
)
#hitung p untuk setiap nilai fitur
$p<-dd_data$n/nrow(data)
dd_data#menghitung IG
<-e0-sum(dd_data$p*dd_data$e)
IG
return(IG)
}
Membuat DataFrame untuk Nilai Entropy & Information Gain Setiap Kolom dan Diurutkan:
<- function(df, bin){
Fitur_Exploration <- numeric()
E for (i in 1:ncol(df)){
<-names(df)[i]
nama<-entropy(df[,nama])
E[i]
}
<- numeric()
ig =ncol(df)-1
kolfor (i in 1:kol){
<-IG_numeric(df, names(df)[i], names(df)[ncol(df)], bins=bin)
ig[i]
}ncol(df)]<-0 #Masih dicek lagi
ig[<- names(df)
Column_Name <- E
Entropy <- ig
IG <- data.frame(Column_Name, Entropy, IG)
df_E <- df_E[order(-IG),]
df_E_sort return(df_E_sort)
}
Column_Name Entropy IG
4 Petal.Width 4.049827 1.3245310
3 Petal.Length 5.034570 1.2662530
1 Sepal.Length 4.822018 0.6402424
2 Sepal.Width 4.023181 0.3914756
5 Species 1.584963 0.0000000
Pohon Keputusan
library(rpart)
library(rpart.plot)
<-rpart(Species ~. , data = iris, method = 'class')
treesrpart.plot(trees)