Cách điển hình để huấn luyện Cây quyết định (1 cấp) là tìm một thuộc tính như vậy mang lại sự phân chia thuần túy nhất. Tức là nếu chúng tôi chia tập dữ liệu của chúng tôi thành hai tập con, chúng tôi muốn các nhãn bên trong các tập hợp con này càng đồng nhất càng tốt. Vì vậy, nó cũng có thể được xem là xây dựng nhiều cây - một cây cho mỗi thuộc tính - và sau đó chọn cây tạo ra sự phân chia tốt nhất.
Trong một số trường hợp, cũng có ý nghĩa khi chọn một tập hợp con các thuộc tính và sau đó huấn luyện cây trên tập hợp con. Ví dụ, điều này được sử dụng trong Rừng ngẫu nhiên để giảm mối tương quan giữa các cây riêng lẻ.
Nhưng khi nói đến AdaBoost, thông thường là đủ để đảm bảo rằng trình phân loại cơ sở có thể được đào tạo về các điểm dữ liệu được cân nhắc và việc lựa chọn tính năng ngẫu nhiên ít quan trọng hơn. Cây quyết định có thể xử lý trọng lượng (xem ví dụ ở đây hoặc ở đây ). Nó có thể được thực hiện bằng cách đánh giá sự đóng góp của từng điểm dữ liệu vào tổng tạp chất của tập hợp con.
Để tham khảo, tôi cũng sẽ thêm triển khai AdaBoost của mình bằng python bằng cách sử dụng numpy và sklearnDecisionTreeClassifier
với 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)
Để dự đoán các nhãn:
# 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)