当前位置: 首页 > news >正文

Day18_【机器学习—交叉验证与网格搜索】

一、 交叉验证 (Cross Validation)

  • 目的:更准确、可靠地评估模型性能,减少因单次数据划分带来的随机性偏差。
  • 核心思想(以K折交叉验证为例):
    1. 将训练数据平均分成K份
    2. 进行K轮训练和验证:每轮使用其中1份作为验证集其余K-1份作为训练集
    3. 计算K轮验证结果(如准确率)的平均值,作为模型的最终评估分数。
  • 关键点:它本身不提升模型性能,而是提供一个更可信的性能评估。

二、网格搜索 (Grid Search)

  • 目的:自动寻找模型的最优超参数组合(如KNN中的K值)。
  • 核心思想
    1. 定义一个包含多个超参数及其候选值的参数网格(字典)。
    2. 网格搜索会穷举所有可能的参数组合
    3. 每一个参数组合,都使用交叉验证来评估其性能。
    4. 选择交叉验证得分最高的参数组合作为最优超参数。
  • 关键点:它是超参数调优的自动化方法,通常与交叉验证紧密结合。

三、. 二者关系与整合 (GridSearchCV)

  • 协同工作:网格搜索利用交叉验证来评估每个超参数组合的性能,确保选出的“最优”参数是稳定可靠的。
  • API体现:在 scikit-learn 中,GridSearchCV 这一个API就整合了两者:
    • estimator:要调优的模型。
    • param_grid:超参数网格(字典)。
    • cv:指定交叉验证的折数。
  • 输出
    • best_params_:找到的最优超参数。
    • best_score_:最优参数在交叉验证下的平均得分。
    • best_estimator_:使用最优参数训练好的最终模型。

一句话总结交叉验证用于可靠评估模型,网格搜索利用交叉验证来自动寻找模型的最佳超参数,二者结合 (GridSearchCV) 是机器学习模型调优的标准流程。

四、在线数据集 鸢尾花案例

def model_precdit_evaluate():# 获取鸢尾花数据iris_data=load_iris()# 数据基本处理——数据分割为训练集和测试集x_train,x_test,y_train,y_test=train_test_split(iris_data.data,iris_data.target,test_size=0.2,random_state=22)#特征工程——特征列标准化transfer=StandardScaler()x_train=transfer.fit_transform(x_train)# 测试集不使用fit,目的就是 避免数据泄露,更详细来说是为了测试集的信息不应该影响模型效果,从而得到更准确的模型评估结果x_test=transfer.transform(x_test)#模型训练 分类处理es=KNeighborsClassifier()parm_dict={'n_neighbors':[i for i in range(1,20)]}es=GridSearchCV(es,parm_dict,cv=4)es.fit(x_train,y_train)# 打印最优的超参组合print(f"最优评分:{es.best_score_}")  # 最优组合的平均分print(f"最优超参组合:{es.best_params_}")  # 最优超参组合(供参考)print(f"最优的估计器对象:{es.best_estimator_}")  # 最优组合的模型对象print(f"具体交叉验证结果:{es.cv_results_}")  # 所有组合的 评估结果(过程)#模型预测y_predict=es.best_estimator_.predict(x_test)print("查看预测对比")print(y_test)print(y_predict)#模型评估print(f"预测精度:{accuracy_score(y_test,y_predict)}")
if __name__ == '__main__':model_precdit_evaluate()

http://www.dtcms.com/a/358918.html

相关文章:

  • Unity核心概念①
  • 【Linux】基础I/O和文件系统
  • PHP单独使用phinx使用数据库迁移
  • 全栈开源,高效赋能——启英泰伦新官网升级上线!
  • 快速学习和掌握Jackson 、Gson、Fastjson
  • React Native基本用法
  • 大语言模型生成的“超龄劳动者权益保障制度系统化完善建议(修订版)”
  • 下一波红利:用 #AI编程 闯入小游戏赛道,#看广告变现 模式正在崛起!
  • I2C的类比水池和大海
  • 【前端教程】DOM 操作入门专栏:从基础到实战
  • JS之刷刷
  • Langflow核心技术学习笔记(新)
  • LangChain.js 实战与原理:用 LCEL 构建可维护的 RAG / Agent 系统(含 4 套 30+ 行代码)
  • 揭开智能体架构面纱:90% 属软件工程,10% 为 AI 技术
  • Python数据分析:在Python中,reindex和set_index以及reset_index最本质的区别是什么?
  • B树与B+树的原理区别应用
  • Python 的 argparse 模块中,add_argument 方法的 nargs 参数
  • Ubuntu系统下交叉编译Android的X264库
  • hello算法笔记 01
  • Jedis、Lettuce、Redisson 技术选型对比
  • 下载 | Win11 23H2正式版最新原版ISO系统映像 (22631.5840、多合一版本)-修复系统问题
  • LangGraph 深度解析(二):掌握 LangGraph 函数式 API 的状态化 AI 工作流
  • openEuler2403安装部署Redis8
  • JavaScript之性能优化
  • HiFi-GAN模型代码分析
  • txt2las批量测井txt文件转las
  • 【C++】类和对象3
  • 【学Python自动化】 1. Python 安装与配置完全指南 (Windows)
  • 微论-突触的作用赋能思考(可能是下一代人工智能架构的启发式理论)
  • fastdds qos:LifespanQosPolicy