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

Làm chủ Tối ưu hóa Bayes trong Khoa học Dữ liệu

Khai mở sức mạnh của Tối ưu hóa Bayes cho tinh chỉnh siêu tham số trong Học máy. Làm chủ nền tảng lý thuyết và ứng dụng thực tiễn với Python để nâng cao độ chính xác mô hình.
Đã cập nhật 5 thg 10, 2026  · 11 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Trong lĩnh vực Học máy rộng lớn, việc điều hướng các tập dữ liệu khổng lồ và phức tạp để tìm siêu tham số tối ưu trong quá trình huấn luyện mô hình là một thách thức phổ biến.

Các phương pháp truyền thống, thường dựa trên tìm kiếm ngẫu nhiên và lưới, có thể tốn nhiều thời gian và kém hiệu quả, đặc biệt khi xử lý các kiến trúc mô hình phức tạp hoặc dữ liệu quy mô lớn.

Đây là lúc nhu cầu về một cách tiếp cận thông minh và thích ứng hơn như tối ưu hóa Bayes trở nên ngày càng quan trọng đối với việc tối ưu hóa siêu tham số.

Mục tiêu đầu tiên của bài viết này là giải thích tối ưu hóa Bayes là gì, cung cấp cho người đọc nền tảng lý thuyết vững chắc. Tuy nhiên, trước khi đi sâu vào khái niệm tối ưu hóa Bayes, điều quan trọng là hiểu các phương pháp tối ưu hóa siêu tham số khác nhau mà chúng ta có thể sử dụng.

Phần thứ hai của bài viết đề cập đến triển khai thực tiễn hơn các khái niệm chính bằng ngôn ngữ lập trình Python. Ở phần cuối, bạn sẽ học cách tận dụng tối ưu hóa Bayes để tinh chỉnh siêu tham số cho một mô hình học máy.

Tối ưu hóa Bayes là gì?

Trước khi đi vào định nghĩa tối ưu hóa Bayes, hãy điểm qua bốn phương pháp tối ưu hóa siêu tham số chính bằng những ví dụ đơn giản:

  • Tìm kiếm thủ công
  • Tìm kiếm ngẫu nhiên
  • Tìm kiếm theo lưới, và
  • Tối ưu hóa Bayes.

Tìm kiếm thủ công

Đây là phương pháp cơ bản nhất dựa trên kinh nghiệm, trực giác hoặc thử - sai. Cách tiếp cận này thường tốn thời gian và phụ thuộc nhiều vào chuyên môn của người thực hiện.

Ví dụ, một thợ làm bánh dày dạn sẽ đặt nhiệt độ lò và thời gian nướng dựa trên kinh nghiệm và trực giác trước đây.

Một điểm khởi đầu điển hình có thể là nhiệt độ 350°F và thời gian nướng 30 phút, phản ánh các thiết lập thường mang lại thành công. Các điều chỉnh sẽ được thực hiện dựa trên kết quả của mỗi lần nướng.

Tìm kiếm ngẫu nhiên

Cách tiếp cận này liên quan đến việc chọn ngẫu nhiên các tổ hợp nhiệt độ và thời gian trong một khoảng xác định. Ví dụ, nhiệt độ có thể dao động từ 325°F đến 375°F và thời gian từ 25 đến 35 phút.

Quá trình lựa chọn có thể bắt đầu ở 330°F trong 27 phút, sau đó là 370°F trong 31 phút, tiếp tục ngẫu nhiên cho đến khi xác định được tổ hợp hiệu quả nhất.

Tìm kiếm theo lưới

Phương pháp này bao gồm việc khám phá một cách có hệ thống nhiều tổ hợp giá trị siêu tham số.

Tiếp tục với ví dụ nướng bánh. Người thợ làm một lưới có cấu trúc các tổ hợp nhiệt độ và thời gian trên tường.

Lưới có thể bao gồm mỗi bước tăng 5°F từ 325°F đến 375°F và mỗi 2 phút từ 25 đến 35 phút. Bánh sẽ được nướng tại từng tổ hợp trong lưới này (325°F trong 25 phút, 325°F trong 27 phút, ... , 375°F trong 35 phút) để tìm ra tổ hợp tốt nhất.

Tìm kiếm Bayes

