Decision Tree

Decision Tree

Decisioin tree adalah alat pendukung keputusan yang menggunakan model keputusan seperti pohon. Decisioin tree (pohon keputusan) biasanya digunakan dalam riset operasi, khususnya dalam analisis keputusan, untuk membantu mengidentifikasi strategi yang paling memungkinkan untuk mencapai tujuan, dan juga merupakan alat yang populer dalam pembelajaran mesin.

Dalam ilmu komputer, pembelajaran Decision tree sebagai model prediktif untuk melakukan pengamatan tentang item (diwakili di cabang-cabang) ke kesimpulan tentang nilai target item (diwakili dalam daun). Decision tree ini adalah salah satu pendekatan pemodelan prediktif yang digunakan dalam statistik, penambangan data, dan pembelajaran mesin. Dalam struktur decision tree, daun mewakili label kelas dan cabang mewakili konjungsi fitur yang mengarah ke label kelas tersebut. Decision tree ini di mana variabel target dapat mengambil nilai kontinu yang disebut pohon regresi.

Entropy

Entropi adalah nilai informasi yang menyatakan ukuran ketidakpastian(impurity) dari attribut dari suatu kumpulan obyek data dalam satuan bit. $$ Entropy(S)={\sum \limits_{i=1}^{n} -pi\quad log_2\quad pi} $$ Keterangan :

  • S=Himpunan kasus
  • n = jumlah partisi S
  • pi= proposi Si terhadap S

Gain

Gain adalah ukuran efektifitas suatu atribut dalam mengklasifikasikan data, gain digunakan untuk menentukan urutan atribut dimana attribut yang memiliki nilai information Gain terbesar yang dipilih. $$ GAIN(S,A)= entropy(S)-{\sum \limits_{i=1}^{n} \frac{|Si|}{|s|}*entropy(Si)} $$ Keterangan :

  • S=himpunan kasus
  • n=jumlah partisi S
  • |si|=proporsi terhadap S
  • |s|=jumlah kasus dalam S

GINI Index

Dalam penerapan GINI index untuk data berskala continuous, terdapat beberapa metode yang dapat digunakan untuk menentukan titik pemecah terbaik, yakni metode brute-force dan metode midpoints.

Script

# menentukan value atau jenis pada atribut

def banyak_elemen (kolom, data):
    kelas=[]
    for i in range (len(data)):
        if data.values.tolist()[i][kolom] not in kelas:
            kelas.append(data.values.tolist()[i][kolom])
    return kelas
