You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

回归机器学习任务使用GridSearchCV调优输出全为NaN问题求解

问题核心原因
  • 最直接的原因是构造DataFrame时传入的字典键名与指定的列名不匹配:你向scores列表中插入的字典key为model、best_score、best_params,但创建DataFrame时指定的columns为Model、Best Score、Best Paramters,大小写、拼写、命名格式完全不一致,pandas无法匹配到对应数据,就会自动填充为NaN。
  • 潜在隐性问题:代码中存在未显式导入的依赖,你用到了LinearRegression、ShuffleSplit、pandas三个工具,但开头的import语句中没有对应的导入逻辑,你现在未报错大概率是在其他代码行已经完成了对应导入。
  • 版本兼容隐患:若你使用的是scikit-learn 1.0及以上版本,LinearRegression的normalize参数已被废弃移除,DecisionTreeRegressor的criterion参数的mse取值也已替换为squared_error,不过你设置了error_score='raise',若触发该类问题会直接抛出异常,你现在未报错说明当前使用的scikit-learn版本较低,适配旧参数。
解决方法
  1. 修正列名匹配规则,两种修改方式二选一即可:
# 方式1:修改返回时的columns参数,和字典key对应
return pd.DataFrame(scores, columns=['model', 'best_score', 'best_params'])

# 方式2:修改插入scores的字典key,和你原设定的列名对应
scores.append({
    'Model': algo_name,
    'Best Score': gs.best_score_,
    'Best Paramters': gs.best_params_
})
  1. 补全所有依赖的导入语句,避免后续运行报错:
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import ShuffleSplit
  1. 若后续升级scikit-learn版本,同步调整参数适配新版本规则:
  • 移除LinearRegression的normalize参数,改用StandardScaler在数据预处理阶段完成标准化
  • 将DecisionTreeRegressor的criterion参数的mse取值替换为squared_error

内容的提问来源于stack exchange,提问作者Rohan Bhosle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:24:10