Tối ưu hóa Bayes có thể được xem như một cách tiếp cận thông minh hơn để tìm nhiệt độ và thời gian nướng bánh tối ưu so với tìm kiếm ngẫu nhiên.

Tìm kiếm ngẫu nhiên có thể khiến người thợ thử một loạt tổ hợp nhiệt độ và thời gian bất kỳ, nhiều trường hợp có thể dẫn đến bánh sống hoặc cháy.

Trong tối ưu hóa Bayes, việc tìm kiếm điều kiện nướng tối ưu của người thợ được dẫn dắt và thông tin hóa bởi các kết quả trước đó.

Chẳng hạn, nếu người thợ thấy rằng những chiếc bánh được nướng quanh 350°F trong 30 phút có xu hướng thành công hơn, thì những lần nướng tiếp theo sẽ tập trung nhiều hơn vào các tổ hợp nhiệt độ và thời gian gần với các giá trị này.

Phương pháp này giảm số lần thử cần thiết vì nó "học" được những tổ hợp nào có khả năng cho ra chiếc bánh hoàn hảo hơn dựa trên kết quả của các lần nướng trước.

Nhìn chung, tối ưu hóa Bayes dựa trên định lý Bayes để tối ưu hóa các hàm mục tiêu đắt đỏ khi đánh giá. Nó đặc biệt hiệu quả trong các tình huống mà việc lấy mẫu tốn kém và hàm mục tiêu không biết trước nhưng có thể được lấy mẫu.

Tối ưu hóa Bayes thường sử dụng một mô hình xác suất, như Gaussian Process, để ước lượng hàm mục tiêu và sau đó dùng một hàm chọn điểm (acquisition function) để quyết định nơi cần lấy mẫu tiếp theo.

Thách thức của Tối ưu hóa Bayes

Phương pháp này đã được áp dụng thành công trong nhiều lĩnh vực. Tuy nhiên, cần lưu ý rằng nó cũng đặt ra một số thách thức, và những thách thức chính được trình bày dưới đây:

Đánh giá theo lô / song song

Một thách thức là thực hiện hiệu quả các đánh giá theo lô hoặc song song. Tối ưu hóa Bayes truyền thống hoạt động theo cách tuần tự, chọn một điểm tại một thời điểm để đánh giá. Mở rộng sang thiết lập theo lô, nơi nhiều điểm được đánh giá đồng thời, không phải là điều tầm thường và đòi hỏi cân bằng cẩn trọng để đảm bảo tính đa dạng và hiệu quả trong các điểm được chọn.


Tối ưu hóa không thiển cận

Điều này đề cập đến thách thức đưa ra các quyết định chiến lược, dài hạn về những điểm nào cần đánh giá. Các phương pháp không thiển cận xem xét tác động trong tương lai của các đánh giá hiện tại, điều này có thể tốn kém tính toán và phức tạp để mô hình hóa.


Chiều của không gian

Khi số chiều của không gian tìm kiếm tăng lên, tối ưu hóa Bayes có thể kém hiệu quả hơn. Điều này là do "lời nguyền chiều", khi thể tích không gian tăng theo hàm mũ, khiến việc tìm điểm tối ưu trở nên khó khăn hơn với số lần đánh giá hạn chế.


Không gian tìm kiếm có cấu trúc

Trong nhiều bài toán thực tế, không gian tìm kiếm không phải là một không gian n-chiều đơn giản, liên tục mà có cấu trúc phức tạp, như phụ thuộc giữa các biến hoặc các ràng buộc. Xử lý hiệu quả các không gian có cấu trúc này là một thách thức đáng kể.


Tìm kiếm đa tác vụ/đa mục tiêu, đa độ trung thực

Mở rộng tối ưu hóa Bayes để xử lý đồng thời nhiều mục tiêu hoặc tích hợp thông tin từ các đánh giá có độ trung thực (độ chính xác) khác nhau là phức tạp. Các kịch bản này yêu cầu cân bằng đánh đổi giữa các mục tiêu khác nhau hoặc các mức độ chi tiết khác nhau trong đánh giá.


Khởi động ấm (Warm-start)

Điều này liên quan đến việc tận dụng kiến thức hoặc dữ liệu trước đó để tăng tốc quá trình tối ưu hóa. Việc tích hợp hiệu quả thông tin này vào khung Bayes mà không làm sai lệch kết quả là một thách thức.


Số lượng đánh giá lớn

