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

Random Forest拟合与评分时报错:期望2D数组实际得到1D数组

问题原因及修复方案

核心问题梳理

你遇到的报错本质是2个低级错误导致的,和随机森林本身的逻辑无关:

  • numpy的reshape()不是原地修改方法,你没有把调整后的结果赋值给原变量,所以所有reshape操作完全没生效
  • 你调用模型score()方法时传错了参数,把1D的真实标签y_test当成特征输入传给了要求2D特征输入的第一个参数,直接触发了维度报错

另外你对X做reshape的操作逻辑完全错误:你的X_train/X_test本身就是(样本数, 特征数)的标准2D格式,完全符合模型输入要求,强行reshape成(-1,1)反而会把多特征合并成单特征,彻底破坏特征结构。同时sklearn回归器原生支持1D格式的y输入,不需要把y_train/y_test转成2D。

修正后的完整代码

# 导入依赖(建议把导入语句放在代码最开头)
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
import pandas as pd
import numpy as np

# 训练集测试集拆分
X = order_final.loc[:, ~order_final.columns.isin(['lag','observed'])]
y = order_final['lag']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 转换为数组(pandas的DataFrame/Series本身就可以直接喂给sklearn模型,这一步其实可以省略)
X_train = X_train.to_numpy()
y_train = y_train.to_numpy()
X_test = X_test.to_numpy()

# 删掉原来的错误reshape代码,不需要做任何reshape操作

# 初始化并拟合模型
RF = RandomForestRegressor(n_estimators = 100, random_state = 0)
RF.fit(X_train, y_train)

# 测试集预测
y_pred = RF.predict(X_test)

# 计算R²得分,参数顺序是(测试集特征, 测试集真实标签)
score = RF.score(X_test, y_test)
print(score)

修正后维度验证

运行形状打印代码后输出应该和之前一致,所有维度均符合要求:

(7326, 10)
(7326,)
(1832, 10)
(1832,)
(1832,)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:39:03