Chuyển đến nội dung chính

Boosting là gì?

Boosting cải thiện hiệu năng machine learning bằng cách tuần tự sửa lỗi và kết hợp các bộ học yếu thành bộ dự đoán mạnh.
· 11 phút đọc

Khám phá cùng AI

Những tiến bộ gần đây trong machine learning đã mang đến nhiều cách tiếp cận mới để giải quyết các bài toán phức tạp. Boosting là một kỹ thuật ngày càng cho thấy nhiều hứa hẹn. Kỹ thuật này đang thay đổi cách chúng ta tiếp cận mô hình hóa dữ liệu bằng cách sử dụng nhiều thuật toán để cải thiện hiệu năng. Khi khái niệm boosting tiếp tục phát triển, các biến thể mới như Gradient Boosting và XGBoost đã xuất hiện, đẩy xa hơn nữa các giới hạn về tốc độ và độ chính xác.

Đừng lo nếu bạn cảm thấy có quá nhiều thứ cần học trong lĩnh vực mô hình hóa dự đoán. Hãy thử các lộ trình nghề nghiệp Associate Data Scientist in Python hoặc Data Scientist in Python, cũng như bài hướng dẫn Explore Ensemble Learning Techniques để tiếp tục học tập. 

Boosting trong Machine Learning

Boosting là một phương pháp học tổ hợp (ensemble learning) mạnh mẽ trong machine learning, được thiết kế nhằm cải thiện độ chính xác của các mô hình dự đoán bằng cách kết hợp nhiều bộ học yếu—những mô hình chỉ hoạt động nhỉnh hơn đoán ngẫu nhiên một chút—thành một bộ học mạnh duy nhất. 

Cốt lõi của boosting nằm ở quy trình lặp, trong đó mỗi bộ học yếu được huấn luyện để sửa các lỗi của bộ học trước đó, từ đó dần nâng cao hiệu năng tổng thể của mô hình. Bằng cách tập trung vào các sai sót của những mô hình trước, boosting biến một tập hợp các bộ học yếu thành một mô hình chính xác hơn. 

Cách Boosting hoạt động

Boosting biến các bộ học yếu thành một bộ học mạnh thống nhất thông qua quy trình có hệ thống, tập trung vào việc giảm lỗi trong quá trình huấn luyện tuần tự. Các bước bao gồm:

  1. Chọn trọng số ban đầu: Gán trọng số ban đầu cho tất cả các điểm dữ liệu để biểu thị tầm quan trọng của chúng trong quá trình học.
  2. Huấn luyện tuần tự: Huấn luyện bộ học yếu đầu tiên trên dữ liệu. Sau khi đánh giá hiệu năng, tăng trọng số của các mẫu bị phân loại sai. Điều này khiến bộ học yếu kế tiếp tập trung nhiều hơn vào các trường hợp khó.
  3. Lặp lại quy trình: Lặp lại việc điều chỉnh trọng số và huấn luyện các bộ học tiếp theo. Mỗi mô hình mới tập trung vào các điểm yếu của tổ hợp đạt được cho đến thời điểm đó.
  4. Kết hợp kết quả: Gộp các dự đoán của tất cả bộ học yếu để tạo thành đầu ra cuối cùng. Việc gộp thường có trọng số, trong đó các bộ học chính xác hơn sẽ có ảnh hưởng lớn hơn.

Phương pháp này hiệu quả trong việc giảm lỗi bằng cách tập trung mạnh hơn vào các trường hợp khó trong dữ liệu huấn luyện, từ đó mang lại hiệu năng dự đoán cao.

Các loại thuật toán Boosting

Hãy cùng xem một số thuật toán boosting nổi tiếng nhất. 

AdaBoost (Adaptive Boosting)

AdaBoost là một trong những thuật toán boosting đầu tiên. Nó tập trung vào việc gán lại trọng số cho các mẫu huấn luyện mỗi khi thêm một bộ học, nhấn mạnh hơn vào các trường hợp bị phân loại sai. AdaBoost đặc biệt hiệu quả với các bài toán phân loại nhị phân. Đọc thêm trong bài hướng dẫn AdaBoost Classifier in Python của chúng tôi.

Gradient Boosting

Gradient boosting xây dựng các mô hình theo trình tự và sửa lỗi dần trong quá trình đó. Nó sử dụng thuật toán gradient descent để tối thiểu hóa hàm mất mát khi thêm các mô hình mới. Phương pháp này linh hoạt và có thể dùng cho cả hồi quy lẫn phân loại. Bài hướng dẫn A Guide to The Gradient Boosting Algorithm của chúng tôi mô tả chi tiết quy trình này. 

XGBoost (Extreme Gradient Boosting)