Mặc dù tối ưu hóa Bayes được thiết kế cho các tình huống mà đánh giá tốn kém, trong một số trường hợp, vẫn có thể cần số lượng lớn đánh giá. Quản lý và điều hướng hiệu quả số lượng lớn đánh giá này có thể là thách thức, đặc biệt về tài nguyên tính toán và thời gian.


Hàm mục tiêu "khó chịu"

Xử lý các hàm mục tiêu có nhiều cực trị cục bộ, không liên tục, hoặc không dừng (hàm thay đổi theo thời gian) là khó. Những hàm này có thể đánh lạc hướng quá trình tối ưu hóa và khiến việc tìm điểm tối ưu toàn cục trở nên thách thức.


Quan sát gián tiếp

Trong một số kịch bản, không thể quan sát trực tiếp hàm mục tiêu, mà chỉ thông qua các phép đo gián tiếp. Điều này làm tăng mức độ phức tạp vì thuật toán tối ưu hóa phải suy luận hàm mục tiêu thực sự từ các quan sát gián tiếp đó.


Hàm chọn điểm và ra quyết định

Trong tối ưu hóa Bayes, các hàm chọn điểm (acquisition) được dùng để dẫn dắt quá trình tìm kiếm các giá trị tối ưu.

Hàm chọn điểm và mô hình thay thế (surrogate) phụ thuộc lẫn nhau trong tối ưu hóa Bayes.

Mô hình thay thế cung cấp dự đoán xác suất về hàm mục tiêu, mà hàm chọn điểm sau đó sử dụng để xác định các điểm hứa hẹn nhất cần đánh giá tiếp theo. Ngoài ra, các mô hình thay thế như Hồi quy Gaussian Process đặc biệt hữu ích khi hàm mục tiêu phức tạp hoặc tốn kém để đánh giá trực tiếp.

Hơn nữa, bằng cách liên tục cập nhật mô hình thay thế với các điểm dữ liệu mới, hàm chọn điểm có thể được định hướng chính xác hơn tới những khu vực trong không gian tìm kiếm có khả năng mang lại kết quả tốt nhất.

Có một số hàm chọn điểm có thể sử dụng trong tối ưu hóa Bayes, bao gồm:

  • Thompson Sampling: hàm này chọn các điểm dựa trên ước lượng xác suất của hàm mục tiêu.
  • Upper Confidence Bound (UCB): hàm này được dùng để chọn điểm có xác suất cải thiện giá trị tốt nhất đã quan sát cao nhất. Nó sử dụng chênh lệch giữa kết quả của nghiệm mới tiềm năng và giá trị tốt nhất hiện tại, tính xác suất cải thiện của nó.
  • Probability of Improvement (PI): dùng để chọn điểm có xác suất đạt giá trị tốt nhất đã quan sát cho đến nay cao nhất.
  • Expected Improvement (EI): dùng để chọn điểm có kỳ vọng cải thiện so với giá trị tốt nhất đã quan sát hiện tại lớn nhất.

Không có hàm nào tuyệt đối tốt nhất hay tệ nhất. Mỗi hàm chọn điểm này có điểm mạnh riêng và được chọn dựa trên yêu cầu cụ thể của bài toán tối ưu.

Ứng dụng của Tối ưu hóa Bayes

Tối ưu hóa Bayes đã được áp dụng thành công trong nhiều ngành, và phần này tập trung minh họa qua bốn trường hợp sử dụng:

  • Xử lý ngôn ngữ tự nhiên
  • Học máy và tinh chỉnh siêu tham số
  • Kiểm thử A/B, và
  • Học tăng cường và robot

Những ví dụ này đặc biệt phù hợp và hữu ích cho các Nhà khoa học Dữ liệu.

Xử lý ngôn ngữ tự nhiên

Khi áp dụng Học máy cho các bài toán Xử lý ngôn ngữ tự nhiên, có nhiều lựa chọn về cách biểu diễn văn bản đầu vào, và những lựa chọn này có thể ảnh hưởng đến kết quả cuối cùng của mô hình nền tảng.

Tối ưu hóa Bayes được dùng để tự động hóa quá trình chọn cách biểu diễn văn bản tốt nhất trong các mô hình NLP, từ đó đơn giản hóa quy trình phát triển mô hình và giúp hiệu quả hơn, đồng thời vẫn duy trì hoặc thậm chí nâng cao hiệu suất tổng thể của các mô hình này.

