模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数

简介: 本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。

网络搜索

介绍

网格搜索(Grid Search)是一种超参数优化方法,用于选择最佳的模型超参数组合。在机器学习中,超参数是在训练模型之前设置的参数,无法通过模型学习得到。网格搜索通过尝试所有可能的超参数组合,并使用交叉验证来评估每个组合的性能,从而确定最佳的超参数组合。

步骤

网格搜索的步骤如下:

  1. 定义要调整的超参数范围:确定要调整的每个超参数的可能取值范围。例如,学习率、正则化参数等。
  2. 创建参数网格:将每个超参数的可能取值组合成一个参数网格。
  3. 定义评估指标:选择一个评估指标来衡量每个超参数组合的性能。例如,准确率、均方误差等。
  4. 构建模型和交叉验证:选择一个机器学习模型,并定义交叉验证策略,将数据集分成训练集和验证集。
  5. 执行网格搜索:对于每个超参数组合,在交叉验证的每个训练集上训练模型,并在验证集上评估模型性能。
  6. 选择最佳超参数组合:根据评估指标的结果,选择具有最佳性能的超参数组合。
  7. 用最佳超参数训练模型:使用最佳超参数组合在整个训练数据集上重新训练模型。

网格搜索的优点是能够系统地尝试不同的超参数组合,找到最佳的模型性能。然而,由于需要尝试所有可能的组合,网格搜索的计算成本较高,尤其是超参数的数量较多时。因此,对于大型数据集和复杂模型,网格搜索可能会变得非常耗时。

为了减少计算成本,可以使用随机搜索(Randomized Search)等其他超参数优化方法,或者使用启发式方法来选择最佳超参数组合。

参数

GridSearchCV的参数包括:

  • estimator:要使用的模型或者估计器对象。
  • param_grid:一个字典或者列表,包含要进行网格搜索的参数和对应的取值范围。
  • scoring:评估模型性能的指标,可以是字符串(使用模型的内置评估指标)或者可调用对象(自定义评估指标)。
  • cv:交叉验证的折数或者交叉验证迭代器。
  • n_jobs:并行运行的作业数量。-1表示使用所有可用的处理器。
  • verbose:控制详细程度的整数值。0表示不输出任何信息,大于1表示输出详细的信息。
  • refit:如果为True(默认值),则在找到最佳参数后,使用最佳参数重新拟合整个数据集。
  • return_train_score:如果为True,则同时返回训练集上的得分。
  • error_score:当模型在某些参数组合下发生错误时,用于返回的分数。可以设置为’raise’(抛出错误)或者数字(返回指定的分数)。
  • verbose:控制详细程度的整数值。0表示不输出任何信息,大于1表示输出详细的信息。

注意:

在GridSearchCV中,scoring参数可以选择以下评分指标:

回归问题:

  • ‘explained_variance’:可解释方差
  • ‘neg_mean_absolute_error’:负平均绝对误差
  • ‘neg_mean_squared_error’:负均方误差
  • ‘neg_mean_squared_log_error’:负对数均方误差
  • ‘neg_median_absolute_error’:负中位数绝对误差
  • ‘r2’:R^2决定系数

二分类问题:

  • ‘accuracy’:准确率
  • ‘balanced_accuracy’:平衡准确率
  • ‘average_precision’:平均精确率
  • ‘f1’:F1得分
  • ‘precision’:精确率
  • ‘recall’:召回率
  • ‘roc_auc’:ROC曲线下的面积
    多分类问题:
  • ‘accuracy’:准确率
  • ‘balanced_accuracy’:平衡准确率
  • ‘average_precision’:平均精确率
  • ‘f1_micro’:微观平均F1得分
  • ‘f1_macro’:宏观平均F1得分
  • ‘precision_micro’:微观平均精确率
  • ‘precision_macro’:宏观平均精确率
  • ‘recall_micro’:微观平均召回率
  • ‘recall_macro’:宏观平均召回率
  • ‘roc_auc_ovr’:基于一对多的ROC曲线下的面积

请注意,不同问题类型和评估指标之间的兼容性可能会有所不同。

