Karar Ağaçlarında Öznitelik Önem Sıralaması

0 1.864

Karar ağaçları doğası gereği açıklanabilen algoritmalardır. Transparanlığın ötesinde özniteliklere ait önem sıralaması (feature importance) yapay öğrenme ve makine öğreniminde geliştirilmiş modellerin anlaşılması için kullanılan yaygın bir yöntemdir. Hatırlayacağınız üzere lineer regresyon denklemindeki katsayılar doğrudan olmamakla birlikte hangi öznitelik daha önemli olduğu hakkında ipuçları içermekteydi. Ancak lineer regresyon ile lineer problemleri modelleyebileceğimizden günlük hayatta baş etmek durumunda kaldığımız türden doğrusal olmayan problemler karşısında algoritmanın çokça söyleceği bir şey olmuyordu. Öte yandan kendisi bir non-lineer model olan karar ağaçlarından hesaplanacak özniteliklerin önem sırası verilen kararı anlamanın ötesinde doğrusal olmayan modelleri anlamamızı da sağlamaktadır.

Özniteliklerin önem sıralaması (Chris Albon)

Karar ağacının yaratılması

Aşağıda paylaşılan veri seti için bir karar ağacı inşa edeceğiz. Veri madenciliği derslerinde çokça gördüğünüz hava, sıcaklık, nem ve rüzgar özniteliklerine göre golf oynama kararlarını içeren ufak bir veri seti.

Hava Durumu Sıcaklık Nem Rüzgar Karar
1 1 1 1 Hayır
1 1 1 2 Hayır
2 1 1 1 Evet
3 2 1 1 Evet
3 3 2 1 Evet
3 3 2 2 Hayır
2 3 2 2 Evet
1 2 1 1 Hayır
1 3 2 1 Evet
3 2 2 1 Evet
1 2 2 2 Evet
2 2 1 2 Evet
2 1 2 1 Evet
3 2 1 2 Hayır

 

Kullanacağınız karar ağacı algoritmasına göre farklı metrikler uygulanarak karar kurallarının çıkarılması gerekiyor. Örneğin CHAID kullanarak bir karar ağacı kuracaksanız chi-square, ID3 ve C4.5 kullanacaksanız entropi, CART kullanacaksanız GINI indeks kullanmanız gerekecek. Paylaştığım linkler üzerinden bu algoritmalar ile adım adım karar ağaçları nasıl kurulur inceleyebilirsiniz. Bu yazıda bu adımı atlayarak doğrudan inşa edilmiş karar ağacı üzerinden konuşacağız.

Karar ağacı C4.5 ile inşa edildiği için her bir karar noktasında özniteliğe ait entropi değerini ve eğitim setinde o koşulu sağlayan kaç örneğin olduğunu not edilmiş.

 

C4.5 Karar Ağacı

Karar ağacından kuralların çıkarılması

İnşa edilmiş karar ağacındaki her bir karar noktasını basit bir eğer cümlesi ile ifade etmemiz münkün. Bu yazılımcıların daha kolay okuyabileceği bir gösterim. Python Chefboost paketini kullanarak veri setini eğer cümlelerinden oluşan bir karar ağacına bir kaç satır kod ile dönüştürebiliyoruz.

Öznitelik önem sıralaması formülü

Her bir özniteliğin ne kadar önemli olduğunu hesaplamak için karar noktasının kendisine ve o karar noktasından türemiş alt düğümlerine (child node) bakacağız. C4.5 yerine CART algoritmasını kullanıyor olsaydık formülde entropi yerine GINI indeks kullanmamız gerekecekti.

Özniteliğin önemi = karar noktasına ait entropi * sağlayan örnek sayısı – sol alt düğüme ait entropi * sol alt düğümde sağlanan örnek sayısı – sağ alt düğüme ait entropi * sağ alt düğümde sağlanan örnek sayısı

Bazı kaynaklar bu formülü farklı bir gösterimle ifade etmektedir ancak hesaplamanın sonunda normalize edilmiş değerlerde ikisi de aynı sonucu vermektedir.

