Tüm gözetimli makine öğrenimi modellerinde olduğu gibi karar ağaçları da eğitim örneklerini açıklayacağım. Karar ağacı için en ideal eğitim, problemi çözebilir. Bu nedenle, eğitim genellikle buluşsal yöntemler kullanılarak yapılır. ideal olmayan ancak çok yakın bir değer sağlayan, kolayca oluşturulabilen bir öğrenme algoritması karar ağacı var.
Karar ağaçlarını eğitmek için kullanılan çoğu algoritma, açgözlü bir bölme ile stratejimizdir. Algoritma, tek bir düğüm (kök) oluşturarak başlar ve yinelemeli bir şekilde karar ağacını büyütür.
Her düğümde olası tüm koşullar değerlendirilir ve puanlanır. İlgili içeriği oluşturmak için kullanılan "en iyi"yi seçer koşul, yani en yüksek puanı. Şimdilik, puanın bu metrikle ilişkili olan bir metrik ilgili metriğin en üst düzeye çıkarılması için seçilmesidir.
Örneğin, Palmer Penguenler veri kümesi (bu kursun ilerleyen bölümlerinde kod örnekleri için kullanılır), çoğu Adelie ve Chinstrap penguenlerin fatura uzunluğu 16 mm'den fazlayken Gentoo'nun büyük bir kısmında penguenlerin faturaları daha küçüktür. Bu nedenle, bill_length_mm ≥ 16, minimum dönüşüm değeri için Gentoo penguenleri var ama ayırt edemiyorlar Adelies ile Chinstraps arasında. Algoritma muhtemelen bu koşulu seçer.
Şekil 7. Ağaç yetiştirmenin ilk adımı. ziyaret edin.
Daha sonra algoritma her iki alt düğümde de yinelemeli ve bağımsız olarak tekrar eder. Uygun koşullar bulunmazsa düğüm bir yaprak haline gelir. Yaprak tahmin, örneklerde en iyi temsil eden etiket değeri olarak belirlenmiştir.
Algoritma şu şekildedir:
def train_decision_tree(training_examples):
root = create_root() # Create a decision tree with a single empty root.
grow_tree(root, training_examples) # Grow the root node.
return root
def grow_tree(node, examples):
condition = find_best_condition(examples) # Find the best condition.
if condition is None:
# No satisfying conditions were found, therefore the grow of the branch stops.
set_leaf_prediction(node, examples)
return
# Create two childrens for the node.
positive_child, negative_child = split_node(node, condition)
# List the training examples used by each children.
negative_examples = [example for example in examples if not condition(example)]
positive_examples = [example for example in examples if condition(example)]
# Continue the growth of the children.
grow_tree(negative_child, negative_examples)
grow_tree(positive_child, positive_examples)
Şimdi de karar verme ağacını eğitme adımlarının üzerinden geçelim. ele alacağız.
1. Adım: Kök oluşturun:
2. Adım: 1. düğümü büyütme. "x1 ≥ 1" koşulu bulundu. İki alt düğüm oluşturulur:
3. Adım: 2. düğümü büyütün. Karşılayıcı koşul bulunamadı. Bu nedenle, düğümü bir yaprağına:
4. Adım: 3. düğümü büyütme. "x2 ≥ 0,5" koşulu bulundu. İki çocuk düğümler oluşturulur.
Karar ağaçlarını büyütmek için başka yöntemler de vardır. Popüler alternatiflerden biri bölme ve fethet stratejisi yerine düğümleri küresel olarak optimize etme.
growing_strategy="BEST_FIRST_GLOBAL"
parametresiyle büyümeyi sağlar.
Bkz.
belgeleri inceleyin.
Giriş özelliklerinin sayısına ve türüne bağlı olarak, bir düğüm için olası koşullar çok büyük ve genellikle sonsuz olabilir. Örneğin, $\mathrm{feature}_i \geq t$ eşik koşulu verildiğinde, tüm bu unsurların mümkün eşik değerleri $t \in \mathbb{R}$ sonsuzdur.
En iyi durumu bulmaktan sorumlu rutine splitter değerleridir. Birçok olası koşulu test etmesi gerektiğinden, ayırıcılar zorluk yaşarsınız.
Bölücü tarafından maksimize edilen puan, göreve bağlıdır. Örneğin:
- Bilgi kazancı ve Gini (her ikisi de sonradan bahsedilir) genellikle sınıflandırma için kullanılır.
- Ortalama karesel hata, regresyon için yaygın olarak kullanılır.
Her biri farklı öğeleri destekleyen çok sayıda ayırıcı algoritma vardır:
- Özelliklerin türü; örneğin, sayısal, kategorik, metin
- Görev; ör. ikili sınıflandırma, çok sınıflı sınıflandırma, regresyon
- Koşulun türü; eşik koşulu, belirlenen koşul, eğik koşul
- Normalleştirme kriterleri; örneğin, tam veya yaklaşık ayırıcılar eşik koşulları için
Ayrıca, farklı dengelere sahip eşdeğer ayırıcı varyantları da vardır. ve daha pek çok konuda yaygın bir şekilde kullanılabilir.