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

RandomForestRegressor通过for循环调参时MSE恒为0如何解决

问题原因

  • 打印格式符使用错误:你在循环的print语句中使用了整数格式符%d输出MSE值,但get_mse函数中设置了squared=False,返回的是RMSE浮点值,当RMSE小于1时,%d会直接将其取整为0,这是输出全为0的直接原因。单独调用函数时你直接输出原始浮点值,所以能看到正确结果。
  • 变量名冲突:超参数列表的命名和循环变量名完全一致,第一次循环执行后,原有的超参数列表会被覆盖为单个数值,会引发后续循环逻辑异常。
  • 超参数遍历逻辑错误:使用zip遍历两个列表只能得到4组一一对应的超参数组合,无法覆盖两个参数的所有笛卡尔积组合(共16组),达不到全量调参的需求。

解决方案

  1. 将打印语句中的整数格式符替换为浮点格式符,也可以直接使用f-string简化写法,保证浮点数值正常输出。
  2. 修改超参数列表的命名,避免和循环变量名产生冲突。
  3. 使用itertools.product生成两个超参数的全量组合,替代zip实现全量遍历。

修正后代码

首先引入依赖:

from itertools import product

调整后的调参代码:

# 重命名超参数列表,避免和循环变量冲突
n_estimators_list = [100,150,200,250]
max_leaf_nodes_list = [10, 50, 100, 200]

# 遍历所有超参数组合
for n_estimators, max_leaf_nodes in product(n_estimators_list, max_leaf_nodes_list):
    my_mse = get_mse(n_estimators, max_leaf_nodes, X_train, X_valid, y_train, y_valid)
    print(f"N_estimators: {n_estimators}\tMax leaf nodes: {max_leaf_nodes}\tMean Squared Error: {my_mse:.4f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:39:03