Karar kütüğünü Adaboost'ta zayıf öğrenci olarak nasıl kullanabilirim?


12

Karar Güdük kullanarak Adaboost uygulamak istiyorum. Adaboost'un her yinelemesinde veri setimizin özellikleri kadar karar kütüğü yapmak doğru mu?

Örneğin, 24 özellikli bir veri kümem varsa, her yinelemede 24 karar kütüğü sınıflandırıcısı olmalı mı? Yoksa rastgele olarak bazı özellikleri seçmeli ve tüm özellikler yerine sınıflandırıcı yapmalı mıyım?

Yanıtlar:


12

(1 seviyeli) bir Karar Ağacı'nı eğitmenin tipik yolu, en saf bölünmeyi veren böyle bir özellik bulmaktır. Veri kümemizi iki alt kümeye ayırırsak, bu alt kümelerin içindeki etiketlerin olabildiğince homojen olmasını isteriz. Bu nedenle, birçok ağaç - her özellik için bir ağaç - ve daha sonra en iyi bölünmeyi üreten ağacı seçmek olarak da görülebilir.

Bazı durumlarda, özelliklerin bir alt kümesini seçmek ve daha sonra alt kümedeki ağaçları eğitmek de mantıklıdır. Örneğin, Rastgele Orman'da tek tek ağaçlar arasındaki korelasyonu azaltmak için kullanılır.

Ancak AdaBoost söz konusu olduğunda, temel sınıflandırıcının ağırlıklı veri noktalarında eğitilebildiğinden ve rastgele özellik seçiminin daha az önemli olduğundan emin olmak yeterlidir. Karar ağaçları ağırlıkları kaldırabilir (örneğin buraya veya buraya bakınız ). Her veri noktasının toplam alt küme kirliliğine katkısının ağırlıklandırılmasıyla yapılabilir.

Başvuru için ben de numpy ve kullanma piton benim AdaBoost uygulanmasını ekleyeceğiz sklearn 'sDecisionTreeClassifier ile max_depth=1:

# input: dataset X and labels y (in {+1, -1})
hypotheses = []
hypothesis_weights = []

N, _ = X.shape
d = np.ones(N) / N

for t in range(num_iterations):
    h = DecisionTreeClassifier(max_depth=1)

    h.fit(X, y, sample_weight=d)
    pred = h.predict(X)

    eps = d.dot(pred != y)
    alpha = (np.log(1 - eps) - np.log(eps)) / 2

    d = d * np.exp(- alpha * y * pred)
    d = d / d.sum()

    hypotheses.append(h)
    hypothesis_weights.append(alpha)

Etiketleri tahmin etmek için:

# X input, y output
y = np.zeros(N)
for (h, alpha) in zip(hypotheses, hypotheses_weight):
    y = y + alpha * h.predict(X)
y = np.sign(y)

Teşekkürler. Karar kütüğü maksimum derinlik 1 olan bir rpart (karar ağacı algoritması olarak) olarak mı kullanılıyor? Yani bir özelliği rastgele seçmeli miyim yoksa ağaç Gini Endeksi gibi belirli kriterlere göre bölünmeli mi? @AlexeyGrigorev
Pegah

Karar kütüğü = 1-kural = bir düğümü olan (maksimum derinlik 1 ile) bir karar ağacı. Bölmeyi bazı safsızlık ölçüsüne, örneğin Gini dizinine dayalı olarak seçmelisiniz.
Alexey Grigorev

Bu ayrıntılı cevap için teşekkürler!
xsari3x
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.