python - gridSearch 性能测量效果
问题描述
我有一个任务,它要求我:
通过超参数调整提高上一步模型的性能,并使用基于您选择的指标(或指标)的网格搜索来选择最终的最优模型。为给定任务选择最佳模型(比较特定域上的多个回归器)需要选择性能度量,例如 R2(确定系数)和/或 RMSE(均方根误差)来比较模型性能。
我使用此代码进行超参数调整:
model_example = GradientBoostingRegressor()
parameters = {'learning_rate': [0.1, 1],
'max_depth': [5,10]}
model_best = GridSearchCV(model_example,
param_grid=parameters,
cv=2,scoring='r2').fit(X_train_new,y_train_new)
model_best.best_estimator_
我发现我选择了学习率=0.1 和 max_dept=5scoring='r3'
作为性能衡量标准,但是当我使用此代码提供我的最佳模型时,它对我的模型准确性没有任何影响:
my_best_model = GradientBoostingRegressor(learning_rate=0.1,
max_depth=5).fit(X_train_new,y_train_new)
my_best_model.score(X_train_new,y_train_new)
你知道我的工作出了什么问题吗?
解决方案
尝试将 a 设置random_state
为GradientBoostingRegressor()
. 例如,GradientBoostingRegressor(random_state=1)
。
然后,该模型将对相同的数据产生相同的结果。如果没有该参数,则存在随机性元素,难以比较不同的模型拟合。
在 train-test-split 上设置随机状态也将对此有所帮助。
推荐阅读
- json - 接收 JSON 对象,是否需要“包装”方括号?
- php - Codeingiter 以更快的方式获取计数
- python - 是否有 Ansible 的客户端/代理软件?
- apache-spark - 如何在不分叉/修改 Spark 本身的情况下创建自定义 Spark-Native 函数
- c# - 代码中的字符串与文件中的字符串有什么区别
- reactjs - 我在 reactjs 中创建表单时遇到问题
- google-apps-script - 在 Google 表格插件中进行 DNS 查找时获取“名称服务器拒绝查询(蹩脚委托?)”
- ios - 在 SwiftUI 中有条件地更改 NavigationLink 目标
- c# - 如何在c#中同时执行一个方法?
- node.js - 设置限制电子邮件发送计数