XGBoost là một thư viện gradient boosting phân tán được tối ưu hóa và là phương pháp ưa thích của nhiều quán quân trên Kaggle. Nó được thiết kế để đạt hiệu quả cao, linh hoạt và dễ triển khai. Thư viện này hiện thực các thuật toán machine learning trong khuôn khổ Gradient Boosting, cung cấp lời giải vừa có khả năng mở rộng vừa chính xác cho nhiều vấn đề dữ liệu thực tiễn. Để tìm hiểu sâu hơn, hãy xem bài hướng dẫn Using XGBoost in Python và tham gia khóa học chuyên sâu: Extreme Gradient Boosting with XGBoost.

Phương pháp tổ hợp (Ensemble)

Boosting thuộc nhóm lớn hơn là các phương pháp tổ hợp. Ensemble methods là cách tiếp cận trong machine learning kết hợp nhiều mô hình để tạo ra dự đoán chính xác hơn so với từng mô hình riêng lẻ. Các kỹ thuật này hoạt động bằng cách tận dụng sự đa dạng của các mô hình khác nhau, mỗi mô hình có điểm mạnh và hạn chế riêng, để hình thành một quá trình ra quyết định tập thể.

Các loại phương pháp tổ hợp khác nhau

Boosting là một kỹ thuật học tổ hợp nổi bật, nhưng chỉ là một trong số nhiều kỹ thuật giúp tăng sức mạnh dự đoán của mô hình. Hãy cùng điểm qua vài kỹ thuật khác.

  • Bagging (Bootstrap Aggregating): Phương pháp huấn luyện nhiều mô hình trên các tập con ngẫu nhiên của dữ liệu huấn luyện và gộp dự đoán của chúng. Nó giảm phương sai và giúp tránh overfitting.
  • Stacking (Stacked Generalization): Kỹ thuật kết hợp nhiều mô hình bằng cách huấn luyện một meta-model để học cách kết hợp tốt nhất các dự đoán từ các mô hình cơ sở. Nó có thể nắm bắt các mẫu phức tạp mà từng mô hình đơn lẻ có thể bỏ sót.
  • Blending: Tương tự stacking, nhưng dùng một tập validation giữ lại để huấn luyện meta-model thay vì cross-validation. Đơn giản và nhanh hơn stacking nhưng có thể kém vững hơn.
  • Voting: Kết hợp dự đoán từ nhiều mô hình bằng đa số phiếu (hard voting) hoặc trung bình có trọng số của xác suất dự đoán (soft voting). Dễ triển khai và hiệu quả khi các mô hình cơ sở đa dạng.

Boosting so với bagging

Boosting thường được so sánh với bagging. Dù có vài điểm tương đồng, chúng vẫn có những khác biệt lớn. Dưới đây là bảng so sánh boosting và bagging:

Tính năngBoostingBagging
Trọng tâm khái niệmCải thiện độ chính xác theo trình tự bằng cách tập trung vào các ví dụ bị phân loại sai trước đó.Huấn luyện nhiều mô hình trên các tập con ngẫu nhiên và lấy trung bình dự đoán của chúng.
Huấn luyện mô hìnhHuấn luyện tuần tự cho phép mỗi mô hình học từ lỗi của mô hình trước.Huấn luyện song song các mô hình trên các mẫu dữ liệu đa dạng để tăng tính đa dạng.
Giảm lỗiChủ yếu giảm thiên lệch (bias) và ở mức độ thấp hơn là phương sai (variance).Giảm phương sai, đặc biệt với các mô hình phức tạp dễ overfit.
Độ nhạy với ngoại lệNhạy hơn do tập trung nhiều vào dữ liệu bị phân loại sai.Kém nhạy hơn vì lấy mẫu ngẫu nhiên làm loãng tác động của ngoại lệ.
Ví dụAdaBoost, Gradient Boosting, XGBoost.Random Forests, Bootstrap Aggregating.

Nếu bạn muốn tìm hiểu thêm về bagging, hãy đọc bài hướng dẫn What is Bagging in Machine Learning? sử dụng sklearn. 

Triển khai Boosting trong Python

Một trong những cách tốt nhất để hiểu boosting là thử trình diễn nó trong thực tế. Để làm điều này, chúng ta sẽ dùng bộ dữ liệu Kaggle Almond Types Classification, bao gồm ba loại hạnh nhân: MAMRA, SANORA và REGULAR, cùng các đặc trưng vật lý như diện tích, chu vi và độ tròn. 

Các đặc trưng của mỗi mẫu hạnh nhân được trích xuất thông qua các kỹ thuật xử lý ảnh tinh vi. Giá trị null trong bộ dữ liệu đại diện cho những trường hợp hướng đặt của hạnh nhân—đặt thẳng đứng, nằm nghiêng hay úp lưng—ảnh hưởng đến độ chính xác của quá trình trích xuất đặc trưng. 