Để tìm hiểu thêm về embeddings, khóa học Giới thiệu về Embeddings với OpenAI API của chúng tôi cung cấp hướng dẫn đầy đủ về cách dùng OpenAI API để tạo embeddings.

Học máy và tinh chỉnh siêu tham số

Tối ưu hóa Bayes trong học máy tự động (AutoML) tự động hóa việc lựa chọn mô hình tốt nhất và các siêu tham số của nó cho một bài toán nhất định trên một tập dữ liệu nhất định.

Các ứng dụng gần đây của tối ưu hóa Bayes đã cho thấy hiệu quả của nó trong việc tinh chỉnh các mô hình phức tạp như deep belief networks, mạng nơ-ron tích chập và các phương pháp Markov chain Monte Carlo.

Hơn nữa, nó đã hữu ích trong việc tự động hóa quy trình lựa chọn giữa các mô hình do các thư viện học máy phổ biến như WEKA và scikit-learn cung cấp.

Kiểm thử A/B

Trong Kiểm thử A/B, Tối ưu hóa Bayes được dùng để nâng cao hiệu quả khi thử nghiệm các cấu hình sản phẩm khác nhau, như quảng cáo, ứng dụng, trò chơi hoặc trang web.

Bằng cách trình bày hai lựa chọn (A và B) cho một tập người dùng nhỏ, các nhà phát triển thu thập phản hồi để tối ưu hóa các chỉ số như mức độ tương tác hoặc tỷ lệ nhấp, và thách thức then chốt là xác định cấu hình sản phẩm tốt nhất trong phạm vi ngân sách hạn chế cho các lượt hỏi người dùng.

Tối ưu hóa Bayes hỗ trợ quá trình này bằng cách sử dụng phản hồi từ các thử nghiệm trước đó để đưa ra quyết định thông minh về những tập con người dùng cần khảo sát tiếp theo, nhằm tối ưu hóa hiệu suất tổng thể của sản phẩm trong khi giảm thiểu chi phí cơ hội.

Học tăng cường và Robot

Tối ưu hóa Bayes đã được áp dụng hiệu quả trong cả Robot và Học tăng cường.

Trong robot, nó đã được dùng để tối ưu hóa dáng đi của robot cho các mục tiêu cụ thể như tốc độ hoặc độ mượt, như đã chứng minh với robot Sony AIBO ERS-7. Nó cũng đã được sử dụng trong các nhiệm vụ điều hướng, giúp robot giảm thiểu bất định về vị trí của mình và ước lượng bản đồ khi di chuyển qua các môi trường.

Tối ưu hóa Bayes đã được áp dụng trong học tăng cường phân cấp để tự động tinh chỉnh tham số của các chính sách mạng nơ-ron và học các hàm giá trị ở nhiều cấp độ của một hệ thống phân cấp.

Ngoài ra, kỹ thuật này đã được áp dụng để phát triển các chính sách chú ý trong theo dõi ảnh bằng mạng sâu, cho thấy tính linh hoạt trong việc thích nghi với các khía cạnh khác nhau của học tập và ra quyết định trong các môi trường phức tạp.

Hướng dẫn từng bước Triển khai Tối ưu hóa Bayes

Các phần trước đã cung cấp hiểu biết toàn diện về tối ưu hóa Bayes. Phần này minh họa cách tối ưu hóa siêu tham số của XGBRegressor bằng thư viện GPyOpt.

PyMC3 là một thư viện mạnh mẽ khác dùng cho tối ưu hóa Bayes, và khóa học Phân tích Dữ liệu Bayes trong Python của chúng tôi cung cấp hướng dẫn đầy đủ kèm theo một số ví dụ thực tế.

Đối với những ai quan tâm áp dụng tối ưu hóa Bayes bằng ngôn ngữ R, khóa học Những điều căn bản về Phân tích Dữ liệu Bayes trong R là lựa chọn phù hợp.

Áp dụng hai phương pháp: Tìm kiếm lưới và Tối ưu hóa Bayes. Mục tiêu là xác định phương pháp nào cung cấp siêu tham số tối ưu, dẫn đến mô hình tốt hơn. Mã nguồn đầy đủ có trong DataLab workbook này; bạn có thể tạo bản sao workbook của riêng mình để chỉnh sửa và chạy mã ngay trên trình duyệt mà không cần cài đặt gì trên máy tính.

