Karar ağaçlarının oluşturulması bağlamında entropiden bahsedildiğini düşünüyorum .
Göstermek için, görevini hayal öğrenme için sınıflandırmak erkek / kadın gruba ilk isimler. Buna her biri ile etiketlenmiş isimlerin bir listesi verilir m
veya verilere uyan ve görünmeyen yeni bir adın cinsiyetini tahmin etmek için kullanılabilecek f
bir model öğrenmek istiyoruz .
name gender
----------------- Now we want to predict
Ashley f the gender of "Amro" (my name)
Brian m
Caroline f
David m
İlk adım, verilerin hangi özelliklerinin tahmin etmek istediğimiz hedef sınıfla alakalı olduğuna karar vermektir . Bazı örnek özellikler şunlardır: ilk / son harf, uzunluk, sesli harf sayısı, bir sesli harfle biter, vb. Yani özellik çıkarıldıktan sonra verilerimiz şöyle görünür:
# name ends-vowel num-vowels length gender
# ------------------------------------------------
Ashley 1 3 6 f
Brian 0 2 5 m
Caroline 1 4 8 f
David 0 2 5 m
Amaç bir karar ağacı oluşturmaktır . Bir ağaca örnek olarak şunlar verilebilir:
length<7
| num-vowels<3: male
| num-vowels>=3
| | ends-vowel=1: female
| | ends-vowel=0: male
length>=7
| length=5: male
temel olarak her düğüm tek bir öznitelik üzerinde yapılan bir testi temsil eder ve testin sonucuna bağlı olarak sola veya sağa gideriz. Sınıf tahminini içeren bir yaprak düğümüne ulaşıncaya kadar ağacı hareket ettirmeye devam ediyoruz ( m
veya f
)
Bu yüzden Amro ismini bu ağaçta çalıştırırsak, " uzunluk <7? " Yi test ederek başlıyoruz ve cevap evet , bu yüzden o daldan aşağı gidiyoruz. Daldan sonra, bir sonraki test " sesli harf sayısı <3? " Olarak tekrar doğru olarak değerlendirilir . Bu, etiketli bir yaprak düğümüne yol açar m
ve bu nedenle tahmin erkektir (ki ben öyle olurum, böylece ağaç sonucu doğru şekilde tahmin etti ).
Karar ağacı yukarıdan aşağıya bir şekilde oluşturulmuştur , ancak soru, her bir düğümde hangi özniteliğin bölüneceğini nasıl seçeceğinizdir? Yanıt, hedef sınıfı mümkün olan en saf çocuk düğümlerine en iyi şekilde ayıran özelliği bulmaktır (yani: hem erkek hem de kadın, daha ziyade sadece bir sınıfla saf düğümlerin bir karışımını içermeyen düğümler).
Bu saflık ölçüsüne bilgi denir . Bu temsil beklenen miktarını bilgi düğümünü ulaştı örnek verilen yeni bir örneği (ilk ad) erkek veya kadın sınıflandırılmalıdır belirtmek için gerekli olacaktır. Düğümdeki erkek ve kadın sınıflarının sayısına göre hesaplıyoruz.
Öte yandan entropi , safsızlığın bir ölçüsüdür(tam tersi). Bu bir için tanımlanan ikili sınıfın değerlerlea
/b
gibidir:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
Bu ikili entropi fonksiyonu aşağıdaki şekilde gösterilmiştir (rastgele değişken iki değerden birini alabilir). Olasılık, maksimuma ulaşır p=1/2
, yani p(X=a)=0.5
ya da benzer p(X=b)=0.5
şekilde ya a
da % 50 /% 50 olma şansına sahip olmak ya da b
(belirsizlik maksimumdur). Olasılık fonksiyonu, olasılık olduğunda p=1
veya p=0
tam bir kesinlik ile ( p(X=a)=1
veya p(X=a)=0
sırasıyla, ikinci ima p(X=b)=1
) sıfırdır .
Tabii ki entropinin tanımı, N sonucu olan ayrı bir rastgele değişken X için genelleştirilebilir (sadece iki değil):
( log
formüldeki in genellikle tabana 2 logaritması olarak alınır )
İsim sınıflandırma görevimize geri dönelim, bir örneğe bakalım. Ağacı inşa etme sürecinde bir noktada hayal edin, aşağıdaki ayrımı düşünüyoruz:
ends-vowel
[9m,5f] <--- the [..,..] notation represents the class
/ \ distribution of instances that reached a node
=1 =0
------- -------
[3m,4f] [6m,1f]
Gördüğünüz gibi, ayrılmadan önce 9 erkek ve 5 kadın vardı, yani P(m)=9/14
ve P(f)=5/14
. Entropinin tanımına göre:
Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403
Sonra, iki çocuk koluna bakarak bölünmeyi düşündükten sonra hesaplanan entropi ile karşılaştırıyoruz. Sol dalında ends-vowel=1
:
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852
ve doğru şubesi ends-vowel=0
var:
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917
Sol / sağ entropileri her faktörün altındaki örnek sayısını ağırlık faktörü olarak birleştiriyoruz (7 örnek sola gitti ve 7 örnek sağa gitti) ve bölünmeden sonra son entropiyi elde ettik:
Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885
Şimdi, bölünmeden önce ve sonra entropiyi karşılaştırarak, belirli bir özelliği kullanarak bölünmeyi yaparak bir miktar bilgi kazanımı veya ne kadar bilgi elde ettiğimizi elde ederiz:
Information_Gain = Entropy_before - Entropy_after = 0.1518
Yukarıdaki hesaplamayı aşağıdaki gibi yorumlayabilirsiniz: end-vowels
özellik ile bölünmeyi yaparak, alt ağaç tahmin sonucundaki belirsizliği az miktarda 0.1518 ( bit olarak bilgi birimi olarak ölçülür) azaltabiliyoruz .
Ağacın her bir düğümünde, bu hesaplama her özellik için gerçekleştirilir ve en büyük bilgi kazanımına sahip özellik, açgözlü bir şekilde bölünme için seçilir (böylece düşük belirsizlik / entropi ile saf bölünmeler üreten özellikleri tercih eder ). Bu işlem kök düğümden aşağıya yinelemeli olarak uygulanır ve bir yaprak düğümü hepsi aynı sınıfa sahip örnekler içerdiğinde durur (daha fazla bölmeye gerek yoktur).
Sayısal özelliklerin , eksik değerlerin , overfit ve budama ağaçlarının vb. Nasıl ele alınacağı da dahil olmak üzere bu yazının kapsamı dışında kalan bazı ayrıntıları atladığımı unutmayın .