Skip to content

Weka’da Id3 ve C 4.5 Sınıflandırma Ağaçları

Day Outlook Temperature Humidity Wind Play Tennis
1 Sunny Hot High Weak No
2 Sunny Hot High Strong No
3 Overcast Hot High Weak Yes
4 Rain Mild High Weak Yes
5 Rain Cool Normal Weak Yes
6 Rain Cool Normal Strong No
7 Overcast Cool Normal Strong Yes
8 Sunny Mild High Weak No
9 Sunny Cool Normal Weak Yes
10 Rain Mild Normal Weak Yes
11 Sunny Mild Normal Strong Yes
12 Overcast Mild High Strong Yes
13 Overcast Hot Normal Weak Yes
14 Rain Mild High Strong No

Id 3 ve C 4.5 aslında aynı algoritmadır fakat değerler numerik olmadığında ID 3’ü kullanırız. Aynı test tablosu için sıcaklık değeri bir sayı değeri olsaydı o zaman Id3 kullanamayacaktık. Örneğimizin sonucunda hangi hava şartlarında tenis oynayabiliriz onu tespit edeceğiz. Hesapları geçip Weka’da nasıl uygulandığını görmek için tıklayınız.

Öncelikle burada veri önişleme işlemi yapılmalı. ID3’ü uygulayacağımız için sayısal değerler olmamalı. Sayısal değerli olan niteliği atıyoruz. Kaçıncı gün olduğu bizim için bir anlam ifade etmiyor. Veri setimiz şu hale geldi:

Outlook Temperature Humidity Wind Play Tennis
Sunny Hot High Weak No
Sunny Hot High Strong No
Overcast Hot High Weak Yes
Rain Mild High Weak Yes
Rain Cool Normal Weak Yes
Rain Cool Normal Strong No
Overcast Cool Normal Strong Yes
Sunny Mild High Weak No
Sunny Cool Normal Weak Yes
Rain Mild Normal Weak Yes
Sunny Mild Normal Strong Yes
Overcast Mild High Strong Yes
Overcast Hot Normal Weak Yes
Rain Mild High Strong No

Şimdi her bir attribute için gain(kazanç) hesaplanmalı.Burada amaç en az dallı ağacı bulmaktır.
Önce Entropi hesaplıyoruz:
Entropi(s) = – (p*lnp) – (q*lnq)
PlayTennis attribute’u için: Yes = 5 ; No = 9
p = 5/14 = 0,36 ; q = 9/14 = 0,64
Entropi(s) = -0,64*ln0,64 – 0,36*ln0,36
= 0,94268

Outlook için Gain hesaplarsak:

Sunny => 2 yes, 3 no p = 2/5  q = 3/5  Entropi(Sunny) = -0,4*ln0,4-0,6*ln0,6 = 0,97

Overcast => 4 yes  p = 1 q = 0 Entropi(Overcast) = 0

Rain => 3 yes, 2 no Entropi(Rain) = 0,97

Gain(Outlook) = Entropi(System) – (Entropi(Sunny)*5/14 + Entropi(Overcast)*4/14+Entropi(Rain)*5/14) = 0,25

Bu şekilde tüm attribute(nitelik) durumları için Gain hesaplıyoruz:

Gain(Temp) = 0,03

Gain(Humidity) = 0,16

Gain(Wind) = 0,05

En yüksek kazanç Outlook’dan çıktığı için ağacın kökü olarak onu seçiyoruz.

tree

Şimdi Sunny’den sonra hangi niteliğe dallanacak ona bakacağız yine kazanç hesabından yola çıkıyoruz.

Entropi(Sunny) = 0,97

Bir tanesini açıklayalım. Temperature için hot, mild ve cool’un entropisi sunny için aşağıdaki gibi hesaplanmıştır. Yine hot’a düşen evet hayır sayısına göre hesap yapılır.

