Karar ağacı oluşturma

Bu ünitede YDF (Yggdrasil) karar ağacını eğitmek ve yorumlamak için kullanır.

Bu ünite 🧭 YDF Başlarken eğiticidir.

Hazırlıklar

Veri kümesini incelemeden önce aşağıdakileri yapın:

  1. Yeni bir Colab oluştur not defteri ekleyin.
  2. Aşağıdaki kod satırını yerleştirerek ve yürüterek YDF kitaplığını yükleyin yeni Colab not defterinizde:
    !pip install ydf -U
    
  3. Şu kitaplıkları içe aktarın:
    import ydf
    import numpy as np
    import pandas as pd
    

Palmer Penguins veri kümesi

Bu Colab için Palmer Penguins veri kümesinden üç adet boyut ölçümlerini içeren penguen türleri:

  • Kayışlı
  • Gentoo
  • Adelie

Bu bir sınıflandırma sorunudur. Amaç, bitki türlerini tahmin etmektir. verileri temel alınmıştır. Penguenler:

Üç farklı penguen
bulunur.

Şekil 16. Üç farklı penguen türü. Resmi gönderen: @allisonhorst

 

Aşağıdaki kod, pandalar işlevini kullanın:

path = "https://storage.googleapis.com/download.tensorflow.org/data/palmer_penguins/penguins.csv"
dataset = pd.read_csv(path)
label = "species"

# Display the first 3 examples.
dataset.head(3)

Aşağıdaki tablo, Palmer Penguins'deki ilk 3 örneği biçimlendirmektedir. veri kümesiyle aynı olan bir metrik içerir:

Tablo 3. Palmer Penguen'deki ilk 3 örnek ziyaret edin.

tür ada bill_length_mm bill_depth_mm flipper_length_mm body_mass_g seks yıl
0 Adelie Torgersen 39,1 18,7 181,0 3750,0 erkek 2007
1 Adelie Torgersen 39,5 17,4 186,0 3.800,0 kadın 2007
2 Adelie Torgersen 40,3 18,0 195,0 3250,0 kadın 2007

Tam veri kümesi sayısal değerlerin bir karışımını (örneğin, bill_depth_mm), kategorik (örneğin, island) ve eksik özellikler. Nöral yöntemden farklı olarak ağlarında, karar ormanları tüm bu özellik türlerini yerel olarak desteklemektedir. Böylece, tek kullanımlık kodlama, normalleştirme veya fazladan is_current özelliği yapması gerekmez.

Aşağıdaki kod hücresi, veri kümesini bir eğitim kümesine ve test ayar:

# Use the ~20% of the examples as the testing set
# and the remaining ~80% of the examples as the training set.
np.random.seed(1)
is_test = np.random.rand(len(dataset)) < 0.2

train_dataset = dataset[~is_test]
test_dataset = dataset[is_test]

print("Training examples: ", len(train_dataset))
# >> Training examples: 272

print("Testing examples: ", len(test_dataset))
# >> Testing examples: 72

Varsayılan hiperparametrelerle karar ağaçlarını eğitme

İlk karar ağacınızı CART ile (Sınıflandırma ve Regresyon Ağaçları) öğrenme algoritması (öğrenici olarak da bilinir) kullanabilirsiniz. Çünkü ydf.CartLearner öğrencisi, iyi bir varsayılan değer sağlar. hiperparametre değerleriyle uyumlu olmalıdır. Bu modelin işleyiş şekli hakkında daha fazla bilgi edineceksiniz. işleyeceğiz.

model = ydf.CartLearner(label=label).train(train_dataset)

Önceki çağrı, giriş özellikleri. Bu nedenle, eğitim veri kümesindeki her sütun kullanılır. Görüşme semantiği de belirtmedi (örneğin, sayısal, kategorik, metin) olduğunu düşünelim. Bu nedenle, özellik semantiği otomatik olarak tahmin edilir.

Sonuçta ortaya çıkan karar ağacını görüntülemek için model.plot_tree() öğesini çağırın:

model.plot_tree()

Colab'de belirli öğelerle ilgili ayrıntıları görüntülemek için fareyi kullanabilirsiniz. Örneğin, olarak ayarlayabilirsiniz.

Varsayılan olarak eğitilmiş bir karar ağacı
kullanabilirsiniz.

Şekil 17. Varsayılan hiperparametrelerle eğitilen bir karar ağacı. ziyaret edin.

Colab, kök koşulunun 243 örnek içerdiğini gösteriyor. Ancak, eğitim veri kümesinin 272 örnek içerdiğini unutmayın. Kalan 29 örnek, doğrulama ve ağaç budama işlemleri için otomatik olarak ayrılmıştır.

İlk koşul, bill_depth_mm değerini test eder. 4 ve 5. Tablo olasılığına bağlı olarak farklılık gösterebilir.

Tablo 4. bill_depth_mm ≥ 42.3 ise farklı türlerin görülme olasılığı 'nı inceleyin.

Tür Olasılık
Adelie (kırmızı) %8
Gentoo (mavi) %58
Kayış (yeşil) %36

 

Tablo 5. Aşağıdaki durumlarda farklı türlerin bulunma olasılığı bill_depth_mm < 42.3. 'nı inceleyin.