Yêu cầu tiên quyết

Các thư viện sau là cần thiết để thực thi thành công cả hai kỹ thuật.

  • numpy: thư viện tính toán số trong Python.
  • scipy: thư viện tính toán khoa học trong Python.
  • sklearn: thư viện học máy trong Python.
  • GPyOpt: thư viện tối ưu hóa Bayes trong Python.
  • Xgboost cho mô hình XGBoost

Có thể cài đặt các thư viện này bằng lệnh pip như sau, từ Jupyter notebook:

!pip -q install xgboost scikit-learn GPyOpt numpy

Sau khi chạy thành công đoạn mã trước, các import được thực hiện bằng lệnh import:

import xgboost as xgb
from sklearn.datasets import fetch_california_housing as fch
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import RandomizedSearchCV
from GPyOpt.methods import BayesianOptimization
from sklearn.model_selection import cross_val_score
import numpy as np

Chuẩn bị tập dữ liệu

Phân tích đối sánh dựa trên tập dữ liệu nhà ở California.

  • 70% dữ liệu được dùng để huấn luyện mô hình XGBoost
  • 30% còn lại dùng để kiểm tra

Việc chia tập huấn luyện và kiểm tra được mô tả dưới đây:

# Load dataset
california_housing = fch()

X = california_housing.data
y = california_housing.target

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                	test_size=0.3,
                                                	random_state=2024)

Sau khi tải dữ liệu huấn luyện và kiểm tra, chúng ta có thể kiểm tra kích thước của chúng bằng hàm .shape.

print(f"Training Shape: {X_train.shape}")
print(f"Testing Shape: {X_test.shape}")

Tinh chỉnh siêu tham số với Tìm kiếm ngẫu nhiên

Phần này giải thích cách thiết lập và thực thi tinh chỉnh siêu tham số theo cách tiếp cận Gridsearch cho hồi quy XGBoost bằng lớp RandomizedSearchCV từ mô-đun scikit-learn.

Thiết lập lưới tham số

Một từ điển tên là param_dist được tạo với các siêu tham số khác nhau làm khóa và các danh sách giá trị khả dĩ tương ứng làm giá trị. Các siêu tham số này bao gồm:

  • max_depth: Độ sâu tối đa của một cây. Giá trị: 3, 10, 5, 15.
  • min_child_weight: Tổng trọng số (hessian) tối thiểu cần có ở một nút con. Giá trị: 1, 5, 10.
  • subsample: Tỷ lệ lấy mẫu của các mẫu huấn luyện. Giá trị: 0.5, 0.7, 1.0.
  • colsample_bytree: Tỷ lệ lấy mẫu cột khi xây dựng mỗi cây. Giá trị: 0.5, 0.7, 1.0.
  • n_estimators: Số cây tăng cường gradient. Tương đương số vòng boosting. Giá trị: 100, 200, 300, 400.
param_dist = {
	'max_depth': [3, 10, 5, 15],
	'min_child_weight': [1, 5, 10],
	'subsample': [0.5, 0.7, 1.0],
	'colsample_bytree': [0.5, 0.7, 1.0],
	'n_estimators': [100, 200, 300, 400],
	'learning_rate': [0.01, 0.05, 0.1, 0.15, 0.2]
}

Khởi tạo XGBoost Regressor

Một thể hiện của lớp XGBRegressor từ thư viện XGBoost được tạo:

xgb_reg = xgb.XGBRegressor()

Cấu hình RandomizedSearchCV

RandomizedSearchCV được thiết lập với các tham số sau:

  • Bộ ước lượng (xgb_reg) là hồi quy XGBoost.
  • param_distributions=param_dist chỉ định từ điển tham số để lấy mẫu.
  • n_iter=25 cho biết sẽ thử 25 tổ hợp khác nhau.
  • scoring='neg_mean_squared_error' đặt thước đo đánh giá là sai số bình phương trung bình âm.
  • cv=3 đặt chiến lược chia chéo xác thực thành 3 phần.
  • verbose=1 bật chế độ xuất chi tiết.
  • random_state=42 đảm bảo khả năng tái lập.
random_search = RandomizedSearchCV(
	xgb_reg, param_distributions=param_dist, n_iter=25,
	scoring='neg_mean_squared_error', cv=3, verbose=1, random_state=2024
)