Burada dikkat edilmesi gereken husus bir öznitelik karar ağacında birden fazla yerde karar noktası olarak bulunabilir. Örneğin hava durumu 2. ve 3. seviyede olacak şekilde 2 defa yer almış. Bu durumda her iki karar noktası için yukarıdaki formülü uygulayıp toplamı hava durumuna ait önem değeri olacak.

Bundan sonrasında Öznitelik Önemi için ÖÖ kısaltmasını kullanacağız.

Karar Ağacının 1. Seviyesi

ÖÖ(Nem | 1. seviye) = 14x 0.940 – 7×0.985 – 7×0.591 = 2.121

Karar Ağacının 2. Seviyesi

ÖÖ(Hava Durumu|2. seviye) = 7×0.985 – 4×0.811 = 3.651

ÖÖ(Rüzgar|2. seviye) = 7×0.591 – 3×0.918 = 1.390

Görüldüğü üzere 2. seviyedeki hava durumu ve rüzgar karar noktalarının sağ alt düğümleri doğrudan kararı simgelemektedir. Doğrudan kararı simgeleyen yerlere ait entropi değerleri 0 olduğu için sağ alt düğüme ait bir hesap bulunmamaktadır.

Karar Ağacının 3. Seviyesi

ÖÖ(Rüzgar| 3. seviye) = 4×0.811 = 3.244

ÖÖ(Hava Durumu|3.seviye) = 3×0.918 = 2.754

Sonuçlar

ÖÖ(Nem) = ÖÖ(Nem|1.seviye) = 2.121

ÖÖ(Hava Durumu) = ÖÖ(Hava Durumu|2. seviye) + ÖÖ(Hava Durumu|3.seviye) = 3.651 + 2.754 = 6.405

ÖÖ(Rüzgar) = ÖÖ(Rüzgar|2. seviye) + ÖÖ(Rüzgar|3.seviye) = 1.390 + 3.244 = 4.634

Normalizasyon

Özniteliklere ait önem değerlerinin toplamına bölersek toplamları 1 olacak şekilde normalize etmiş oluruz. Bu yüzdesel olarak ifade için de daha anlaşılır olacaktır.

ÖÖ(Toplam) = ÖÖ(Nem) + ÖÖ(Hava Durumu) + ÖÖ(Rüzgar)  = 2.121 + 6.405 + 4.634 = 13.16

ÖÖ(Nem)’ = ÖÖ(Nem) / ÖÖ(Toplam) = 2.121 / 13.16 = 0.16

ÖÖ(Hava Durumu)’ = ÖÖ(Hava Durumu) / ÖÖ(Toplam) = 6.405 / 13.16 = 0.48

ÖÖ(Rüzgar)’ = ÖÖ(Rüzgar) / ÖÖ(Toplam) = 4.634 / 13.16 = 0.35

Dolayısıyla hava durumu en önemli özniteliğiymizken ardından rüzgar sonra da nem gelmektedir.

Özniteliklerin Önemi

Bagging ve Boosting

Özniteliklerin önem sırasını tek bir karar ağacı üzerinde gösterdik. Peki rastgele ormanlar ya da GBM kullanıyor olsaydık? Her ikisinde de birden fazla karar ağacı arka planda oluşturulmaktadır. Dolayısıyla her bir ağacın öznitelik önemlerinin toplamları bize global öznitelik önemini verecektir.

Çoklu ağaçlar

Bu yazıda karar ağaçları kullanarak elle nasıl özniteliklerin önemini çıkarabileceğimizi inceledik. Gördüğünüz gibi karar ağaçları kullanarak dizayn ettiğimiz yapılarda alınan karar ve aksiyonları okuyup anlayabiliyorken öznitelik önemini çıkararak büyük resmi de okuyup anlayabiliyor hale geliyoruz.

Son olarak Python Chefboost paketi ile aşağıdaki şekilde bir kaç satır kod ile öznitelik önemini çıkarabiliyoruz.

Bu yazı Feature Importance in Decision Trees yazısından Türkçe’ye çevrilmiştir.

Email adresiniz yayınlanmayacaktır.