Tür Olasılık
Adelie (kırmızı) %97
Gentoo (mavi) %2
Kayış (yeşil) %0

bill_depth_mm sayısal bir özelliktir. Dolayısıyla, 42,3 değeri bulundu. sayısallarla ikili sınıflandırma için tam bölme kullanımı özellikler algoritmasıdır.

bill_depth_mm ≥ 42.3 Doğru ise flipper_length_mm ≥ 207.5, normal bir şekilde Gentoos ve Gentoos+Adelie'den.

Aşağıdaki kod, modelin eğitim ve test doğruluğunu sağlar:

train_evaluation = model.evaluate(train_dataset)
print("train accuracy:", train_evaluation.accuracy)
# >> train accuracy:  0.9338

test_evaluation = model.evaluate(test_dataset)
print("test accuracy:", test_evaluation.accuracy)
# >> test accuracy:  0.9167

Nadiren de olsa test doğruluğunun eğitime göre daha yüksek olması mümkündür emin olun. Bu durumda, test kümesi eğitim kümesinden farklı olabilir. Ancak bu, tren ve trenin test bölündü rastgele ekleyebilirsiniz. Bunun olası bir açıklaması da test veri kümesinin çok küçük olmasıdır (yalnızca 72 örnek) olduğundan doğruluk tahmini karışıktır.

Pratikte, böyle küçük bir veri kümesi için çapraz doğrulama daha doğru değerlendirme metriği değerleri hesapladığı için tercih edilir. Ancak bu örnekte, bir eğitime devam ediyoruz ve tek bir web sitesi için basitlik.

Model hiper parametrelerini iyileştirme

Model, varsayılan hiperparametre ile eğitilmiş tek bir karar ağacıdır değerler. Daha iyi tahminler almak için şunları yapabilirsiniz:

  1. Daha güçlü bir öğrenci kullanın, ör. rastgele orman veya gradyan renklendirilmiş ağaçlar modeli. Bu öğrenme algoritmaları bir sonraki sayfada açıklanacaktır.

  2. Gözlemlerinizi ve sezgilerinizi kullanarak hiperparametreyi optimize edin. İlgili içeriği oluşturmak için kullanılan model iyileştirme kılavuzu olabileceğini unutmayın.

  3. Hiperparametre ayarını kullanma otomatik olarak test etmek için kullanır.

Şimdiye kadar rastgele orman ve gradyan destekli ağaçları görmediğimiz için olduğundan, örnek sayısı otomatik bir dönüşüm işlemi yapamayacak kadar modeli manuel olarak iyileştirirsiniz.

Yukarıda gösterilen karar ağacı küçüktür ve 61 örnekli yaprak bir Adelie ve Chinstrap etiketlerinin bir karışımını içeriyor. Algoritma neden bu yaprağı bölmedi? devam edebilir? Bunun iki nedeni olabilir:

  • Yaprak başına minimum örnek sayısı (varsayılan olarak min_examples=5) olabilir sayısına ulaşıldı.
  • Ağaç, fazla bindirmeyi önlemek için bölünüp budanmış olabilir.

Minimum örnek sayısını 1'e düşürüp sonuçları inceleyin:

model = ydf.CartLearner(label=label, min_examples=1).train(train_dataset)
model.plot_tree()

Paydaşlarla eğitilmiş bir karar ağacı
min_examples=1 olarak ayarlanır.

Şekil 18. min_examples=1 ile eğitilen bir karar ağacı. ziyaret edin.

 

61 örnek içeren yaprak düğüm ayrıca, tekrar birden çok kez.

Düğümü daha fazla bölmenin değerli olup olmadığını görmek için şu yeni modeli test edin:

print(model.evaluate(test_dataset).accuracy)
# >> 0.97222

Modelin kalitesi, 0,9167'den 0,9167'ye uzanan bir test doğruluğuyla artmıştır. 0,97222. Hiperparametrede yapılan bu değişiklik iyi bir fikirdi.

Karar ormanlarında önceki

Hiperparametreleri iyileştirmeye devam ederek, normal koşullarda yalnızca emin olun. Ancak, bu manuel işlem yerine, daha güçlü bir daha iyi çalışıp çalışmadığına bakın.

model = ydf.RandomForestLearner(label=label).train(pandas_train_dataset)
print("Test accuracy: ", model.evaluate(pandas_test_dataset).accuracy)
# >> Test accuracy: 0.986111

Rastgele ormanın doğruluğu basit ağacımızdan daha iyidir. Bu kurstan sonra bunun nedenini sonraki sayfalarda öğreneceksiniz.

Kullanım ve sınırlama

Daha önce belirtildiği gibi, tek bir karar ağacının kalitesi genellikle modernden daha düşüktür rastgele ormanlar, gradyan destekli ağaçlar ve nöral ağlar. Ancak karar ağaçları aşağıdaki durumlarda yine de yararlıdır:

  • Daha karmaşık yaklaşımları değerlendirmek için basit ve ucuz bir temel olarak.
  • Model kalitesi ile yorumlanabilirlik arasında bir denge olması
  • Karar ormanları modelinin yorumlanmasına ilişkin bir gösterge olarak daha sonra ele alacağız.