Huấn luyện mô hình và truy cập tham số

Phương thức fit được dùng để chạy tìm kiếm ngẫu nhiên trên dữ liệu huấn luyện cung cấp (X_train và y_train):

random_search.fit(X_train, y_train)

Thuộc tính best_params từ mô hình đã huấn luyện chứa thông tin về các siêu tham số tốt nhất dẫn đến mô hình có hiệu suất tốt hơn.

Có thể lấy các tham số đó như sau:

print("Random Search Best Parameters:", random_search.best_params_)

image2.png

Các siêu tham số tốt nhất từ tìm kiếm ngẫu nhiên

Trong số tất cả các tham số có thể, các tham số tốt nhất cho mô hình XGBoost qua Tìm kiếm ngẫu nhiên được đưa ra dưới đây:

'subsample': 0.5,
'n_estimators': 400,
'min_child_weight': 5,
'max_depth': 10,
'learning_rate': 0.05,
'colsample_bytree': 1.0
}

Đánh giá mô hình

Sử dụng các giá trị này, chúng ta có thể đánh giá mô hình và lấy hiệu suất của nó như sau:

Đầu tiên, khởi tạo mô hình bằng các siêu tham số tốt nhất trước khi huấn luyện.

# Initialize and train the model
model_random_search = xgb.XGBRegressor(**params_random_search)
model_random_search.fit(X_train, y_train)

Sau đó, mô hình được đánh giá trên dữ liệu kiểm tra

predictions_random_search = model_random_search.predict(X_test)
mse_random_search = mean_squared_error(y_test, predictions_random_search)
print("MSE for Random Search: ", mse_random_search)

Chạy thành công các đoạn mã trên sẽ tạo ra giá trị sai số bình phương trung bình sau:

MSE cho XGBosst sử dụng siêu tham số từ Tìm kiếm ngẫu nhiên

Tinh chỉnh siêu tham số với Tối ưu hóa Bayes

Tương tự như tìm kiếm ngẫu nhiên, chúng ta áp dụng quy trình từng bước để tạo ra các siêu tham số tốt nhất bằng tối ưu hóa Bayes.

Thiết lập miền giá trị của tham số

Miền giá trị cho các siêu tham số được định nghĩa trong danh sách baysian_opt_bounds. Mỗi siêu tham số được biểu diễn dưới dạng một từ điển với các khóa: name, type, và domain.

  • max_depth, min_child_weight, n_estimators là các biến rời rạc.
  • subsample, colsample_bytree, learning_rate là các biến liên tục.
  • domain chỉ định phạm vi giá trị cho mỗi siêu tham số.
baysian_opt_bounds = [
	{'name': 'max_depth', 'type': 'discrete', 'domain': (3, 10, 5, 15)},
	{'name': 'min_child_weight', 'type': 'discrete', 'domain': (1, 5, 10)},
	{'name': 'subsample', 'type': 'continuous', 'domain': (0.5, 1.0)},
	{'name': 'colsample_bytree', 'type': 'continuous', 'domain': (0.5, 1.0)},
	{'name': 'n_estimators', 'type': 'discrete', 'domain': (100, 200, 300, 400)},
	{'name': 'learning_rate', 'type': 'continuous', 'domain': (0.01, 0.2)}
]

Định nghĩa hàm mục tiêu

Một hàm mục tiêu xgb_cv_score được định nghĩa để tính sai số bình phương trung bình âm có xác thực chéo của mô hình XGBoost.

  • Hàm nhận một tập tham số và chuyển đổi chúng sang định dạng yêu cầu.
  • cross_val_score được dùng để đánh giá mô hình XGBoost với các tham số chỉ định.
  • Giá trị âm của trung bình các điểm từ xác thực chéo được trả về làm mục tiêu cần tối thiểu hóa.
def xgb_cv_score(parameters):
	parameters = parameters[0]
	score = -cross_val_score(
            	xgb.XGBRegressor(
                	max_depth=int(parameters[0]),
                	min_child_weight=int(parameters[1]),
                	subsample=parameters[2],
                	colsample_bytree=parameters[3],
                	n_estimators=int(parameters[4]),
                	learning_rate=parameters[5]),
            	X_train, y_train, scoring='neg_mean_squared_error', cv=3).mean()
	return score

