
Dùng để làm gì? AdaBoost là một thuật toán boosting dùng để xây dựng bộ phân lớp (classifier).
Như chúng ta đã biết, một classifier nhận vào một tập dữ liệu để học và cố gắng dự đoán hay phân lớp mẫu dữ liệu mới thuộc về phân lớp nào.
Boosting là gì? boosting là thuật toán học quần thể bằng cách xây dựng nhiều thuật toán học cùng lúc (ví dụ như cây quyết định) và kết hợp chúng lại. Mục đích là để có một cụm hoặc một nhóm các weak learner sau đó kết hợp chúng lại để tạo ra một strong learner duy nhất.
Sự khác nhau giữa strong và weak leaner là gì? weak learner phân loại với độ chính xác hầu như không cao. Một ví dụ phổ biến của weak learner là cây quyết định một cấp (decision stump). Ngược lại, strong leaner có độ chính xác cao hơn nhiều.
Ví dụ của AdaBoost là gì? bắt đầu với 3 weak learners. Ta sẽ training chúng 10 hiệp trên tập dữ liệu bệnh nhân. Tập dữ liệu này chứa thông tin chi tiết về hồ sơ y tế của bệnh nhân.
Câu hỏi đặt ra là, làm thế nào ta có thể dự đoán người bệnh có bị ung thư hay không? Đây là câu trả lời của AdaBoost.
Trong hiệp 1: AdaBoost lấy mẫu trên tập huấn luyện và kiểm tra độ chính xác của mỗi learner là bao nhiêu. Kết quả cuối cùng trả về là learner có độ chính xác cao nhất.
Ngoài ra, các mẫu dữ liệu bị phân loại sai sẽ được đánh trọng số lớn để có cơ hội cao hơn trong việc lấy mẫu ở hiệp tiếp theo.
Một điều nữa, learner tốt nhất cũng được đánh trọng số dựa vào độ chính xác và sự kết hợp của nó vào toàn bộ các learner (hiện tại chỉ có 1 learner).
Trong hiệp 2: AdaBoost một lần nữa cố gắng tìm được learner có độ chính xác cao nhất.
Điểm đáng lưu ý ở đây đó là mẫu dữ liệu của tập huấn luyện hiện đang bị ảnh hưởng nhiều hơn bởi các trọng số phân lớp sai (misclassified weights). Nói cách khác, bệnh nhân bị phân lớp sai trước đó sẽ có cơ hội cao hơn để xuất hiện ở lượt tiếp theo.
Tại sao? giống như bước sang level 2 của video game, ta không phải bắt đầu lại từ đầu khi nhân vật của mình bị chết. Thay vào đó, ta bắt đầu ở level 2 và tập trung mọi nỗ lực để tiến đến level 3.
Tương tự như vậy, learner đầu tiên có khả năng phân loại một nhóm bệnh nhân chính xác. Thay vì cố gắng phân lớp những bệnh nhân này một lần nữa, ta sẽ tập trung mọi nỗ lực vào phân lớp các bệnh nhân bị phân lớp sai (misclassified patients).
Learner tốt nhất một lần nữa được đánh trọng số và tích hợp vào quần thể classifier, bệnh nhân bị phân lớp sai được đánh trọng số để họ có cơ hội cao hơn trong việc lấy mẫu tiếp theo.
Sau 10 hiệp: ta còn lại một quần thể các learner được đánh trọng số sau nhiều lần được huấn luyện lặp đi lặp lại ở các hiệp trước trên các mẫu dữ liệu bị phân lớp sai.
Tại sao sử dụng AdaBoost? đây là thuật toán đơn giản và dễ dàng cài đặt. Thêm vào đó, tốc độ học rất nhanh. Các weak learner đơn giản hơn rất nhiều các strong learner, nhờ vậy thuật toán chạy nhanh hơn.
Một điều nữa, AdaBoost là phương pháp có khả năng điều chỉnh các classifier rất tinh tế. Vì mỗi hiệp AdaBoost lại tinh chỉnh lại các trọng số cho các learner tốt nhất. Điều bạn cần làm đó là xác định số hiệp để lặp.
Cuối cùng, đây là thuật toán linh hoạt và đa năng. AdaBoost có thể kết hợp với bất kỳ thuật toán học máy nào và nó có thể làm việc với một lượng lớn dữ liệu khác nhau.
Nó được sử dụng ở đâu? AdaBoost có nhiều cách cài đặt và biến thể. Dưới đây là một vài ví dụ:
Adaboost algorithm
Cho tập dữ liệu được gán nhãn , trong đó
. Phân phối (distribution) vòng lặp thứ
là
với
là phân phối đều. Và base classifier
được chọn để minimize độ lỗi trên tập huấn luyện được tính lại trọng số (re-weighted) như sau:
là thừa số để chuẩn hoá sao cho tổng các trọng số trên phân phối
bằng 1.
ADABOOST(S=((), ..., (
))) for
to
do
for
to
do
base classifier in
with small error
![]()
![]()
for
to
do
![]()
return
Nguồn tham khảo:
Em chào anh,
Adaboost là một thuật toán riêng biệt với J4.8 hay là một hiệu ứng thêm vào sau khi mình thực hiện J4.8 ạ?
Nếu thực hiện trên weka thì em sẽ thực hiện adaboost thế nào ạ?
Em cám ơn anh nhiều.
ThíchThích
Hi em,
Adaboost là thuật toán cải thiện cho các mô hình phân lớp như Decission Tree (J4.8) hay SVM, …
Em có thể tham khảo tutorial này http://machinelearningmastery.com/use-ensemble-machine-learning-algorithms-weka/
ThíchThích
Em hỏi thêm về cách xem kết quả để xác định kích thước cây và số lá cuối cùng của mô hình Adaboost được không ạ?
Em cám ơn anh.
ThíchThích
anh ơi cho em hỏi là việc phát sinh cây dựa trên nguyên tắc gì vậy a ? Ví dụ như mình có các thuộc tính: thời tiết, gió…. thì việc phát sinh các cây yếu dựa vào nguyên tắc gì a?
Thank a.
ThíchThích
anh vừa cập nhật thêm thuật toán Adaboost. Việc phát sinh cây diễn ra bình thường, chỉ có điều các điểm dữ liệu đã được cập nhật lại trọng số nên mỗi lần lặp sẽ cho ra các cây khác nhau, mỗi cây này khi hợp lại sẽ cố gắng tối tiểu hoá độ lỗi huấn luyện.
ThíchThích