"Đ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.
Bạn đang xem: Ensemble là gì
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 (https://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 Bagging: 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 (random sample trong 1 dataset để tạo 1 dataset mới). 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.Boosting: Xây dựng một lượng lớn các model (thường là cùng loại). Mỗi model sau sẽ học cách sửa những errors của model trước (dữ liệu mà model trước dự đoán sai) -> 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

Tương ứng với L bộ dữ liệu là L model "yếu".
w1(.),w2(.),...,wL(.)\begin{aligned}w_1(.), w_2(.), ..., w_L(.)\end{aligned}w1(.),w2(.),...,wL(.)
Kết hợp các model này lại, ta được một model mới mạnh hơn. Với những vấn đề khác nhau, như regression, đầu ra của các model "yếu" sẽ được trung bình cộng, kết quả này sẽ là đầu ra của model "mạnh". Còn với classification, class đầu ra của mỗi một model "yếu" sẽ được coi là 1 vote và class mà nhận được số vote nhiều nhất sẽ là đầu ra của model "mạnh" (cách này gọi là hard-voting). Trong trường hợp model "yếu" dự đoán xác suất của tất cả class thì ta sẽ tính trung bình cộng của xác suất của từng class rồi lấy xác suất có giá trị lớn nhất (cách này gọi là soft-voting).

Cuối cùng, để chốt phần lý thuyết và sang phần code, tôi sẽ chỉ ra một trong những lợi ích mà bagging mang lại, đó là tính song song. Như hình dưới, bạn sẽ thấy phần core của bagging đều là tiến trình song song nên nếu bạn có con máy khỏe, bạn có thể train từng model song song với nhau và cuối cùng tổng hợp đầu ra của các model này lại.

Code of Bagging
Thật may cho chúng ta, thư viện sklearn đã hỗ trợ mọi thứ đến tận răng

Tôi sẽ kết thúc phần 1 bài viết ở đây, phần 2 sẽ tập trung vào boosting và stacking. Nếu có gì sai sót thì hãy góp ý nhé. Bài viết trên dựa trên ý hiểu của tôi và có một phần dịch lại sau khi tham khảo một cơ số bài viết trên medium, blog, v.v... Nếu bạn muốn có cái nhìn tổng quan hơn thì nên tham khảo thêm các link dưới đây.
Source
https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205