(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)