超参数调优进阶:Optuna/Bayesian/Early Stopping

超参数调优进阶:Optuna/Bayesian/Early Stopping

1. 调优方法对比

复制代码
超参数调优方法:
├── 网格搜索(Grid Search):穷举所有组合,慢但全面
├── 随机搜索(Random Search):随机采样,快但不保证最优
├── 贝叶斯优化(Bayesian):基于历史结果智能搜索
└── 早停法(Early Stopping):训练中动态停止

2. Optuna 调优

python 复制代码
import optuna
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

def objective(trial):
    params = {
        'n_estimators': trial.suggest_int('n_estimators', 50, 300),
        'max_depth': trial.suggest_int('max_depth', 3, 15),
        'min_samples_split': trial.suggest_int('min_samples_split', 2, 20),
        'min_samples_leaf': trial.suggest_int('min_samples_leaf', 1, 10),
        'max_features': trial.suggest_categorical('max_features', ['sqrt', 'log2', None]),
    }
    
    model = RandomForestClassifier(**params, random_state=42)
    scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
    return scores.mean()

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100, show_progress_bar=True)

print(f"最佳参数: {study.best_params}")
print(f"最佳分数: {study.best_value:.4f}")

3. XGBoost + Optuna

python 复制代码
import optuna
import xgboost as xgb

def objective_xgb(trial):
    params = {
        'n_estimators': trial.suggest_int('n_estimators', 50, 500),
        'max_depth': trial.suggest_int('max_depth', 3, 12),
        'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.3, log=True),
        'subsample': trial.suggest_float('subsample', 0.6, 1.0),
        'colsample_bytree': trial.suggest_float('colsample_bytree', 0.6, 1.0),
        'reg_alpha': trial.suggest_float('reg_alpha', 1e-8, 10.0, log=True),
        'reg_lambda': trial.suggest_float('reg_lambda', 1e-8, 10.0, log=True),
    }
    
    model = xgb.XGBClassifier(**params, random_state=42, use_label_encoder=False)
    scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
    return scores.mean()

study = optuna.create_study(direction='maximize')
study.optimize(objective_xgb, n_trials=200)

4. Early Stopping

python 复制代码
import lightgbm as lgb

train_data = lgb.Dataset(X_train, label=y_train)
val_data = lgb.Dataset(X_val, label=y_val, reference=train_data)

params = {
    'objective': 'binary',
    'metric': 'binary_logloss',
    'learning_rate': 0.05,
    'num_leaves': 31,
}

callbacks = [
    lgb.early_stopping(stopping_rounds=50),
    lgb.log_evaluation(period=10),
]

model = lgb.train(
    params, train_data,
    valid_sets=[val_data],
    num_boost_round=1000,
    callbacks=callbacks,
)

总结

方法 速度 精度 推荐场景
Grid Search 慢 高 小参数空间
Random Search 快 中 快速探索
Optuna 中 高 复杂参数空间
Early Stopping 快 高 训练中使用
相关推荐
Yan-英杰1 分钟前
【论文精读】MSD-ResNet50:多尺度动态卷积 + CBAM,如何把梅花鹿个体识别准确率从 74.2% 提升到 88.7%?
人工智能·卷积神经网络·机器视觉
水如烟2 分钟前
孤能子视角:EIS术语梳理法层与AI构建社会结构模型
人工智能
老唐7773 分钟前
Transformer原理大白话讲解
人工智能·python·深度学习·神经网络·计算机视觉·ai·transformer
组工部管理能手李哥4 分钟前
政务公文智能写作:内网大模型落地实践与落地难点
人工智能·ai写作·政务
金融小师妹4 分钟前
事件驱动分析模型:9月PPI超预期与美联储利率预期对黄金价格的影响
人工智能·云计算·线性回归·pyqt
佳木逢钺7 分钟前
从火灾模拟到系统热寂:一个双非运维如何用零 GPU 推导出多智能体系统的终极死锁
人工智能·python·算法·多智能体
林伽一7 分钟前
端侧模型与运行框架双轮驱动,智能体工程化进入深水区|2026年10月16日
人工智能·科技·安全·ai·开源
moonsims8 分钟前
AiBrainBox 多域有人/无人协同智能系统-从端侧智能到多域协同的国产化验证基础设施
人工智能·无人机
云上先途113 分钟前
智能体提示词标注主要标注哪些维度,和普通文本标注有什么区别?
人工智能·机器学习