Giờ hãy dùng bộ dữ liệu này cho một bài toán phân loại. Chúng ta sẽ dùng thuật toán AdaBoost, như đã đề cập, nhằm nâng cao hiệu năng mô hình bằng cách kết hợp các bộ học yếu thành một bộ học mạnh.

1. Import thư viện

Chúng ta bắt đầu bằng cách import các thư viện cần thiết và nạp bộ dữ liệu hạnh nhân. Sau đó, tách biến đặc trưng và biến mục tiêu.

import pandas as pd
almonds = pd.read_csv('Almond.csv', index_col=0)
X = almonds.drop('Type', axis=1)  
y = almonds['Type']

2. Xử lý dữ liệu thiếu

Tiếp theo, chúng ta làm sạch bộ dữ liệu bằng cách điền giá trị thiếu bằng KNN imputer. Điều này đảm bảo mô hình có một bộ dữ liệu hoàn chỉnh.

from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
X_imputed = imputer.fit_transform(X)

3. Chia dữ liệu huấn luyện và kiểm tra

Chúng ta chia dữ liệu thành tập huấn luyện và kiểm tra để đánh giá khả năng mô hình xử lý dữ liệu mới.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_imputed, y, test_size=0.2, random_state=42)

4. Huấn luyện bộ phân loại cây quyết định

Tại đây, chúng ta huấn luyện một mô hình cây quyết định đơn giản để có độ chính xác cơ sở trước khi chuyển sang tăng cường hiệu năng.

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
tree = DecisionTreeClassifier(max_depth=1, random_state=42)
tree.fit(X_train, y_train)
tree_accuracy = accuracy_score(y_test, tree.predict(X_test))

5. Nâng cao hiệu năng với AdaBoost

Sau đó, chúng ta dùng AdaBoost để cải thiện hiệu năng của cây quyết định bằng cách tập trung vào các sai sót và tăng độ chính xác.

from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier(base_estimator=tree, n_estimators=100, learning_rate=1.0, random_state=42)
ada.fit(X_train, y_train)
ada_accuracy = accuracy_score(y_test, ada.predict(X_test))

# Print the accuracies
print(f'Accuracy of the weak learner (Decision Tree): {tree_accuracy * 100:.2f}%')
print(f'Accuracy of AdaBoost model: {ada_accuracy * 100:.2f}%')

6. Kết quả cuối cùng

Cuối cùng, chúng ta so sánh kết quả và xem AdaBoost cải thiện độ chính xác đáng kể như thế nào.

Accuracy of the weak learner (Decision Tree): 43.14%
Accuracy of AdaBoost model: 61.50%

Vậy điều rút ra là gì? Kết quả minh họa sức mạnh của học tổ hợp thông qua AdaBoost. Ở đây, bộ học yếu là một cây quyết định có độ sâu tối đa chỉ 1, với độ chính xác khiêm tốn khoảng 43%. Xét rằng chỉ có ba loại hạnh nhân, độ chính xác 43% không cao hơn mức đoán mò bao nhiêu. Tuy nhiên, khi bộ học yếu này được dùng làm bộ ước lượng cơ sở trong mô hình AdaBoost với 100 vòng lặp, độ chính xác đã tăng lên 62%.

Nhìn lại một chút như một lưu ý thận trọng: dù AdaBoost cho độ chính xác cao hơn trên bộ dữ liệu Almonds của chúng ta, nó không phải lúc nào cũng là lựa chọn tốt nhất. Có nguy cơ overfitting, đặc biệt với các bộ dữ liệu nhỏ như bộ này, nơi mô hình có thể trở nên quá phức tạp. Trên thực tế, các kỹ thuật phân loại đơn giản hơn đôi khi có thể hoạt động tương đương hoặc thậm chí tốt hơn cho một số tác vụ. Vì vậy, dù chúng ta dùng AdaBoost ở đây để minh họa khái niệm, điều quan trọng là cân nhắc xem liệu chúng ta có thực sự cần mức độ phức tạp cao hay không.

Kết luận

Boosting đại diện cho một bước tiến đáng kể trong lĩnh vực machine learning, thể hiện sức mạnh của các phương pháp tổ hợp trong việc nâng cao độ chính xác dự đoán. Như chúng ta đã tìm hiểu, các thuật toán boosting như AdaBoost, Gradient Boosting và XGBoost vận hành dựa trên nguyên lý cơ bản: kết hợp nhiều mô hình yếu để tạo thành một bộ dự đoán hiệu quả hơn. 

Tuy nhiên, cần nhớ rằng boosting chỉ là một công cụ trong bộ công cụ machine learning. Hiệu quả của nó có thể thay đổi tùy bài toán cụ thể. Như với bất kỳ kỹ thuật nào, việc hiểu khi nào và cách áp dụng boosting là chìa khóa để phát huy hết tiềm năng.

