建立网站服务器,网络营销的特点是什么,连云港网站搜索优化,影视动画设计专业网格搜索#xff08;Grid Search#xff09;详细教学1. 什么是网格搜索#xff1f;在机器学习模型中#xff0c;算法的**超参数#xff08;Hyperparameters#xff09;**对模型的表现起着决定性作用。比如#xff1a;KNN 的邻居数量 n_neighborsSVM 的惩罚系数 C 和核函…
网格搜索Grid Search详细教学1. 什么是网格搜索在机器学习模型中算法的**超参数Hyperparameters**对模型的表现起着决定性作用。比如KNN 的邻居数量 n_neighborsSVM 的惩罚系数 C 和核函数参数 gamma随机森林的决策树数量 n_estimators这些超参数不会在训练过程中自动学习得到而是需要我们人为设定。网格搜索Grid Search是一种最常见的超参数优化方法
它通过遍历给定参数网格中的所有组合使用交叉验证来评估每组参数的效果最终选出表现最优的一组。通俗理解网格搜索 穷举法找最佳参数。
2. 网格搜索的核心思想定义参数范围网格例如 C[0.1, 1, 10]gamma[0.01, 0.1, 1]。训练所有组合即 (C0.1, gamma0.01)、(C0.1, gamma0.1)...直到 (C10, gamma1)。交叉验证评估每组参数都会在 k 折交叉验证下计算平均性能指标如准确率、F1 分数。选择最佳参数选出指标最优的一组参数作为最终模型配置。
3. 为什么要用网格搜索超参数选择自动化不用凭感觉拍脑袋。保证找到最优解只要网格覆盖范围足够大就不会遗漏最佳参数组合。结合交叉验证结果更加稳健避免过拟合或欠拟合。但缺点也明显计算开销大参数范围和组合越多训练越耗时。不适合大规模搜索参数维度高时可能出现“维度灾难”。
4. Scikit-Learn 中的网格搜索工具sklearn.model_selection.GridSearchCV 是最常用的网格搜索实现。4.1 函数原型
GridSearchCV(estimator, # 基础模型如SVC()、RandomForestClassifier()param_grid, # 参数字典或列表定义搜索空间scoringNone, # 评估指标accuracy、f1、roc_auc等n_jobsNone, # 并行任务数-1表示使用所有CPUcvNone, # 交叉验证折数如cv5verbose0, # 日志等级1简单进度条2详细refitTrue, # 是否在找到最优参数后重新训练整个模型return_train_scoreFalse # 是否返回训练集得分
)
GridSearchCV 常用参数表分类参数类型说明常用取值核心estimatorestimator 对象基础模型必须实现 fit / predictSVC()、RandomForestClassifier()param_griddict / list要搜索的参数空间键参数名值候选值列表{C:[0.1,1,10], gamma:[0.01,0.1,1]}评估scoringstr / callable模型评估指标accuracy、f1_macro、roc_auc、neg_mean_squared_errorcvint / 生成器交叉验证方式55折交叉验证、KFold(10)refitbool / str用最佳参数在全训练集上重新训练True默认、f1_macro多指标时指定效率n_jobsint并行任务数-1使用所有CPU-1、4pre_dispatchint / str并行调度策略2*n_jobs默认日志verboseint输出日志等级0无输出1进度2详细错误处理error_scorestr / numeric参数报错时的分数np.nan默认、0调试return_train_scorebool是否返回训练集得分用于过拟合分析False默认、True
5. 网格搜索实战案例5.1 示例数据集以鸢尾花Iris分类为例使用 SVM 模型。
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, train_test_split# 加载数据
iris load_iris()
X, y iris.data, iris.target
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 定义模型
svc SVC()
5.2 设置参数网格
param_grid {C: [0.1, 1, 10, 100], # 惩罚系数gamma: [1, 0.1, 0.01, 0.001], # 核函数参数kernel: [rbf, linear] # 核函数类型
}
5.3 执行网格搜索
grid GridSearchCV(estimatorsvc,param_gridparam_grid,scoringaccuracy,cv5,verbose2,n_jobs-1
)
grid.fit(X_train, y_train)
5.4 输出结果
print(最佳参数, grid.best_params_)
print(最佳得分, grid.best_score_)
print(测试集准确率, grid.best_estimator_.score(X_test, y_test))
结果示例
6. 网格搜索的可视化我们可以把不同参数组合的表现绘制出来直观查看最优解在哪个区域
import matplotlib.pyplot as pltresults pd.DataFrame(grid.cv_results_)# 只绘制 C 与 gamma 的得分热力图kernelrbf
scores results[results.param_kernel rbf].pivot(indexparam_gamma,columnsparam_C,valuesmean_test_score
)plt.imshow(scores, interpolationnearest, cmapplt.cm.hot)
plt.xlabel(C)
plt.ylabel(gamma)
plt.colorbar()
plt.xticks(np.arange(len(scores.columns)), scores.columns)
plt.yticks(np.arange(len(scores.index)), scores.index)
plt.title(Grid Search Accuracy Heatmap)
plt.show()7. 网格搜索的进阶技巧缩小搜索范围先用较粗粒度搜索再在最优附近细化搜索。并行计算n_jobs-1 可利用多核 CPU。随机搜索RandomizedSearchCV当参数空间太大时可考虑随机抽样搜索更高效。贝叶斯优化如 Optuna、Hyperopt比网格搜索更智能。
8. 注意事项参数空间不要过大否则计算量爆炸。交叉验证的折数 cv 不宜过大通常 5 或 10。选择合适的评分指标 scoring分类问题常用 accuracy、f1_macro回归问题用 neg_mean_squared_error 等。最终模型建议用 grid.best_estimator_而不是手动再初始化。
9. 总结**网格搜索Grid Search**是一种系统化的超参数优化方法通过遍历参数网格交叉验证找到表现最优的参数组合。在 sklearn 中GridSearchCV 是核心工具。它简单易用但计算成本高不适合大规模问题。实际应用中常结合粗到细搜索、随机搜索、贝叶斯优化来提升效率。