Đến nội dung chính
Học máy

Decision Trees và Ensembles: từ một phép chia đến nhiều mô hình

Hiểu split, Gini impurity, overfitting và khác biệt giữa bagging với boosting qua một cây một tầng tự tính.

Mức giải thích

Cây quyết định mô tả một chuỗi câu hỏi để đi đến dự đoán. Bài viết dùng một đặc trưng số và nhãn tự tạo để tính split, rồi giải thích khi nào một cây cần được giới hạn hoặc kết hợp với các cây khác.

Mục tiêu học tập

  • Tính impurity và mức giảm impurity của một split.
  • Nhận biết overfitting và giới hạn diễn giải feature importance.
  • Phân biệt bagging, random forest và gradient boosting.

Dự đoán bằng chuỗi câu hỏi

Với đặc trưng số, split thường có dạng xj≤tx_j\le t. Training tìm đặc trưng j và ngưỡng t làm các nhóm con đồng nhất hơn về target. Lá phân loại có thể trả tần suất lớp; lá hồi quy có thể trả trung bình target.

Ngưỡng được tìm từ train. Dữ liệu thiếu, biến phân loại và đặc trưng chưa từng thấy cần cách xử lý phù hợp với implementation đang dùng.

Tính một split bằng Gini

Với tỷ lệ lớp pkp_k, Gini là G=1−∑kpk2G=1-\sum_k p_k^2. Điểm sau split là trung bình có trọng số theo số mẫu của Gini hai nhánh. Mức giảm bằng Gini cha trừ điểm sau split.

Ví dụ mã duyệt các trung điểm giữa giá trị x liên tiếp và chọn điểm nhỏ nhất. Đây là stump một tầng, không phải implementation đầy đủ của cây hoặc random forest.

Giới hạn cây trước khi kết luận

Các điều khiển phổ biến gồm max depth, minimum samples per leaf và cost-complexity pruning. Chọn chúng bằng validation hoặc cross-validation; test cuối không tham gia chọn cấu hình.

Theo dõi metric theo lớp và chi phí dự đoán, không chỉ accuracy train. Với nhiều dòng của cùng đối tượng, cần chia theo nhóm để tránh nhìn cùng đối tượng ở cả hai phía.

Bagging và boosting giải quyết gì?

Bagging học nhiều mô hình trên các mẫu bootstrap rồi gộp dự đoán. Random forest còn tạo khác biệt bằng chọn tập đặc trưng ngẫu nhiên ở split. Gradient boosting thêm mô hình tuần tự để cải thiện mục tiêu hiện tại; với squared loss, residual là hướng minh họa trực quan.

Learning rate, số cây và độ phức tạp cây ảnh hưởng boosting. So ensemble với cây đơn bằng cùng split và metric, đồng thời ghi chi phí suy luận.

Workflow & kiến trúc

01Chọn target và split dữ liệu
02Fit cây nhỏ
03Tuning độ sâu hoặc pruning
04So ensemble trên cùng protocol
05Kiểm tra lỗi và chi phí suy luận
Workflow minh họa · Các bước cần được điều chỉnh theo bài toán thực tế.

Ứng dụng & giới hạn

  • Baseline phi tuyến cho dữ liệu bảng.
  • Phân tích quy tắc và kiểm tra ensemble trước khi chọn mô hình triển khai.

Điểm mạnh

Cây nhỏ cho phép theo dõi đường dự đoán; ensemble có thể cải thiện độ ổn định hoặc chất lượng tùy bài toán.

Giới hạn cần nhớ

Cây sâu dễ overfit; ensemble không bảo đảm tốt hơn trên mọi dữ liệu. Impurity importance không phải bằng chứng nhân quả.

Thử trong một project nhỏ

LEARN BY DOING

Chạy mã và tính Gini của nhánh có một nhãn đối lập bằng tay. Đổi một nhãn để xem ngưỡng tốt nhất có thay đổi không. Viết protocol so sánh cây đơn với random forest mà không dùng test để tuning.

PYTHON · VÍ DỤ MINH HỌA
from collections import Counter

# Synthetic binary labels; this example builds only a one-level stump.
data = [(1.0, 0), (2.0, 0), (3.0, 1), (4.0, 1), (5.0, 1)]
def gini(labels):
    counts = Counter(labels)
    return 1.0 - sum((n / len(labels)) ** 2 for n in counts.values())

values = sorted({x for x, _ in data})
thresholds = [(a + b) / 2 for a, b in zip(values, values[1:])]
candidates = []
for threshold in thresholds:
    left = [y for x, y in data if x <= threshold]
    right = [y for x, y in data if x > threshold]
    score = (len(left) * gini(left) + len(right) * gini(right)) / len(data)
    candidates.append((score, threshold))
score, threshold = min(candidates)
gain = gini([y for _, y in data]) - score
assert threshold == 2.5 and abs(score) < 1e-12
print({"threshold": threshold, "weighted_gini": score, "gain": gain})

Python chuẩn; một phép chia trên nhãn tự tạo. Điểm Gini này là điểm fit của ví dụ, không phải accuracy hay kết quả benchmark.

Nguồn tham khảo

  1. Google — Decision trees
  2. scikit-learn — Decision trees
  3. scikit-learn — Ensembles
  4. scikit-learn — Permutation importance

KEEP EXPLORING

Đọc tiếp để nối các ý tưởng.