kelas=banyak_elemen(df.shape[1]-1, df)
outlook=banyak_elemen(df.shape[1]-5,df)
temp=banyak_elemen(df.shape[1]-4,df)
humidity=banyak_elemen(df.shape[1]-3,df)
windy=banyak_elemen(df.shape[1]-2,df)
print(kelas,outlook,temp,humidity,windy)`
['no', 'yes'] ['sunny', 'overcast', 'rainy'] ['hot', 'mild', 'cool'] ['high', 'normal'] [False, True]
# menentukan count value pada Kelas
#Fungsi countvKelas untuk menghitung berapa perbandingan setiap elemen yang terdapat di class

def countvKelas(kelas,kolomKelas,data):
    hasil=[]
    for x in range(len(kelas)):
        hasil.append(0)
    for i in range (len(data)):
        for j in range (len(kelas)):
            if data.values.tolist()[i][kolomKelas] == kelas[j]:
                hasil[j]+=1
    return hasil
pKelas=countvKelas(kelas,df.shape[1]-1,df)
pKelas
[5, 9]
# menentukan nilai entropy target
# Fungsi entropy untuk Menghitung nilai entropy pada sebuah fiture/class. fungsi e_list untuk mempermudah penghitungan entropy setiap elemen di dalam sebuah fiture

def entropy(T):
    hasil=0
    jumlah=0
    for y in T:
        jumlah+=y
    for z in range (len(T)):
        if jumlah!=0:
            T[z]=T[z]/jumlah

    for i in T:
        if i != 0:
            hasil-=i*math.log(i,2)
    return hasil

def e_list(atribut,n):
    temp=[]
    tx=t_list(atribut,n)
    for i in range (len(atribut)):
        ent=entropy(tx[i])
        temp.append(ent)
    return temp
tOutlook=t_list(outlook,5)
tTemp=t_list(temp,4)
tHum=t_list(humidity,3)
tWin=t_list(windy,2)
print("Sunny, Overcast, Rainy",eOutlook)
print("Hot, Mild, Cold", eTemp)
print("High, Normal", eHum)
print("False, True", eWin)
Sunny, Overcast, Rainy [0.9709505944546686, 0.0, 0.9709505944546686]
Hot, Mild, Cold [1.0, 0.9182958340544896, 0.8112781244591328]
High, Normal [0.9852281360342516, 0.5916727785823275]
False, True [0.8112781244591328, 1.0]

Berikut adalah contoh data yang akan dirubah menjadi decision tree:

0 1 2 3 4
0 CASTEMER ID GENDER CAR TIPE SHIRT SIZE CLASS
1 1 M FAMILY SMALL C0
2 2 M SPORT MEDIUM C0
3 3 M SPORT MEDIUM C0
4 4 M SPORT LARGE C0
5 5 M SPORT EXTRA LARGE C0
6 6 M SPORT EXTRA LARGE C0
7 7 F SPORT SMALL C0
8 8 F SPORT SMALL C0
9 9 F SPORT MEDIUM C1
10 10 F LUXURY LARGE C1
11 11 M FAMILY LARGE C1
12 12 M FAMILY EXTRA LARGE C1
13 13 M FAMILY MEDIUM C1
14 14 M LUCURY EXTRA LARGE C1
15 15 F LUCURY SMALL C1
16 16 F LUCURY SMALL C1
17 17 F LUCURY MEDIUM C1
18 18 F LUCURY MEDIUM C1
19 19 F LUCURY MEDIUM C1
20 20 F LUCURY LARGE C1

pertama mencari entropy(s) dari kolom class di atas,

diket:

co=10 = Pi=10/20

c1=10=Pi=10/20 $$ Entropy(S)={\sum \limits_{i=1}^{n} -pi\quad log2\quad pi} $$

$$ Entropy(S)= -10/20 * log2 10/20 -10/20 *log2 10/20 $$

$$ Entropy(S)= 1 $$

Kemudian menghitung gain setiap kolom di atas: $$ GAIN(GENDER)= entropy(S)-{\sum \limits_{i=1}^{n} \frac{|Si|}{|s|}*entropy(Si)} $$ GAIN(GENDER)= 1-[10/20(6,4)+10/20(4,6)]

​ = 1-10/20(-6/10 x log2 6/10 - 4/10 x log2 4/10) +10/20(-4/10 x log2 4/10 - 6/10 x log2 6/10 )

​ =1-(10/20 x 0,970951)+(10/20 x 0,970951)

​ =1-(0,4485475+0,4485475)

​ =1-0,970951

​ =0.029049 $$ GAIN(CAR\quad TIPE)= entropy(S)-{\sum \limits_{i=1}^{n} \frac{|Si|}{|s|}*entropy(Si)} $$ GAIN(CAR TIPE)= 1-[4/20(1,3)+8/20(8,0)+8/20(1,7)]

​ = 1-4/20(-1/4 x log2 1/4 - 3/4 x log2 3/4) +8/20(-8/8 x log2 8/8 - 0/8 x log2 0/8 )+8/20(-1/8 x log2 1/8 - 7/8 x log2 7/8)

​ =1-(0,162256+0+0,217426)

​ =1-0,379681

​ =0,620319

GAIN(shirt hat)= 1-[5/20(3,2)+7/20(3,4)+4/20(2,2)+4/20(2,2)]

​ = 1-5/20(-3/5 x log2 3/5 - 2/5 x log2 2/45 +7/20(-3/7 x log2 3/7 - 4/7 x log2 4/7 )+4/20(-2/4 x log2 2/4 - 2/2 x log2 2/2)+4/20(-2/4 log2 2/4-2/4 log2 2/4)

​ =1-(0,242738+0,34483+0,2+0,2)

​ =1-0,987567

​ =0,012433

Referensi

https://en.wikipedia.org/wiki/Decision_tree_learning http://dinus.ac.id/repository/docs/ajar/5DecTreeClass.pdf