Khởi tạo và chạy mô hình Bayes

Tối ưu hóa Bayes được khởi tạo với các tham số sau:

  • f=xgb_cv_score: Hàm mục tiêu cần tối thiểu hóa.
  • domain=baysian_opt_bounds: Miền giá trị của siêu tham số.
  • model_type='GP': Chỉ định sử dụng Gaussian Processes.
  • acquisition_type='EI': Dùng Expected Improvement làm hàm chọn điểm.
  • max_iter=25: Số vòng lặp của quá trình tối ưu hóa.

Quá trình tối ưu hóa được bắt đầu với optimizer.run_optimization()

optimizer = BayesianOptimization(
	f=xgb_cv_score, domain=baysian_opt_bounds, model_type='GP',
	acquisition_type='EI', max_iter=25
)
optimizer.run_optimization()

Truy cập các tham số tốt nhất

Sau khi tối ưu, các tham số tốt nhất được trích xuất và định dạng:

  • Các tham số được lấy từ optimizer.x_opt.
  • Các tham số rời rạc (max_depth, min_child_weight, n_estimators) được ép kiểu sang số nguyên.

Các tham số tốt nhất được in ra:

print("Bayesian Optimization Best Parameters:", best_params_bayesian)

Bayesian optimization best parameters

Các siêu tham số tốt nhất từ tối ưu hóa Bayes

Đánh giá mô hình

Quy trình khởi tạo và huấn luyện giống như trước. Nhưng lần này, chúng ta sử dụng các tham số từ tối ưu hóa Bayes:

params_bayesian_opt = {
	'max_depth': 10,
	'min_child_weight': 10,
	'subsample': 0.820222997732141,
	'colsample_bytree': 0.6710357796023916,
	'n_estimators': 300,
	'learning_rate': 0.04797554348030097
}

# Initialize and train the model
model_bayesian_opt = xgb.XGBRegressor(**params_bayesian_opt)
model_bayesian_opt.fit(X_train, y_train)

# Make predictions and evaluate
predictions_bayesian_opt = model_bayesian_opt.predict(X_test)
mse_bayesian_opt = mean_squared_error(y_test, predictions_bayesian_opt)
print("MSE for Bayesian Optimization: ", mse_bayesian_opt)

Hiệu suất mô hình được đưa ra sau khi thực thi thành công đoạn mã trên, và kết quả như dưới đây:

MSE for XGBosst using Random search hyperparameters

MSE cho XGBosst sử dụng siêu tham số từ tối ưu hóa Bayes

Diễn giải kết quả

Từ hai thí nghiệm, chúng ta nhận thấy rằng:

  • MSE thấp hơn ở Tối ưu hóa Bayes: Mô hình được huấn luyện với siêu tham số từ Tối ưu hóa Bayes có MSE thấp hơn (0.204) so với mô hình từ Tìm kiếm ngẫu nhiên (0.219). Giá trị thấp hơn này cho thấy mô hình, trung bình, gần với các điểm dữ liệu thực hơn.
  • Hiệu suất mô hình: MSE thấp hơn cho thấy phương pháp Tối ưu hóa Bayes hiệu quả hơn trong việc tinh chỉnh siêu tham số cho mô hình XGBoost. Kết quả này gợi ý rằng mô hình được tinh chỉnh bằng Tối ưu hóa Bayes tổng quát hóa tốt hơn từ dữ liệu huấn luyện sang dữ liệu chưa thấy (trong trường hợp này là tập kiểm tra).
  • Hiệu quả của Tối ưu hóa Bayes: Tối ưu hóa Bayes thường dẫn đến hiệu suất tốt hơn trong tinh chỉnh siêu tham số vì nó sử dụng một mô hình xác suất để dẫn dắt việc tìm tham số tốt nhất. Nó học từ các đánh giá trước và hướng việc tìm kiếm tới những siêu tham số hứa hẹn nhất, thường dẫn đến các giá trị tốt hơn so với Tìm kiếm ngẫu nhiên.

Trong trường hợp cụ thể này, phương pháp Tối ưu hóa Bayes cho kết quả tốt hơn như được chứng minh bởi MSE thấp hơn. Điều này cho thấy đối với tập dữ liệu và mô hình (XGBoost) này, Tối ưu hóa Bayes hiệu quả hơn trong việc xác định tập siêu tham số giúp giảm thiểu lỗi dự đoán trên tập kiểm tra.

