目录
3.1. Bagging(Bootstrap Aggregating)
1.前言
模型调优是机器学习实践中至关重要的一环,它关乎模型能否在新数据上表现出良好的泛化能力。本文将重点探讨两种关键的调优手段:超参数搜索策略与模型集成技术,并通过实例演示如何有效优化现有模型性能。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!
2.超参数搜索策略
超参数是在模型训练开始前设定的参数,它们影响着模型的学习过程、结构以及复杂度。合理的选择能够显著提升模型性能。以下介绍两种常见的搜索策略:
2.1. 网格搜索(Grid Search)
网格搜索是一种系统性的遍历策略,它按照预定义的超参数网格逐一尝试所有组合。尽管这种方法穷尽了搜索空间,确保不会错过最优解,但其计算成本随超参数数量和取值范围的增长而急剧上升。
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
# 训练与搜索最优超参数
grid_search.fit(X_train, y_train)
# 输出最优超参数组合及其对应的得分
print("Best parameters:", grid_search.best_params_)
print("Best score:", grid_search.best_score_)
输出结果示例:
1Best parameters: {'C': 10, 'kernel': 'rbf'}
2Best score: 0.8571428571428571
2.2. 随机搜索(Random Search)
随机搜索基于概率分布随机抽样超参数组合进行训练和验证。相较于网格搜索,它更加高效,尤其适用于高维超参数空间。尽管可能无法找到全局最优解,但在实践中往往能以较低的计算成本找到接近最优的配置。
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
param_distributions = {'C': uniform(loc=0.1, scale=9.9), 'gamma': uniform(loc=0.1, scale=9.9)}
random_search = RandomizedSearchCV(SVC(), param_distributions, n_iter=20, cv=5, random_state=42)
random_search.fit(X_train, y_train)
# 输出最优超参数组合及其对应的得分
print("Best parameters:", random_search.best_params_)
print("Best score:", random_search.best_score_)
输出结果示例:
1Best parameters: {'C': 9.818181818181818, 'gamma': 9.636363636363637}
2Best score: 0.8½
3.模型集成技术
模型集成通过组合多个模型的预测结果,旨在提高整体性能和鲁棒性。以下介绍两种主流集成方法:
3.1. Bagging(Bootstrap Aggregating)
Bagging通过自助采样生成多个数据子集,训练独立的基模型,并通过投票或平均等方法融合预测结果。典型代表如随机森林(Random Forest)。
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
param_distributions = {'C': uniform(loc=0.1, scale=9.9), 'gamma': uniform(loc=0.1, scale=9.9)}
random_search = RandomizedSearchCV(SVC(), param_distributions, n_iter=20, cv=5, random_state=42)
random_search.fit(X_train, y_train)
# 输出最优超参数组合及其对应的得分
print("Best parameters:", random_search.best_params_)
print("Best score:", random_search.best_score_)
输出结果示例:
1Accuracy: 0.91
3.2. Boosting
Boosting通过迭代训练一系列弱学习器,每个后续模型重点关注前一轮中分类错误的样本,逐步提升整体模型性能。常见算法包括AdaBoost、Gradient Boosting和XGBoost。
from xgboost import XGBClassifier
boosting_model = XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42)
boosting_model.fit(X_train, y_train, eval_set=[(X_test, y_test)], early_stopping_rounds=10)
# 预测并评估集成模型性能
y_pred = boosting_model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
输出结果示例:
1Accuracy: 0.93
4.实例:优化现有模型性能
假定我们有一个基础的决策树模型,在某数据集上表现欠佳。以下步骤展示了如何运用超参数调整与模型集成来优化其性能:
4.1.超参数调整
首先,利用网格搜索或随机搜索对决策树模型进行超参数优化。
from sklearn.tree import DecisionTreeClassifier
# 定义超参数网格或分布
param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 5, 10]}
# 或 param_distributions = {'max_depth': uniform(3, 8), 'min_samples_split': uniform(1, 15)}
# 使用GridSearchCV或RandomizedSearchCV进行超参数搜索
search_method.fit(X_train, y_train)
# 获取优化后的模型
optimized_tree = search_method.best_estimator_
4.2.模型集成
然后,将优化后的决策树模型融入Bagging或Boosting框架中,构建集成模型。
# 使用优化后的决策树作为基模型
bagging_ensemble = BaggingClassifier(base_estimator=optimized_tree, n_estimators=50, random_state=42)
boosting_ensemble = GradientBoostingClassifier(base_estimator=optimized_tree, n_estimators=50, learning_rate=0.1, random_state=42)
# 分别训练集成模型
bagging_ensemble.fit(X_train, y_train)
boosting_ensemble.fit(X_train, y_train)
# 预测并比较集成模型性能
bagging_accuracy = accuracy_score(y_test, bagging_ensemble.predict(X_test))
boosting_accuracy = accuracy_score(y_test, boosting_ensemble.predict(X_test))
print("Bagging Accuracy:", bagging_accuracy)
print("Boosting Accuracy:", boosting_accuracy)
注释:输出结果示例:
1Bagging Accuracy: 0.Ⅰ
2Boosting Accuracy: 0.Ⅱ
通过上述步骤,我们成功地对基础决策树模型进行了超参数调整,并将其集成到Bagging和Boosting框架中,显著提升了模型在测试集上的性能。这有力地证明了超参数搜索策略与模型集成技术在模型调优过程中的价值与实用性。
5.总结
综上所述,模型调优是一门结合科学方法与艺术直觉的实践,其中超参数搜索策略与模型集成技术是两大核心工具。掌握并灵活运用这些技术,不仅能提升模型在特定任务上的表现,还能深化对复杂数据现象的洞察与建模能力。
标签:集成,search,模型,random,train,参数,搜索,调优 From: https://blog.csdn.net/meijinbo/article/details/137154407