Gain(Sunny,Temp) = 0,97 – (2/5 * 0 + 2/5 *1 – 1/5*0) buradan sonuç: 0,57 çıkar. Diğerleri de aynı şekilde hesaplanırsa:

Gain( Sunny,Humidity) =  0,97

Gain(Sunny,Wind) =  0,021

Kazancı en yüksek olanın Humidity olduğu görülür buradan hareketle:

tree

Sadece bir adet niteliğimiz kaldı onun için Gain hesabı yapmaya gerek yok.

tree

Ağaç tamamlanmış oldu. Bu ID3 algoritması kullanılarak yapılmış oldu.

Tüm yaptığımız bu işlemleri kağıt kalem kullanarak yapmaya gerek yoktur. Weka ile bunu yapmamız çok kısa sürmektedir. Öncelikle veri setimizi ayarlıyoruz. arrf veya csv uzantılı olabilir.

@relation tennis

@attribute Day numeric
@attribute Outlook {Sunny,Overcast,Rain}
@attribute Temperature {Hot,Mild,Cool}
@attribute Humidity {High,Normal}
@attribute Wind {Strong,Weak}
@attribute PlayTennis {Yes,No}

@data
1,Sunny,Hot,High,Weak,No
2,Sunny,Hot,High,Strong,No
3,Overcast,Hot,High,Weak,Yes
4,Rain,Mild,High,Weak,Yes
5,Rain,Cool,Normal,Weak,Yes
6,Rain,Cool,Normal,Strong,No
7,Overcast,Cool,Normal,Strong,Yes
8,Sunny,Mild,High,Weak,No
9,Sunny,Cool,Normal,Weak,Yes
10,Rain,Mild,Normal,Weak,Yes
11,Sunny,Mild,Normal,Strong,Yes
12,Overcast,Mild,High,Strong,Yes
13,Overcast,Hot,Normal,Weak,Yes
14,Rain,Mild,High,Strong,No

weka1

Weka programını açtığımızda karşımıza yukarıdaki gibi bir menü gelir. Buradan “Explorer” seçeneğini tıklıyoruz.

Daha sonra “Open file…” butonuna tıklayıp yukarıdaki test.arrf dosyamızı yüklüyoruz. Aşağıdaki gibi bir görüntü elde etmemiz gerekiyor. Daha sonra veri önişleme işlemi için Day niteliğini kaldırıyoruz. Çünkü Id3’te sayısal değerler ağaç yapısını bozarlar. En yüksek entropi orada çıkacağı için ağaç uzayabilir. Gereksiz işlem yapılır.

onisleme2

“Preprocess” sekmesinden “Classify” sekmesine geçiyoruz. Artık ön işleme işlemlerimiz bitirdik. Kendi isteğimize göre bir sınıflandırıcı seçmek için “Choose” butonuna tıklıyoruz. Burada “trees” altında ID3’ü görebilirsiniz seçtikten sonra “Use training set” seçeneğini seçiyoruz ve artık “Start” butonuna basarak sonuca ulaşabiliriz.

sonuc

Id3’te herhangi bir görselleştirme yapılamıyor ama yukarıda gördüğünüz gibi aynı sonucu aldık.

Ağacımızı görmek için “Choose” butonuna basıp “trees” altında J48’i seçiyoruz. Bu aslında C4.5’tir.

c45

Daha sonra “Result list” olarak gözüken listede “trees.J48″ e sağ tıklayıp “Visualize Tree” seçeneğini seçiyoruz.

agac_goster

Sonuç olarak aşağıdaki gibi bir görüntü elde ederiz:

agac

Gelelim yoruma, örneğin eğer hava güneşli ve nem oranı da yüksekse tenis oynamalı mıyız? Hemen ağaçtan bakıp uygun mu değil mi diye bir değerlendirme yapabiliriz.

One Comment

  1. said said

    Mailiniz olmadığı için facebook’tan mesaj yazdım. Diğer klasörünüze düşecek sanırım. Çok teşekkürler..

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir