Karar ağaçları yetiştirme

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.

Bir koşul iki yaprakla sonuçlanıyor. Koşul "bill_length_mm >= 16"dır.
Yanıtınız evet ise, yaprak "Adelie veya Chinstrap" olur.  Yanıtınız hayırsa yaprak
"Gentoo".

Ş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:

Soru işaretli bir düğüm.

2. Adım: 1. düğümü büyütme. "x1 ≥ 1" koşulu bulundu. İki alt düğüm oluşturulur:

Kök düğüm
   ve tanımlanmamış iki düğüme yol açar.

3. Adım: 2. düğümü büyütün. Karşılayıcı koşul bulunamadı. Bu nedenle, düğümü bir yaprağına:

Kök
   iki tanımsız düğüme dayanıyor.

4. Adım: 3. düğümü büyütme. "x2 ≥ 0,5" koşulu bulundu. İki çocuk düğümler oluşturulur.

Kök düğüm,
durumu ve üç yaprak.

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.

YDF Kodu
YDF'de karar ağaçları "bölme ve fethetme" yaklaşımıyla büyütülür. algoritmasının varsayılan değerini kullanmaktır. Alternatif olarak, genel erişim 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.

YDF Kodu
YDF'de ayırıcılar otomatik olarak algılanan (veya (manuel olarak belirtilen) özelliğin türünü, hiperparametreleri ve tahmini hızı (ör. YDF, eğitim sırasında her bir bölücünün hızı) tahmin etmek için küçük bir model çalıştırır. hızına bağlı olarak değiştirilebilir).