Python PyCaret AutoML 自動機器學習:五行程式碼完成模型訓練與預測
什麼是 PyCaret?為什麼它值得學
老實說,我第一次聽到 PyCaret 的時候,內心是有點懷疑的。又一個 AutoML 工具?市面上已經有 scikit-learn、AutoGluon、H2O 了,真的還需要多一個嗎?直到我實際用了之後,才發現 PyCaret 的設計哲學完全不一樣——它追求的是極致的簡潔。
PyCaret 是一個開源的低程式碼機器學習函式庫,建構在 scikit-learn、XGBoost、LightGBM、CatBoost 等主流框架之上。它把整個機器學習流程——從資料前處理、特徵工程、模型訓練、超參數調優到模型部署——全部封裝成簡潔的 API。最誇張的是,你真的只需要五行程式碼就能完成一個完整的 ML pipeline。
對於資料科學初學者或是想要快速做 prototype 的工程師來說,PyCaret 幾乎是目前最友善的選擇。如果你正在學習 Python 自動化工具入門完整指南,那 PyCaret 絕對是你工具箱裡不可或缺的一員。
安裝 PyCaret 與環境建置
安裝 PyCaret 其實蠻簡單的,但有幾個小眉角要注意。建議先建一個獨立的虛擬環境,避免套件衝突:
# 建立虛擬環境(推薦用 uv 或 conda)
python -m venv pycaret-env
source pycaret-env/bin/activate # Windows: pycaret-env\Scripts\activate
# 安裝 PyCaret 3.x
pip install pycaret[full]
# 或者只安裝特定模組
pip install pycaret[classification] # 分類任務
pip install pycaret[regression] # 迴歸任務
pip install pycaret[clustering] # 聚類任務
這裡有個經驗談:如果你用的是 Python 3.12 以上版本,可能會遇到某些依賴套件的相容性問題。我個人建議使用 Python 3.10 或 3.11 搭配 PyCaret,這是目前最穩定的組合。如果你還在用 pip 管理套件,不妨試試 Ruff 來加速你的開發流程。
五行程式碼完成模型訓練流程
這就是 PyCaret 最讓人驚豔的地方。來看看這五行程式碼能做到什麼:
from pycaret.classification import *
# 第 1 行:載入資料集
data = get_data('diabetes')
# 第 2 行:初始化實驗環境(自動處理前處理)
setup(data, target='Class variable', session_id=42)
# 第 3 行:比較所有模型,找出最佳演算法
best_model = compare_models()
# 第 4 行:建立最終模型
final_model = finalize_model(best_model)
# 第 5 行:儲存模型
save_model(final_model, 'diabetes_model')
就這樣,五行程式碼。PyCaret 在背後幫你做了什麼事?資料清洗、缺失值填補、類別變數編碼、特徵縮放、訓練/測試集分割、交叉驗證——全部自動完成。setup() 函式會跳出一個互動式確認畫面,讓你檢查它推斷的資料型態是否正確。
說真的,第一次看到 compare_models() 的輸出表格時,我整個人都愣住了。它會自動跑十幾種演算法(Random Forest、XGBoost、LightGBM、SVM、KNN...),用交叉驗證比較 Accuracy、AUC、Recall、Precision 等指標,然後排序給你看。
compare_models 自動比較演算法
compare_models() 是 PyCaret 的殺手級功能。它不只是跑模型那麼簡單,還有很多實用的參數可以調整:
# 只比較特定模型
best = compare_models(include=['rf', 'xgboost', 'lightgbm', 'catboost'])
# 用 AUC 而非 Accuracy 來排序
best = compare_models(sort='AUC')
# 取前 3 名模型
top3 = compare_models(n_select=3)
# 設定交叉驗證折數
best = compare_models(fold=10)
# 排除某些模型(例如訓練太慢的)
best = compare_models(exclude=['svm', 'knn'])
我自己的習慣是先用預設參數跑一次 compare_models(),看看哪些模型表現比較好,然後再用 include 參數縮小範圍做更精細的比較。這個策略在處理大資料集時特別有用,可以節省不少時間。
模型調參與超參數優化
找到最佳模型之後,下一步就是調參了。PyCaret 的 tune_model() 預設使用隨機搜尋(Random Search),但你也可以切換成其他搜尋策略:
# 基本調參
tuned_model = tune_model(best_model)
# 指定優化指標
tuned_model = tune_model(best_model, optimize='F1')
# 增加迭代次數(更仔細搜尋)
tuned_model = tune_model(best_model, n_iter=100)
# 使用 Optuna 做貝氏優化
tuned_model = tune_model(best_model, search_library='optuna')
# 自訂搜尋空間
custom_grid = {'n_estimators': [100, 200, 500],
'max_depth': [3, 5, 7, 10],
'learning_rate': [0.01, 0.05, 0.1]}
tuned_model = tune_model(best_model, custom_grid=custom_grid)
這裡分享一個實務技巧:如果你的資料型態比較複雜,建議先用 Pydantic v2 資料驗證 確認輸入資料的格式正確,再丟進 PyCaret。資料品質永遠是模型表現的第一道關卡。
預測與模型部署實戰
模型訓練好之後,PyCaret 提供了很直覺的預測和部署方式:
# 在測試集上預測
predictions = predict_model(tuned_model)
# 對新資料預測
import pandas as pd
new_data = pd.read_csv('new_patients.csv')
predictions = predict_model(tuned_model, data=new_data)
# 儲存模型
save_model(tuned_model, 'production_model')
# 載入模型
loaded_model = load_model('production_model')
# 搭配 FastAPI 做 API 服務
from fastapi import FastAPI
app = FastAPI()
@app.post("/predict")
def predict(data: dict):
df = pd.DataFrame([data])
prediction = predict_model(loaded_model, data=df)
return {"prediction": prediction['prediction_label'].iloc[0]}
PyCaret 3.x 版本還支援直接部署到 AWS、GCP 和 Azure。不過說實話,我更喜歡自己用 FastAPI 包一層 API,這樣彈性更大。如果你想做更進階的資料分析,可以搭配 Polars DataFrame 來加速資料處理。
PyCaret vs scikit-learn vs AutoGluon 比較
| 特性 | PyCaret | scikit-learn | AutoGluon |
|---|---|---|---|
| 學習曲線 | 極低 | 中等 | 低 |
| 程式碼量 | 5-10 行 | 50-100 行 | 10-20 行 |
| 自動前處理 | 完整 | 需手動 | 完整 |
| 模型比較 | 一鍵完成 | 需手動迴圈 | 自動 |
| 視覺化 | 內建豐富 | 需搭配 matplotlib | 有限 |
| 深度學習 | 有限支援 | 不支援 | 完整支援 |
| 適用場景 | 快速原型/教學 | 客製化需求 | 競賽/追求極致精度 |
我的看法是:PyCaret 適合 80% 的場景。當你需要快速驗證一個想法、做 EDA(探索性資料分析)、或是在會議前快速準備一個 baseline 模型時,PyCaret 無疑是最快的選擇。但如果你需要深度客製化或是處理超大規模資料,還是得回到 scikit-learn 或 AutoGluon。
實務踩坑經驗與最佳實踐
用了 PyCaret 大半年,我整理了幾個常見的踩坑點和最佳實踐:
1. 記得設定 session_id:setup() 裡的 session_id 就是隨機種子,不設定的話每次結果都不一樣,debug 會很痛苦。
2. 注意記憶體使用:compare_models() 會同時訓練十幾個模型,資料集大的時候記憶體可能不夠。可以用 include 參數限制比較的模型數量。
3. 善用 experiment logging:PyCaret 原生支援 MLflow,開啟 log_experiment=True 就能追蹤所有實驗記錄。
# 啟用 MLflow 追蹤
setup(data, target='target',
session_id=42,
log_experiment=True,
experiment_name='my_project')
4. 處理不平衡資料:setup() 有 fix_imbalance 參數,會自動用 SMOTE 做過採樣。但我建議先了解你的資料分布再決定要不要開啟。
5. 自訂管線:PyCaret 3.x 支援 add_custom_pipeline_step(),可以把你自己的前處理邏輯插入 pipeline 中,非常方便。
整體來說,PyCaret 大幅降低了機器學習的入門門檻。不管你是資料科學新手還是想要加速開發流程的老手,都值得花一點時間學起來。搭配 Python 生態系的其他工具,你可以用極少的程式碼完成原本需要大量工程的 ML 任務。
你可能也喜歡
探索其他領域的精選好文