Để đào sâu hiểu biết về boosting và các khái niệm machine learning khác, hãy khám phá lộ trình nghề nghiệp toàn diện Machine Learning for Everyone của DataCamp. Với những ai muốn chuyên sâu hơn, lộ trình Machine Learning Scientist with Python cung cấp huấn luyện sâu về các kỹ thuật nâng cao và ứng dụng thực tiễn.

Vinod Chugani

Tác giả

Vinod Chugani

Vinod Chugani bắt đầu sự nghiệp tại Tokyo với vai trò Trưởng bàn giao dịch bán hàng Quỹ phòng hộ trẻ nhất của JPMorgan, sau đó lập kỷ lục doanh số cá nhân tại Lehman Brothers, rồi xây dựng một doanh nghiệp phân phối điện tử tại 30 quốc gia vượt mốc doanh thu 100 triệu đô la Singapore trước khi chuyển hướng sang dữ liệu. Tốt nghiệp Kinh tế Duke và là cựu học viên NYC Data Science Academy, anh là một trong ba người nhận học bổng trong hơn 100 ứng viên cho khóa học Building AI Applications của Hugo Bowne-Anderson trên Maven. Hiện nay, anh viết cho DataCamp, KDnuggets, Machine Learning Mastery và Statology về các chủ đề từ thống kê đến AI hành động, và cố vấn cho các chuyên gia dữ liệu tại NYC Data Science Academy với hơn 1.000 buổi kèm 1-1 đã thực hiện.

 

Câu hỏi thường gặp

Boosting trong machine learning là gì?

Boosting là một kỹ thuật học tổ hợp dùng để cải thiện độ chính xác của các mô hình dự đoán. Nó kết hợp nhiều bộ học yếu—những mô hình chỉ hoạt động nhỉnh hơn đoán ngẫu nhiên một chút—thành một bộ học mạnh, từ đó nâng cao đáng kể hiệu năng tổng thể của mô hình.

Boosting khác gì so với bagging?

Boosting và bagging đều là kỹ thuật tổ hợp kết hợp nhiều mô hình để cải thiện dự đoán, nhưng hoạt động khác nhau. Boosting huấn luyện các mô hình theo trình tự, mỗi mô hình mới tập trung vào lỗi của các mô hình trước để giảm bias và cải thiện độ chính xác. Ngược lại, bagging huấn luyện các mô hình song song trên những tập con dữ liệu khác nhau, lấy trung bình đầu ra để giảm phương sai và tăng ổn định. Trong khi boosting nhạy với ngoại lệ và nhiễu, bagging vững vàng hơn nhờ phương pháp lấy trung bình.

Boosting có dùng được cho cả phân loại và hồi quy không?

Có, các kỹ thuật boosting có thể điều chỉnh để dùng cho cả phân loại và hồi quy. Trong khi AdaBoost thường dùng cho các bài toán phân loại, những biến thể khác như Gradient Boosting có thể dùng hiệu quả cho hồi quy.

Làm thế nào để chọn số vòng lặp boosting?

Số vòng lặp, hay số bộ học yếu, trong một thuật toán boosting thường phụ thuộc vào bộ dữ liệu cụ thể và độ phức tạp của bài toán. Có thể xác định bằng cross-validation hoặc các kỹ thuật tương tự để cân bằng giữa underfitting và overfitting.

AdaBoost khác gì so với các kỹ thuật boosting khác, như Gradient Boosting?

AdaBoost tăng trọng số của các mẫu bị phân loại sai để các mô hình tiếp theo tập trung vào những trường hợp khó này. Ngược lại, Gradient Boost khớp các bộ học mới với phần dư (residual) của các mô hình trước.

Những ưu điểm chính khi dùng AdaBoost là gì?

Những ưu điểm chính của AdaBoost là đơn giản, hiệu quả và không đòi hỏi kiến thức trước về bộ học yếu. Nó cũng rất linh hoạt, có thể kết hợp với mọi thuật toán học, và thường thành công trong các bài toán phân loại nơi phương pháp khác có thể gặp khó.

Những lựa chọn thay thế đáng chú ý cho AdaBoost để tăng hiệu năng mô hình machine learning là gì?

Một số lựa chọn thay thế đáng chú ý cho AdaBoost gồm Gradient Boosting, XGBoost, CatBoost, LightGBM và HistGradientBoost.

Ngoài boosting, có những loại phương pháp học tổ hợp nào?

Các hình thức học tổ hợp phổ biến, ngoài boosting, bao gồm bagging và stacking, mỗi phương pháp áp dụng chiến lược khác nhau để tích hợp các mô hình nhằm tối đa hóa sức mạnh dự đoán.

Chủ đề

Liên quan