Merhaba arkadaşlar, bu yazımda Gini Index kullanarak karar ağacı oluşturulmasını bir örnek üzerinden adım adım gerçekleyeceğim. Karar ağacını oluştururken, yabancı kaynaklarda yaygın olarak kullanılmakta olan o malum tenis oynamak için oluşturulmuş hava durumu veri kümesini kullanacağım. Konuya başlamadan önce OMÜ, Bilgisayar Mühendisliği Bölümü, Makine Öğrenimine Giriş dersinde bizlere kattığı bilgi ve deneyimlerinden dolayı Prof. Dr. Erdal KILIÇ ve Arş. Gör. Zinnet Duygu Akşehir hocalarıma teşekkür ederim.
Gini Katsayısı kimdir?
İtalyan istatistikçi Corrado Gini ‘nin 1912 yılında geliştirdiği, kendi soyadını taşıyan Gini katsayısı, istatistik alanında çokça kullanılmaktadır. 0 ile 1 aralığında değişen katsayısıyla başarılı veya başarısız olma durumunu ifade eder. [1]
Şekil 1: Gini Katsayısı Formülü
Neler Yapacağız?
Bir örneği sınıflandırmak için kökten başlayıp testi gerçekleştirerek sonuca karşılık gelen kenarları takip edeceğiz. Takip sonucu ulaştığımız noktalarda testi gerçekleştirerek yaprakla ilişkili sonucu tahmin edeceğiz. Adım adım ifade edecek olursak:
- Her bir öznitelik için ayrı ayrı Gini değerlerini hesaplayacağız.
- Hesapladığımız Gini değerlerini küçükten büyüğe sıralayacağız
- En düşük Gini değerine sahip özniteliği kök (root) olarak belirleyeceğiz.
- Kök durumdaki özniteliğin her dallanması için ayrı ayrı Gini değerini hesaplayacağız.
- Hesapladığımız yeni Gini değerlerini kendi içinde küçükten büyüğe sıralayıp tekrar yeni dallanma için bir düğüm belirleyeceğiz.
- Aynı işlemi bütün dallanmalar için uygulayarak karar ağacımızı oluşturmuş olacağız.
Veri kümesini inceleyelim:
Şekil 2: Bhavesh Bhatt Hava Durumu Veri Kümesi
14 günün sonunda bugün ve yarın için havanın tenis oynamaya uygunluğunu tahmin etmeye çalışacağımız veri kümesi 5 öznitelikten oluşmaktadır. Havanın görünümü, sıcaklık, nem, rüzgâr ve tenis oynamaya uygunluk özniteliklerinin her biri için Gini değerlerini hesaplayalım.
Görünüm özniteliği için Gini hesaplanması:
Gini(Güneşli) = 1 – (2/5)^2 – (3/5)^2 = 1 – 0.16 – 0.36 = 0.48
Gini(Bulutlu) = 1 – (4/4)^2 – (0/4)^2 = 0
Gini(Yağmurlu) = 1 – (3/5)^2 – (2/5)^2 = 1-0.36-0.16 = 0.48
Gini(Görünüm) = (4/14) x 0 + (5/14) x 0.48 + (5/14) x 0.48 = 0 + 0.171 + 0.171 = 0.342
Sıcaklık özniteliği için Gini hesaplanması:
Gini(Sıcak) = 1 – (2/4)^2 – (2/4)^2 = 0.5
Gini(Ilık) = 1 – (4/6)^2 – (2/6)^2 = 1 – 0.444 – 0.111 = 0.445
Gini(Serin) = 1 – (3/4)^2 – (1/4)^2 = 1 – 0.5625 – 0.0625 = 0.375
Gini(Sıcaklık) = (4/14) x 0.375 + (4/14) x 0.5 + (6/14) x 0.445 = 0.107 + 0.142 + 0.190 = 0.439
Nem özniteliği için Gini hesaplanması:
Gini(Yüksek) = 1 – (3/7)2 – (4/7)2 = 1 – 0.183 – 0.326 = 0.491
Gini(Normal) = 1 – (6/7)2 – (1/7)2 = 1 – 0.734 – 0.0204 = 0.245
Gini(Nem) = (7/14) x 0.491 + (7/14) x 0.245 = 0.2455 + 0.1225 = 0.367
Rüzgâr özniteliği için Gini hesaplanması:
Gini(Hafif) = 1 – (6/8)^2 – (2/8)^2 = 1 – 0.5625 – 0.0625 = 0.375
Gini(Güçlü) = 1 – (3/6)^2 – (3/6)^2 = 1 – 0.25 – 0.25 = 0.5
Gini(Rüzgar) = (8/14) x 0.375 + (6/14) x 0.5 = 0.214 + 0.214 = 0.428
Hesapladığımız Gini metriklerini küçükten büyüğe sıralayacak olursak Gini(Görünüm) < Gini(Nem) < Gini(Rüzgar) < Gini(Sıcaklık) şeklinde oluştuğunu görebiliriz. Bu durumda kök düğüm için en küçük Gini değerine sahip özniteliği seçmemiz gerekmektedir. Görünüm özniteliği kök düğüm olarak seçilir. Kök olarak seçilen görünüm özniteliğinin 3 dalı bulunmaktadır. Güneşli, yağmurlu ve bulutlu dalları için tekrar Gini index değerleri hesaplanacaktır. Güneşli dallanması için görünüm özniteliğinde yalnızca güneşli bilgisini içeren verilerle çalışılacaktır.
Örnekleyecek olursak, Güneşli dallanması için:
Güneşli görünümün sıcaklık için gini indexi
Gini(Görünüm= Güneşli, Sıcaklık= Sıcak) = 1 – (2/2)2 – (0/2)2 = 0
Gini(Görünüm = Güneşli, Sıcaklık = Ilık) = 1 – (1/2)2 – (1/2)2 = 0.5
Gini(Görünüm = Güneşli, Sıcaklık = Serin) = 1 – (1/1)2 – (0/1)2 = 0
Gini(Görünüm = Güneşli, Sıcaklık) = (2/5) x 0 + (2/5) x 0.5 + (1/5) x 0 = 0.2
Aynı şekilde güneşli görünümün nem için gini indexi
Gini(Görünüm = Güneşli, Nem= Yüksek) = 1 – (3/3)2 – (0/3)2 = 0
Gini(Görünüm = Güneşli, Nem = Normal) = 1 – (2/2)2 – (0/2)2 = 0
Gini(Görünüm = Güneşli, Nem) = (3/5) x 0 + (2/5) x 0 = 0
Güneşli görünümün rüzgâr için gini indexi
Gini(Görünüm = Güneşli, Rüzgar = Weak) = 1 – (2/3)2 – (1/3)2 = 1 – 0.44 – 0.11 = 0.45
Gini(Görünüm = Güneşli, Rüzgar = Strong) = 1 – (1/2)2 – (1/2)2 = 1- 0.25 – 0.25 = 0.5
Gini(Görünüm = Güneşli, Rüzgar) = (3/5) x 0.45 + (2/5) x 0.5 = 0.27 + 0.2 = 0.47
Görünüm özniteliğinin güneşli dallanması için hesapladığımız Gini değerlerini küçükten büyüğe sıralayacak olursak Gini(Görünüm =Güneşli, Nem) < Gini(Görünüm = Güneşli, Sıcaklık) < Gini(Görünüm = Güneşli, Rüzgar) şeklinde oluştuğunu gözlemleyebiliriz. Nem en küçük gini değerine sahip olduğu için dallanmamıza nem ile devam edeceğiz. Nemi yüksek olan dal hayır yaprağı ile biterken, nemi düşük olan dal ise evet yaprağı ile bitecektir. Geriye kalan yağmurlu durumu için aynı işlemleri tekrarlayacağız. Genel olarak mantığın anlaşıldığını düşündüğüm için direkt gini indexlerinin hesaplanmış halini yazacağım. Eğer bu konuda bir sorunuz olursa yorum olarak yazabilirsiniz.
Yağmurlu görünüm için gini indexleri:
Gini(Görünüm= Yağmurlu, Sıcaklık) = (3/5) x 0.45 + (2/5) x 0.5 = 0.27 + 0.2 = 0.47
Gini(Görünüm = Yağmurlu, Nem) = (2/5) x 0.5 + (3/5) x 0.45 = 0.2 + 0.27 = 0.47
Gini(Görünüm = Yağmurlu, Rüzgar) = (3/5) x 0 + (2/5) x 0 = 0
Yağmurlu dallanması için gini indexlerinin küçükten büyüğe sıralanması Gini(Görünüm= Yağmurlu, Rüzgar) < Gini(Görünüm = Yağmurlu, Sıcaklı) = Gini(Görünüm = Yağmurlu, Nem) şeklindedir. Yağmurlu dallanması görüldüğü üzere en küçük Gini indexine sahip olan rüzgar ile devam edecek ve rüzgar durumu Normal olanlar Evet ile, rüzgar durumu güçlü olanlar hayır ile sonlanacaktır.
Karar ağaçlarıyla ilgili başka yazılar ilerleyen zamanlarda gelecek 🤓 Sorularınızı yorum olarak veya iletişim kısmından iletebilirisiniz.
Hoşçakalın
Kaynaklar:
[1] https://veribilimcisi.com/2018/02/23/karar-agaclari-decision-trees
Şekil 2: GitHub, visualize-decision-tree, https://github.com/bhattbhavesh91/visualize-decision-tree/blob/master/tennis.csv