Hướng dẫn bagging decision tree python

I. Khái niệm

"Đoàn kết là sức mạnh". Tôi không biết câu này xuất hiện ở đâu khi nào nhưng nó lại khái quát ý tưởng của phương thức Ensemble trong Machine Learning.

Lấy ví dụ thế này, bạn có 1 model nhưng đầu ra của model đó không tốt nên bạn thử các model khác. Sau khi tìm được model ưng ý và "có lẽ chính xác", bạn lại phải chỉnh chỉnh sửa sửa từ thuật toán đến hyperparameter để mô hình đạt độ chính xác cao nhất. Tất cả những việc kể trên sẽ ngốn của bạn một đống thời gian bởi bạn phải chạy từng model một, thế nên để nhanh hơn bạn kết hợp những model "học yếu" này lại để tạo ra một model "học mạnh" hơn, không những thế kết quả thu được cũng tốt hơn so với từng model một.

Để hiểu sâu thêm, chúng ta sẽ làm rõ khái niệm mô hình "yếu" và "mạnh".

Khi làm các bài toán về phân loại [classification] hay hồi quy [regression], chắc ai cũng biết phần quan trọng nhất là lựa chọn model. Việc chọn này phụ thuộc nhiều yếu tố: số lượng data, đặc điểm data [số chiều, phân phối], v.v...Từ đó ta sẽ có tương quan giữa data và model [bias-variance tradeoff] aka [mối quan hệ đánh đổi giữa bias và variance]. Ok, tôi sẽ không đi chi tiết khái niệm này bởi nó cũng ngốn kha khá thời gian, các bạn có thể tham khảo ở đây [//forum.machinelearningcoban.com/t/moi-quan-he-danh-doi-giua-bias-va-variance/4173].

Nói chung là không có một model nào hoàn hảo khi đi riêng lẻ bởi quy tắc tradeoff trên, các model này có điểm yếu rõ rệt như có cái bị high bias [model dự đoán sai so với giá trị thực tế rất nhiều] hay có cái bị high variance [đoán đúng trên bộ dữ liệu train nhưng tạch với bộ dữ liệu chưa gặp bao giờ], nên chúng đều bị gọi là "yếu". Vậy tại sao ta không kết hợp các model "yếu" để tạo ra một model "mạnh" đúng với câu " 3 cây chụm lại nên hòn núi cao" để giảm bias / variance.

II. Kết hợp các model "yếu" như thế lào ???

Ok, tóm lại là tôi có một đống model "yếu" và tôi muốn kết hợp thành một model "mạnh", hiệu quả hơn. Vậy tôi phải follow các bước sau:

First, chọn model sẽ làm base model cho cả thuật toán. Thường thì một model sẽ được chọn ra [ví dụ là Decision Tree], ta lại cần nhiều mô hình "yếu" nên ta phải tăng số lượng model cần dùng lên => ta có n model Decision Tree tạo thành một chuỗi các model mà model sau sẽ tốt hơn model trước bởi trọng số được update qua mỗi model [cụ thể ở đây là trọng số của những dữ liệu dự đoán đúng sẽ không đổi, còn trọng số của những dữ liệu dự đoán sai sẽ được tăng thêm] . Chúng ta sẽ lấy kết quả của model cuối cùng trong chuỗi model này làm kết quả trả về [vì model sau sẽ tốt hơn model trước nên tương tự kết quả sau cũng sẽ tốt hơn kết quả trước].

  • Stacking: Xây dựng một số model [thường là khác loại] và một meta model [supervisor model], train những model này độc lập, sau đó meta model sẽ học cách kết hợp kết quả dự báo của một số mô hình một cách tốt nhất.
  • Trong 3 biến thể trên thì Bagging giúp ensemble model giảm variance. Còn Boosting và Stacking tập trung vào việc giảm bias [cũng giảm cả variance].

    Tiếp theo đó, tôi sẽ giới thiệu chi tiết hơn về Bagging, còn Boosting và Stacking thì trong phần tiếp theo

    III. Tập trung vào Bagging

    Nhắc lại một lần nữa, với Bagging, chúng ta xây dựng một lượng lớn các model [thường là cùng loại] trên những subsamples khác nhau từ tập training dataset. Những model này sẽ được train độc lập và song song với nhau nhưng đầu ra của chúng sẽ được trung bình cộng để cho ra kết quả cuối cùng.

    Bootstrapping

    Đây là một kỹ thuật thống kê từ 1 bộ dữ liệu N sinh ra B bộ dữ liệu mới [bootstrap samples] [thường có kích thước với bộ dữ liệu ban đầu]. Mình sẽ không đi sâu vào kỹ thuật này vì thời lượng có hạn [chung quy là lười

    ]. Dưới đây là một ví dụ ngắn về kỹ thuật này, áp dụng trên bộ dữ liệu Sonar:

    # dataset: bộ dữ liệu ban đầu
    # ratio: kích thước của bộ dữ liệu mới được quyết định theo %
    def subsample[dataset, ratio=1.0]:
    	sample = list[]
    	n_sample = round[len[dataset] * ratio]
    	while len[sample] 

    Chủ Đề