Cần lưu ý rằng mặc dù Tối ưu hóa Bayes thể hiện hiệu suất tốt hơn trong ví dụ này, việc lựa chọn giữa Tìm kiếm ngẫu nhiên và Tối ưu hóa Bayes có thể phụ thuộc vào nhiều yếu tố như độ phức tạp của mô hình, bản chất dữ liệu và tài nguyên tính toán.

Tuy nhiên, trong các tình huống mà độ chính xác trong tinh chỉnh siêu tham số là quan trọng và tài nguyên tính toán cho phép, Tối ưu hóa Bayes thường chứng tỏ là lựa chọn vượt trội.

Kết luận

Bài viết này đã cung cấp một cuộc khám phá toàn diện về Tối ưu hóa Bayes, một kỹ thuật then chốt trong việc tối ưu hóa các hàm phức tạp.

Chúng tôi bắt đầu bằng cách định nghĩa tối ưu hóa Bayes là gì trước khi đề cập đến các thách thức trong tối ưu hóa hàm, dẫn tới sự phù hợp của Tối ưu hóa Bayes.

Qua một hướng dẫn thực hành, chúng tôi đi sâu vào các khía cạnh triển khai, tập trung vào Hồi quy Gaussian Process và các hàm chọn điểm. Một phần quan trọng của thảo luận xoay quanh việc áp dụng Tối ưu hóa Bayes để tinh chỉnh siêu tham số trong các mô hình học máy, thể hiện tính hữu dụng trong thực tế.

Nhìn chung, bài viết này vừa là tổng quan nhập môn vừa là hướng dẫn thực hành, làm nổi bật vai trò quan trọng của Tối ưu hóa Bayes trong học máy và tối ưu hóa tính toán.

Nó mang đến những góc nhìn giá trị cho các nhà thực hành, nhà nghiên cứu và những người đam mê trong các lĩnh vực này, nhấn mạnh tính ứng dụng và tác động của phương pháp trong các thách thức tính toán hiện đại.

Đối với những ai muốn đào sâu hơn vào tối ưu hóa Bayes và triển khai bằng Python, khóa học Hyperparameter Tuning in Python của chúng tôi cung cấp trải nghiệm thực hành với một số phương pháp luận phổ biến để tự động tinh chỉnh siêu tham số bằng thư viện Scikit Learn. Một số phương pháp nâng cao bao gồm thuật toán Bayes và Di truyền.


Zoumana Keita 's photo
Author
Zoumana Keita
LinkedIn
Twitter

Nhà khoa học dữ liệu đa tài, yêu thích chia sẻ kiến thức và đóng góp cho cộng đồng, Zoumana là người sáng tạo nội dung trên YouTube và là cây bút công nghệ hàng đầu trên Medium. Anh yêu thích thuyết trình, lập trình và giảng dạy. Zoumana có hai bằng thạc sĩ: một về khoa học máy tính chuyên sâu Học máy tại Paris, Pháp, và một về Khoa học dữ liệu tại Texas Tech University, Hoa Kỳ. Anh bắt đầu sự nghiệp với vai trò Nhà phát triển phần mềm tại Groupe OPEN ở Pháp, sau đó chuyển sang IBM làm Tư vấn Học máy, nơi anh phát triển các giải pháp AI đầu-cuối cho các công ty bảo hiểm. Zoumana gia nhập Axionable, startup Trí tuệ nhân tạo Bền vững đầu tiên có trụ sở tại Paris và Montreal. Tại đây, anh làm Nhà khoa học dữ liệu và triển khai các sản phẩm AI, chủ yếu là các bài toán NLP, cho khách hàng tại Pháp, Montreal, Singapore và Thụy Sĩ. Ngoài ra, 5% thời gian của anh được dành cho Nghiên cứu và Phát triển. Hiện tại, anh làm việc với vai trò Nhà khoa học dữ liệu cao cấp tại IFC - Nhóm Ngân hàng Thế giới.

Chủ đề
Phân tích dữ liệu
Machine Learning

Tiếp tục học Tối ưu hóa Bayes!

Khóa học

Tinh chỉnh siêu tham số trong Python

4 giờ
25.5K
Tìm hiểu kỹ thuật tự động tinh chỉnh siêu tham số trong Python với Grid, Random và Informed Search.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm