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

Hướng dẫn PyCaret: Cẩm nang cho người mới bắt đầu để tự động hóa quy trình ML bằng PyCaret

PyCaret là một công cụ quản lý mô hình và máy học đầu-cuối giúp tăng tốc chu trình thử nghiệm theo cấp số nhân và làm bạn trở nên năng suất hơn.
· 12 phút đọc

Khám phá cùng AI

PyCaret là gì

Lưu ý: Hướng dẫn này được tạo vào năm 2021 và PyCaret hiện không còn được bảo trì tích cực; một số bước có thể không hoạt động với các phiên bản DataLab hoặc công cụ khác hiện tại.

PyCaret là một thư viện máy học mã nguồn mở, low-code trong Python giúp tự động hóa các quy trình máy học. Đây là một công cụ máy học và quản lý mô hình đầu-cuối, tăng tốc chu trình thử nghiệm theo cấp số nhân và giúp bạn làm việc hiệu quả hơn.

So với các thư viện máy học mã nguồn mở khác, PyCaret là một thư viện low-code thay thế có thể thay thế hàng trăm dòng mã chỉ bằng vài dòng. Điều này giúp thử nghiệm nhanh và hiệu quả hơn rất nhiều. Về bản chất, PyCaret là một lớp bọc (wrapper) Python quanh nhiều thư viện và khung máy học như scikit-learn, XGBoost, LightGBM, CatBoost, spaCy, Optuna, Hyperopt, Ray và một vài thư viện khác.

Thiết kế và sự đơn giản của PyCaret được lấy cảm hứng từ vai trò đang nổi lên của citizen data scientist (nhà khoa học dữ liệu nghiệp dư), thuật ngữ do Gartner giới thiệu. Citizen data scientist là những người dùng thành thạo có thể thực hiện cả các tác vụ phân tích đơn giản và tương đối phức tạp vốn trước đây đòi hỏi chuyên môn kỹ thuật cao hơn.

PyCaret đơn giản và dễ dùng. Tất cả thao tác trong PyCaret được lưu tuần tự trong một pipeline được điều phối đầy đủ để triển khai. Dù là xử lý thiếu dữ liệu, biến đổi dữ liệu phân loại, kỹ thuật đặc trưng hay tinh chỉnh siêu tham số, PyCaret đều tự động hóa tất cả. Để tìm hiểu thêm về PyCaret, hãy xem video một phút này.

Các mô-đun trong PyCaret

API của PyCaret được sắp xếp theo mô-đun. Mỗi mô-đun hỗ trợ một loại học có giám sát (phân loại và hồi quy) hoặc học không giám sát (phân cụm, phát hiện bất thường, xử lý ngôn ngữ tự nhiên, khai phá luật kết hợp). Một mô-đun mới cho dự báo chuỗi thời gian vừa được phát hành ở trạng thái beta dưới dạng một gói pip riêng.

Nguồn ảnh: [Ali, Moez].

Cài đặt PyCaret

Cài đặt PyCaret rất đơn giản qua pip và chỉ mất vài phút. Cài đặt mặc định của PyCaret chỉ cài các phụ thuộc bắt buộc như liệt kê trong tệp requirements.txt trên kho.

Lưu ý: Hướng dẫn này được tạo vào năm 2021 và PyCaret hiện không còn được bảo trì tích cực; một số bước có thể không hoạt động với các phiên bản DataLab hoặc công cụ khác hiện tại.

pip install pycaret

Để cài đầy đủ:

pip install pycaret[full]

Tính năng

Điểm mạnh của PyCaret là sự đơn giản. So với các phần mềm AutoML khác, PyCaret cực kỳ linh hoạt, có API thống nhất và hầu như không có đường cong học tập.

PyCaret được trang bị rất nhiều chức năng. Bạn có thể đi từ xử lý dữ liệu đến huấn luyện mô hình rồi triển khai lên đám mây chỉ với vài dòng mã. Nó có nhiều phép biến đổi tiền xử lý được áp dụng tự động khi khởi tạo thí nghiệm. Bộ mô hình (model zoo) của PyCaret có hơn 70 mô hình chưa huấn luyện cho cả bài toán có giám sát và không giám sát.

Bạn cũng có thể dùng PyCaret trên GPU và tăng tốc quy trình làm việc lên 10 lần. Để huấn luyện mô hình trên GPU, chỉ cần truyền use_gpu = True trong hàm setup. Không phải thay đổi mã gì khác.

PyCaret là một giải pháp "glass-box". Nó đi kèm vô số chức năng để tương tác với mô hình và phân tích hiệu năng cũng như kết quả. Tất cả biểu đồ tiêu chuẩn như ma trận nhầm lẫn, AUC, phần dư và độ quan trọng đặc trưng đều có sẵn cho mọi mô hình. Nó cũng tích hợp với thư viện SHAP để giải thích đầu ra của các mô hình cây phức tạp.

(Ví dụ biểu đồ beeswarm)

PyCaret cũng tích hợp với MLflow cho các chức năng MLOps. Nó tự động ghi lại metrics, tham số và artifacts khi bạn truyền log_experiment = True trong hàm setup.

(Ảnh của Tác giả)

Tiền xử lý trong PyCaret

Tất cả biến đổi tiền xử lý được áp dụng trong hàm setup. PyCaret cung cấp hơn 25 biến đổi tiền xử lý khác nhau được định nghĩa trong hàm setup. Bấm vào đây để tìm hiểu thêm về khả năng tiền xử lý của PyCaret.

(Ảnh của Tác giả)

Các mô-đun trong PyCaret

Mô-đunNhiệm vụ
pycaret.classificationCó giám sát: Phân loại nhị phân hoặc đa lớp
pycaret.regressionCó giám sát: Hồi quy
pycaret.clusteringKhông giám sát: Phân cụm
pycaret.anomalyKhông giám sát: Phát hiện bất thường
pycaret.nlpKhông giám sát: Xử lý ngôn ngữ tự nhiên (Mô hình chủ đề)
pycaret.arulesKhông giám sát: Khai phá luật kết hợp
pycaret.datasetsTập dữ liệu

Ví dụ: Một bài toán ML đầu-cuối

Đây là một quy trình máy học điển hình. Xác định đúng bài toán ML là bước đầu tiên trong mọi dự án máy học và có thể mất từ vài ngày đến vài tuần để định hình đúng.

Khâu lấy dữ liệu và ETL (Extract-Transform-Load) cũng có thể khác nhau về độ phức tạp tùy theo mức độ trưởng thành công nghệ và quy mô của tổ chức. Việc có một nhóm kỹ sư dữ liệu cùng làm ở giai đoạn này là bình thường.

Giai đoạn Phân tích Khám phá Dữ liệu (EDA) bao gồm khám phá dữ liệu thô để đánh giá chất lượng dữ liệu (giá trị thiếu, ngoại lệ, v.v.), tương quan giữa các đặc trưng và kiểm định các giả thuyết nghiệp vụ.

Đối với chuẩn bị dữ liệu, huấn luyện và chọn mô hình, PyCaret xử lý phần nặng phía sau. Chuẩn bị dữ liệu bao gồm các biến đổi như bù giá trị thiếu, chuẩn hóa (min-max, z-score, v.v.), mã hóa biến phân loại (one-hot, ordinal, v.v.), kỹ thuật đặc trưng (đa thức, tương tác đặc trưng, tỷ lệ, v.v.) và chọn đặc trưng.

Sau khi chuẩn bị dữ liệu, giai đoạn huấn luyện và chọn mô hình liên quan đến việc fit nhiều thuật toán và đánh giá hiệu năng bằng một chiến lược kiểm định nào đó (thường là cross-validation).

Cuối cùng, mô hình được chọn (tốt nhất) sẽ được triển khai làm điểm cuối API để suy luận. Khi đã triển khai, việc giám sát API và theo dõi hiệu năng mô hình trong môi trường sản xuất sẽ diễn ra liên tục.

(Ảnh của Tác giả)

Bài toán

Dự đoán giá kim cương dựa trên các thuộc tính như kiểu cắt, màu, hình dạng, v.v.

Nguồn dữ liệu

# load the dataset from pycaret
from pycaret.datasets import get_data
data = get_data('diamond')

Phân tích khám phá dữ liệu (EDA)

Hãy trực quan hóa nhanh để đánh giá mối quan hệ giữa các đặc trưng độc lập (trọng lượng, kiểu cắt, màu, độ trong, v.v.) với biến mục tiêu là Giá:

# plot scatter carat_weight and Price
import plotly.express as px
fig = px.scatter(x=data['Carat Weight'], y=data['Price'], facet_col = data['Cut'], opacity = 0.25, trendline='ols', trendline_color_override = 'red')
fig.show()

Hãy kiểm tra biểu đồ histogram của biến mục tiêu Price.

# plot histogram fig = px.histogram(data, x=["Price"]) fig.show()

Lưu ý rằng phân phối của Price lệch phải; ta có thể nhanh chóng kiểm tra xem phép biến đổi log có thể thay đổi phân phối (hình dạng) của biến mục tiêu hay không.

# plot histogram data['logged_Price'] = np.log(data['Price']) fig = px.histogram(data, x=["logged_Price"]) fig.show()

Làm sạch và chuẩn bị dữ liệu

Mọi thí nghiệm trong PyCaret phải được khởi tạo bằng hàm setup. Hàm này chịu trách nhiệm cho tất cả tác vụ chuẩn bị dữ liệu cần thiết trước khi huấn luyện mô hình. Ngoài việc thực hiện một số xử lý mặc định cơ bản, PyCaret còn cung cấp một loạt tính năng tiền xử lý phong phú. Nhấp vào đây để tìm hiểu thêm về mọi chức năng tiền xử lý trong PyCaret.

# initialize setup
from pycaret.regression import *
s = setup(data, target = 'Price', transform_target = True, log_experiment = True, experiment_name = 'diamond')

Khi bạn khởi tạo hàm setup trong PyCaret, nó sẽ lập hồ sơ tập dữ liệu và suy luận kiểu dữ liệu cho tất cả đặc trưng đầu vào. Nếu mọi kiểu dữ liệu được suy luận chính xác, bạn có thể nhấn Enter để tiếp tục. Cũng có tham số cho phép ghi đè kiểu dữ liệu trong PyCaret. Ngoài ra, nếu bạn dùng PyCaret trong script Python, bạn có thể tắt xác nhận này bằng cách truyền silent = True trong hàm setup.

(Kết quả từ setup — đã rút gọn khi hiển thị)

Huấn luyện và chọn mô hình ML

Sau khi setup, dữ liệu đã biến đổi sẵn sàng cho huấn luyện mô hình. Bạn có thể bắt đầu quá trình huấn luyện bằng hàm compare_models. Hàm này sẽ huấn luyện tất cả thuật toán có trong model zoo và đánh giá nhiều thước đo hiệu năng bằng k-fold cross-validation.

# compare all models
best = compare_models()
(Kết quả từ compare_models)

Kết quả từ compare_models hiển thị các chỉ số được lấy trung bình qua cross-validation cho tất cả mô hình. Theo mặc định, kết quả được sắp xếp theo ‘R2’ (cao đến thấp), nhưng có thể thay đổi bằng cách truyền tham số sort trong hàm compare_models.

Mô hình tốt nhất (trong trường hợp này là CatBoost Regressor) được trả về sau khi compare_models hoàn tất. Theo mặc định chỉ trả về mô hình tốt nhất, nhưng có thể thay đổi với tham số n_select. Ví dụ, truyền n_select = 3 trong compare_models sẽ trả về 3 mô hình đứng đầu dưới dạng danh sách.

# check the final params of best model
best.get_params()

Chúng ta cũng có thể kiểm tra chẩn đoán và một vài biểu đồ phân tích khác bằng hàm plot_model.

# check the residuals of trained model
plot_model(best, plot = 'residuals_interactive')
plot_model(best, plot = ‘feature’)

Còn một hàm nữa là evaluate_model, cách thuận tiện để duyệt tất cả biểu đồ phân tích có sẵn trong Jupyter Notebook.

evaluate_model(best)

Triển khai và giám sát mô hình ML

Bây giờ ta có thể dùng mô hình cuối cùng để tạo dự đoán trên dữ liệu chưa thấy với hàm predict_model:

# copy data and remove target variable
data_unseen = data.copy()
data_unseen.drop(‘Price’, axis = 1, inplace = True)
predictions = predict_model(best, data = data_unseen)

Để dùng sau này, bạn có thể lưu toàn bộ pipeline bằng hàm save_model.

save_model(best, ‘my_best_pipeline’)

Ghi nhật ký thí nghiệm

Nhớ rằng ta đã truyền log_experiment = True trong hàm setup cùng với experiment_name = 'diamond'. Hãy xem PyCaret đã làm gì phía sau. Để thấy "phép màu", hãy khởi chạy máy chủ MLflow:

# within notebook
!mlflow ui

# from the command line
mlflow ui

Bây giờ mở trình duyệt và gõ “localhost:5000”. Bạn sẽ thấy một giao diện như sau:

Mỗi mục trong bảng trên đại diện cho một lượt huấn luyện tạo ra một pipeline đã huấn luyện và một loạt siêu dữ liệu như thời gian chạy, các chỉ số hiệu năng, siêu tham số mô hình, thẻ, v.v. Hãy bấm vào một trong các mô hình:

Dự báo chuỗi thời gian với PyCaret

Mô-đun chuỗi thời gian mới của PyCaret hiện có ở bản beta. Giữ đúng tinh thần đơn giản của PyCaret, mô-đun này nhất quán với API hiện có và được trang bị đầy đủ chức năng: kiểm định thống kê, huấn luyện và chọn mô hình (hơn 30 thuật toán), phân tích mô hình, tinh chỉnh siêu tham số tự động, ghi nhật ký thí nghiệm, triển khai lên đám mây và hơn thế nữa. Tất cả chỉ với vài dòng mã (giống như các mô-đun khác của PyCaret). Nếu bạn muốn dùng mô-đun beta này, bạn phải cài nó trong một môi trường conda riêng để tránh xung đột phụ thuộc.

pip install pycaret-ts-alpha

Dữ liệu chuỗi thời gian là một trong những loại dữ liệu phổ biến nhất và hiểu cách làm việc với nó là kỹ năng khoa học dữ liệu quan trọng nếu bạn muốn dự báo và báo cáo xu hướng. Nếu muốn tìm hiểu thêm về phân tích và dự báo chuỗi thời gian trong Python, DataCamp có một bộ khóa học rất hay. Bạn có thể bắt đầu với lộ trình học Time Series with Python hoặc một trong các khóa sau cũng là lựa chọn tuyệt vời:

Tích hợp với PyCaret

Lĩnh vựcTích hợp
Mô hìnhscikit-learn, XGBoost, LightGBM, CatBoost
Huấn luyện trên GPURAPIDS.AI
Tính toán phân tánRAY
Tinh chỉnh siêu tham sốtune-sklearn, optuna
Vẽ biểu đồ & Phân tíchplotly, yellowbrick, seaborn, matplotlib
NLPgensim, spacy, nltk
MLOpsMLflow

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

  1. PyCaret chỉ có trên Python thôi đúng không? Đúng, hiện PyCaret chỉ có trên Python.

  2. Khác biệt giữa PyCaret và các thư viện máy học mã nguồn mở khác như scikit-learn, XGBoost, LightGBM là gì? So với các thư viện máy học mã nguồn mở khác, PyCaret là một thư viện low-code thay thế có thể thay thế hàng trăm dòng mã chỉ bằng vài dòng. Về bản chất, PyCaret là một lớp bọc Python quanh nhiều thư viện và khung máy học như scikit-learn, XGBoost, LightGBM, CatBoost, spaCy, Optuna, Hyperopt, Ray và một vài thư viện khác.

  3. PyCaret hỗ trợ những trường hợp sử dụng nào? Tính đến bản phát hành 2.3.4, PyCaret hỗ trợ Phân loại nhị phân/đa lớp, Hồi quy, Phân cụm, Phát hiện bất thường, Xử lý ngôn ngữ tự nhiên (Mô hình chủ đề) và Khai phá luật kết hợp. PyCaret cũng vừa phát hành mô-đun chuỗi thời gian mới ở bản beta dưới dạng trình cài đặt pip riêng.

  4. Chúng ta có thể dùng PyCaret trên GPU không? Bạn có thể huấn luyện mô hình trên GPU trong PyCaret và tăng tốc quy trình làm việc lên 10 lần. Để huấn luyện mô hình trên GPU, chỉ cần truyền use_gpu = True trong hàm setup. Cách dùng API không thay đổi, tuy nhiên trong một số trường hợp cần cài thêm thư viện vì chúng không được cài trong bản mặc định hoặc bản đầy đủ.

  5. Có thể tinh chỉnh siêu tham số mô hình trong PyCaret không? Có, bạn có thể tự động tinh chỉnh siêu tham số của bất kỳ mô hình nào trong PyCaret. Nó tích hợp với sklearn, optuna, tune-sklearn và ray cho các bộ tinh chỉnh như Random Grid Search hoặc Bayesian Grid Search.

  6. PyCaret có miễn phí không? PyCaret hoàn toàn miễn phí, mã nguồn mở và được cấp phép theo giấy phép MIT.

Tài nguyên PyCaret----
⭐ Hướng dẫnMới dùng PyCaret? Hãy xem các notebook chính thức!
📋 NotebooksNotebook ví dụ do cộng đồng tạo.
📙 BlogCác hướng dẫn và bài viết từ cộng tác viên.
📚 Tài liệuTài liệu API chi tiết của PyCaret
📺 Video Hướng dẫnVideo hướng dẫn của chúng tôi từ nhiều sự kiện.
📢 Thảo luậnCó câu hỏi? Hãy trao đổi với cộng đồng và cộng tác viên.
🛠️ <atarget="_blank" href="https://github.com/pycaret/pycaret/blob/master/CHANGELOG.md">ChangelogCác thay đổi và lịch sử phiên bản.
🌳 Lộ trìnhKế hoạch phát triển phần mềm và cộng đồng của PyCaret.

Chủ đề

Liên quan