5折交叉验证就是把数据集分成5份,然后进行5此测试,如model1就是将第一折fold1的数据作为测试集,其余的四份作为数据集。最后每个model都计算出来一个准确度accuracy,求平均后作为此验证集的精确度。

代码实现

#调用网格搜索和决策树
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report, roc_curve, auc
parameters = {'max_depth':[3, 5, 7, 9], 'min_samples_leaf': [1, 2, 3, 4]}# 选择两个超参数 树的深度max_depth和叶子的最小值min_samples_leaf

clf = GridSearchCV(DecisionTreeClassifier(), parameters, cv=3, scoring='accuracy')# 进行网格搜索得到最优参数组合
clf.fit(X_train, y_train) #通过有最优参数组合的最优模型进行训练

print('最优参数:', clf.best_params_)
print('验证集最高得分:', clf.best_score_)
# 获取最优模型
best_model = clf.best_estimator_
print('测试集上准确率:', best_model.score(X_test, y_test))

# 得到预测概率
y_prob_DT = clf.predict_proba(X_test)[:, 1]

# 得到预测标签
y_pred_DT = clf.predict(X_test)

# 得到分类报告
print(classification_report(y_pred = y_pred_DT, y_true = y_test))

# 绘制ROC图
fpr, tpr, threshold = roc_curve(y_score = y_prob_DT, y_true = y_test)
print("AUC值", auc(fpr, tpr))
plt.plot(fpr, tpr,"r-")
plt.plot([0, 1], [0, 1],"b-")
plt.xlable("FPR")
plt.ylable("TPR")
plt.title("ROC Curve")

# 输出结果文件
result = pd.DataFrame()
result["load_ID"] = pd.read_csv("***.csv")["**ID"]
result["predict_labels"] = y_pred_DT
result.to_csv("result.csv", index = False)

# 特征重要性评估
best_DT = clf.best_estimator_
best_DT.fit(X_train, y_train)

# 重要性绘制
plt.figure(figsize(8, 6))
pd.Series(best_DT.feature_importances_, index=X_train.columns).sort_values().plot(kind="barh")
目录
相关文章
|
1月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
385 109
|
2月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
199 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
2月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
3月前
|
机器学习/深度学习 算法 安全
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
本文探讨在敏感数据上应用差分隐私(DP)进行机器学习的挑战与实践。通过模拟DP-SGD算法,在模型训练中注入噪声以保护个人隐私。实验表明,该方法在保持71%准确率和0.79 AUC的同时,具备良好泛化能力,但也带来少数类预测精度下降的问题。研究强调差分隐私应作为模型设计的核心考量,而非事后补救,并提出在参数调优、扰动策略选择和隐私预算管理等方面的优化路径。
233 3
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
|
3月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
3月前
|
机器学习/深度学习 存储 Java
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。
|
3月前
|
人工智能 安全 机器人
使用PAI LangStudio创建RAG知识库及联网搜索聊天机器人
本文介绍如何基于阿里云PAI的LangStudio与LLM构建支持RAG与联网搜索的聊天机器人。内容涵盖SerpAPI注册、模型部署、连接配置、知识库创建及应用流设计,实现结合知识库与网络搜索的智能问答,并集成AI安全护栏,提升企业应用安全性与开发效率。
|
3月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在舆情分析中的情感倾向判断与话题追踪(185)
本篇文章深入探讨了Java大数据与机器学习在舆情分析中的应用,重点介绍了情感倾向判断与话题追踪的技术实现。通过实际案例,展示了如何利用Java生态工具如Hadoop、Hive、Weka和Deeplearning4j进行舆情数据处理、情感分类与趋势预测,揭示了其在企业品牌管理与政府决策中的重要价值。文章还展望了多模态融合、实时性提升及个性化服务等未来发展方向。
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【新模型速递】PAI-Model Gallery云上一键部署MiniMax-M1模型
MiniMax公司6月17日推出4560亿参数大模型M1,采用混合专家架构和闪电注意力机制,支持百万级上下文处理,高效的计算特性使其特别适合需要处理长输入和广泛思考的复杂任务。阿里云PAI-ModelGallery现已接入该模型,提供一键部署、API调用等企业级解决方案,简化AI开发流程。

热门文章

最新文章