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.
Ş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:
Sadece bir adet niteliğimiz kaldı onun için Gain hesabı yapmaya gerek yok.
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
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.
“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. (Start düğmesinin üstündeki açılır menü, sınıflandırmayı hangi attribute için yapıyoruz onu belirlemek içindir. Tenis oynanır mı onu değerlendireceğiz, o yüzden onu seçiyoruz.)
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.
Daha sonra “Result list” olarak gözüken listede “trees.J48” e sağ tıklayıp “Visualize Tree” seçeneğini seçiyoruz.
Sonuç olarak aşağıdaki gibi bir görüntü elde ederiz:
Gelelim en sevdiğim kısım olan yoruma, örneğin eğer hava güneşli ve nem oranı da yüksekse tenis oynamalı mıyız? Outlook = Sunny -> Humidity = High -> No
Mailiniz olmadığı için facebook’tan mesaj yazdım. Diğer klasörünüze düşecek sanırım. Çok teşekkürler..