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:
- Yeni bir Colab oluştur not defteri ekleyin.
- 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
- Ş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:
Ş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.
Ş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:
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.
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.
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()
Ş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.