交叉验证和网格搜索---入门 - 实践
2026-01-01 15:29 tlnshuju 阅读(0) 评论(0) 收藏 举报交叉验证(Cross-Validation)
交叉验证是一种评估机器学习模型性能的统计方法,凭借将资料集划分为多个子集,轮流采用部分子集作为训练集和验证集,以减少过拟合风险并更准确地评估模型泛化能力。
K折交叉验证(K-Fold CV)
将材料集均分为K个子集(称为“折”),每次使用K-1个子集训练模型,剩余1个子集验证,重复K次后取平均性能。典型值为K=5或10。
公式:
$$\text{CV Score} = \frac{1}{K} \sum_{i=1}^{K} \text{Score}_i$$
留一交叉验证(LOOCV)
K折的特殊情况,K等于样本数,每次仅留一个样本作为验证集。计算成本高但适用于小内容集。
分层交叉验证(Stratified CV)
保持每一折中类别比例与原始数据集一致,适用于分类问题中的不平衡数据。
网格搜索(Grid Search)
网格搜索是一种超参数优化方法,通过遍历预定义的参数组合,选择模型性能最佳的超参数配置。
实现步骤
- 定义超参数网格:例如学习率[0.01, 0.1]、树深度[3, 5]。
- 对每种组合训练模型并评估(通常结合交叉验证)。
- 选择验证集上得分最高的参数组合。
示例代码(Scikit-learn)
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
param_grid = {'n_estimators': [50, 100], 'max_depth': [3, 5]}
model = RandomForestClassifier()
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X_train, y_train)
best_params = grid_search.best_params_
结合交叉验证的网格搜索
网格搜索常与交叉验证结合(如GridSearchCV),在每一组超参数下通过交叉验证计算平均性能,避免单次数据划分的偏差。
优点
- 系统性探索参数空间,避免遗漏最优解。
- 交叉验证提供更稳健的性能评估。
缺点
- 计算成本随参数数量指数级增长。
- 需预先定义参数范围,可能错过范围外的优化点。
替代方法如随机搜索(RandomizedSearchCV)或贝叶斯优化可降低计算负担。