name: automl-skill description: > AutoML 自動化機器學習技能 | Automated Machine Learning Skill. 基於 PyCaret 進行低程式碼機器學習建模,支援分類、迴歸、聚類、異常檢測、時間序列預測、自然語言處理和關聯規則挖掘等任務。 未來將整合更多 AutoML 庫(如 AutoGluon、FLAML 等)。 當用戶需要快速構建機器學習模型、自動化模型選擇、超引數調優、模型整合、特徵工程或進行 AutoML 實驗時使用此技能。 適用於資料科學家、公民資料科學家、機器學習工程師和希望快速原型開發的人員。 觸發關鍵詞:AutoML、機器學習自動化、PyCaret、分類模型、迴歸模型、聚類、異常檢測、時間序列、文本分類、模型調優、模型比較、特徵選擇、統計檢驗、顯著性檢驗、A/B測試。 Trigger keywords in English: AutoML, automated machine learning, PyCaret, classification, regression, clustering, anomaly detection, time series forecasting, NLP, text mining, model tuning, model comparison, feature engineering, statistical test, significance testing, A/B testing.
本技能幫助使用者使用 PyCaret 快速構建端到端的機器學習工作流。PyCaret 是一個開源的低程式碼機器學習庫,可以將數百行程式碼簡化為幾行。
This skill helps users build end-to-end machine learning workflows using PyCaret, an open-source low-code ML library that simplifies hundreds of lines of code into just a few lines.
當需要統計推斷、假設檢驗、置信區間時,可以使用 statsmodels 補充 PyCaret:
import statsmodels.api as sm
# OLS 迴歸(帶統計顯著性)
X = sm.add_constant(X) # 新增截距
model = sm.OLS(y, X).fit()
print(model.summary()) # R², F檢驗, P值, 置信區間
# 二項分佈 GLM (Logistic 迴歸)
glm_model = sm.GLM(y, X, family=sm.families.Binomial()).fit()
# 泊松迴歸 (計數資料)
poisson_model = sm.GLM(y, X, family=sm.families.Poisson()).fit()
from scipy import stats
# t 檢驗
t_stat, p_value = stats.ttest_ind(group1, group2)
# 卡方檢驗
chi2, p_value, dof, expected = stats.chi2_contingency(contingency_table)
# ANOVA
f_stat, p_value = stats.f_oneway(*groups)
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.statespace.sarimax import SARIMAX
# ARIMA 模型
arima_model = ARIMA(train_data, order=(1,1,1)).fit()
forecast = arima_model.forecast(steps=12)
# 季節性 SARIMAX
sarimax_model = SARIMAX(data, order=(1,1,1), seasonal_order=(1,1,1,12)).fit()
# 殘差自相關檢驗 (Durbin-Watson)
from statsmodels.stats.stattools import durbin_watson
dw = durbin_watson(model.resid)
# 異方差檢驗
from statsmodels.stats.diagnostic import het_breuschpagan
bp_test = het_breuschpagan(model.resid, model.model.exog)
# 正態性檢驗
from scipy import stats
shapiro_stat, shapiro_p = stats.shapiro(model.resid)
# 混合線性模型 (Panel Data / 多層次資料)
from statsmodels.regression.mixed_linear_model import MixedLM
mixed_model = MixedLM(y, X, groups=group_var).fit()
# 1. 用 PyCaret 快速建模和選擇模型
from pycaret.classification import *
clf = setup(data, target='target')
best = compare_models()
tuned = tune_model(best)
# 2. 用 statsmodels 做統計推斷
import statsmodels.api as sm
# 獲取 PyCaret 模型的特徵和預測
X_with_const = sm.add_constant(X_test)
sm_model = sm.Logit(y_test, X_with_const).fit(disp=0)
print(sm_model.summary()) # 係數顯著性 P值
| 模組 | Module | 任務型別 | Task Type | 參考文件 |
|---|---|---|---|---|
| pycaret.classification | Classification | 二分類、多分類 | Binary, Multi-class | classification.md |
| pycaret.regression | Regression | 迴歸預測 | Regression | regression.md |
| pycaret.clustering | Clustering | 無監督聚類 | Unsupervised Clustering | clustering.md |
| pycaret.anomaly | Anomaly Detection | 異常檢測 | Outlier Detection | anomaly.md |
| pycaret.time_series | Time Series | 時間序列預測 | Time Series Forecasting | time_series.md |
| pycaret.nlp | NLP | 文本分類、主題建模 | Text Classification, Topic Modeling | nlp.md |
| pycaret.arules | Association Rules | 關聯規則挖掘 | Market Basket Analysis | association_rules.md |
根據您的機器學習任務,選擇相應的模組:
pycaret.classificationpycaret.regressionpycaret.clusteringpycaret.anomalypycaret.time_seriespycaret.nlppycaret.arules完整的 AutoML 工作流程包含以下步驟:
# 資料載入
import pandas as pd
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
# 或使用 PyCaret 內建資料集
from pycaret.classification import get_data
data = get_data('breast_cancer')
# 基本資訊
print(f"資料形狀: {data.shape}")
print(f"資料型別:\n{data.dtypes}")
# 缺失值分析
missing = data.isnull().sum()
missing_pct = (missing / len(data) * 100).round(2)
print(f"缺失值比例:\n{pd.concat([missing, missing_pct], axis=1)}")
# 目標變數分佈
data['target'].value_counts()
# 數值特徵統計
data.describe()
# 初始化環境 - 資料預處理配置
clf = setup(
data,
target='target',
# ===== 缺失值處理 =====
numeric_imputation='mean', # 數值型: mean/median/mode/knn/iterative
categorical_imputation='mode', # 類別型: mode/constant
# ===== 異常值處理 =====
remove_outliers=True, # 移除異常值
outliers_method='iforest', # iforest/ee/lof
outliers_threshold=0.05, # 異常值比例
# ===== 類別不平衡處理 =====
fix_imbalance=True, # 處理類別不平衡
fix_imbalance_method='SMOTE', # SMOTE/ADASYN/RandomOverSampler
# ===== 資料型別指定 =====
numeric_features=['age', 'income', 'score'],
categorical_features=['city', 'gender', 'occupation'],
date_features=['Date', 'created_at'],
session_id=42
)
clf = setup(
data,
target='target',
# ===== 特徵縮放 =====
normalize=True, # 歸一化
normalize_method='zscore', # zscore/minmax/maxabs/robust
# ===== 特徵變換 =====
transformation=True, # 變換使資料更接近正態分佈
transformation_method='yeo-johnson', # yeo-johnson/quantile
# ===== 特徵選擇 =====
feature_selection=True, # 特徵選擇
feature_selection_method='classic', # classic/univariate/sequential
n_features_to_select=0.2, # 選擇20%最重要特徵
# ===== 降維 =====
pca=True, # PCA降維
pca_method='linear', # linear/kernel/incremental
pca_components=0.95, # 保留95%方差
# ===== 多重共線性處理 =====
remove_multicollinearity=True,
multicollinearity_threshold=0.9,
# ===== 特徵編碼 =====
ordinal_features={'education': ['high_school', 'bachelor', 'master', 'phd']},
high_cardinality_features='frequency', # 處理高基數類別特徵
# ===== 特徵互動 =====
polynomial_features=True,
polynomial_degree=2,
# ===== 分箱(離散化) =====
bin_numeric_features=['age', 'income'],
session_id=42
)
# 比較所有模型
best_model = compare_models()
# 指定模型列表比較
best_model = compare_models(include=['lr', 'rf', 'xgboost', 'catboost', 'lightgbm'])
# 快速模式(排除耗時模型)
best_model = compare_models(turbo=True)
# 按特定指標排序
best_model = compare_models(sort='F1') # 對於不平衡資料
# 建立模型
model = create_model('rf')
# 指定模型引數
model = create_model('xgboost', n_estimators=100, max_depth=5)
# 自動調優
tuned_model = tune_model(model)
# 自定義調優
tuned_model = tune_model(
model,
custom_grid={
'n_estimators': [100, 200, 300],
'max_depth': [3, 5, 7, None],
'learning_rate': [0.01, 0.1, 0.3]
},
optimize='Accuracy', # 分類: Accuracy/AUC/Recall/Precision/F1/MCC
# 迴歸: RMSE/MSE/MAE/R2/RMSLE/MAPE
choose_better=True, # 返回更好的模型
n_iter=50 # 迭代次數
)
# 互動式評估
evaluate_model(tuned_model)
# 各種評估圖表
plot_model(tuned_model, plot='auc') # ROC曲線
plot_model(tuned_model, plot='confusion_matrix') # 混淆矩陣
plot_model(tuned_model, plot='classification_report') # 分類報告
plot_model(tuned_model, plot='learning_curve') # 學習曲線
plot_model(tuned_model, plot='feature') # 特徵重要性
plot_model(tuned_model, plot='residuals') # 殘差圖(迴歸)
plot_model(tuned_model, plot='error') # 預測誤差
# 交叉驗證結果
results = pull() # 獲取當前實驗結果
# SHAP 解釋
interpret_model(tuned_model)
# Permutation Importance
interpret_model(tuned_model, plot='correlation')
# 區域性解釋
interpret_model(tuned_model, plot='reason', observation=0)
# Bagging
bagged = ensemble_model(tuned_model, method='Bagging')
# Boosting
boosted = ensemble_model(tuned_model, method='Boosting')
# 融合多個模型
blended = blend_models(
estimator_list=['lr', 'dt', 'rf', 'xgboost'],
method='soft', # soft/hard
weights=[1, 2, 3, 2] # 各模型權重
)
# 堆疊
stacked = stack_models(
estimator_list=['lr', 'dt', 'rf'],
meta_model='xgboost',
restack=False # 是否允許基礎模型使用原始特徵
)
# 在全部資料上訓練最終模型 final_model = finalize_model(tuned_model) # 預測 predictions = predict_model(final_model, data=test) # 預測機率(分類) predictions = predict_model( final_model, data=test, probability_threshold=0.7 # 自定義閾值 )小蔥技能站7w4.net發現了升級外掛。
# 儲存模型(包含完整Pipeline)
save_model(final_model, 'my_model')
# 儲存實驗配置
save_experiment('my_experiment')
# 載入模型
loaded_model = load_model('my_model')
# 部署到雲平臺
deploy_model(
final_model,
platform='aws', # aws/gcp/azure
authentication={
'bucket': 'my-bucket'
}
)
# 建立Web應用
create_app(final_model, app_path='app.py')
# 建立REST API
create_api(final_model, api_name='predict', api_file='predict.py')
# 建立Docker
create_docker('my_model', docker_path='Dockerfile')
from pycaret.classification import *
import pandas as pd
# ========== Step 1: 資料載入 ==========
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
# ========== Step 2: 資料探索 ==========
print(f"訓練集: {train.shape}, 測試集: {test.shape}")
print(f"缺失值:\n{train.isnull().sum()}")
print(f"目標分佈:\n{train['target'].value_counts()}")
# ========== Step 3-4: 資料預處理 + 特徵工程 ==========
clf = setup(
train,
target='target',
# 資料預處理
numeric_imputation='median',
categorical_imputation='mode',
remove_outliers=True,
outliers_method='iforest',
fix_imbalance=True,
fix_imbalance_method='SMOTE',
# 特徵工程
normalize=True,
normalize_method='zscore',
feature_selection=True,
n_features_to_select=0.3,
remove_multicollinearity=True,
polynomial_features=True,
polynomial_degree=2,
# 劃分配置
train_size=0.8,
fold_strategy='stratifiedkfold',
fold=5,
session_id=42
)
# ========== Step 5: 模型選擇 ==========
best = compare_models(sort='AUC')
# ========== Step 6-7: 訓練與調優 ==========
tuned = tune_model(best, optimize='AUC', n_iter=30)
# ========== Step 8-9: 評估與解釋 ==========
evaluate_model(tuned)
interpret_model(tuned)
# ========== Step 10: 整合(可選) ==========
# ensemble = ensemble_model(tuned)
# ========== Step 11: 最終預測 ==========
final = finalize_model(tuned)
predictions = predict_model(final, data=test)
# ========== Step 12: 儲存 ==========
save_model(final, 'best_model')
詳細內容請參考 utilities.md
from pycaret.classification import get_data
# 列出資料集
all_datasets = get_data('index')
# 載入資料集
data = get_data('breast_cancer')
from pycaret.classification import get_config, set_config
# 獲取配置
X_train = get_config('X_train')
# 設定配置
set_config('seed', 123)
# 比較模型
best = compare_models()
# 建立模型
model = create_model('rf')
# 調優模型
tuned = tune_model(model)
# 整合
ensemble = ensemble_model(model)
# 預測
predictions = predict_model(model, data=new_data)
# 儲存/載入
save_model(model, 'my_model')
loaded = load_model('my_model')
| 模組 | 包含內容 | 檔案 |
|---|---|---|
| 引數深度分析 | setup引數選擇指南、決策樹、實戰配置 | setup_parameters_deep_dive.md |
| Classification | setup 引數、模型列表、評估指標、工作流 | classification.md |
| Regression | setup 引數、迴歸模型、評估指標、工作流 | regression.md |
| Time Series | 時間序列特有引數、預測、季節性 | time_series.md |
| Clustering | 聚類演算法、輪廓係數、分配標籤 | clustering.md |
| Anomaly | 異常檢測演算法、視覺化 | anomaly.md |
| NLP | 主題模型、文本處理、詞雲 | nlp.md |
| Association Rules | 關聯規則、支援度、置信度 | association_rules.md |
| Utilities | 通用函式、部署、應用生成 | utilities.md |
from pycaret.classification import *
data = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
clf = setup(data, target='target', train_size=0.8)
best = compare_models()
tuned = tune_model(best)
ensemble = ensemble_model(tuned)
predictions = predict_model(ensemble, data=test)
save_model(ensemble, 'classifier')
from pycaret.regression import *
data = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
reg = setup(data, target='price', normalize=True)
best = compare_models()
tuned = tune_model(best, optimize='RMSE')
predictions = predict_model(tuned, data=test)
save_model(tuned, 'regressor')
from pycaret.time_series import *
data = get_data('airline')
ts = setup(data, fh=12, seasonal_period=12)
best = compare_models()
model = create_model('arima')
predictions = predict_model(model, fh=24)
normalize=True, remove_outliers=True 等引數compare_models(turbo=True) 快速驗證n_iterensemble_model 或 stack_modelsfinalize_model() 在全量資料上訓練這是一個質量較高的 AutoML 技能,基於成熟的 PyCaret 庫。文件覆蓋全面,從基礎到進階都有涉及,中英雙語友好,工作流示例清晰易懂。優點是功能齊全、案例豐富,缺點是對完全零基礎的使用者有一定難度,且缺少依賴安裝說明,部署時可能需要額外配置環境。