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

如何解决ExtraTreesRegressor报错ValueError: y应为1d数组而非空维度数组

报错原因
  • 核心问题出在LabelEncoder.transform()方法的入参格式:sklearn要求该方法必须接收1维数组作为输入,你直接传入单个字符串(比如'Saturday')时,参数会被识别为0维标量,不符合输入要求,触发格式校验错误。
  • 补充隐藏问题:新版sklearn已经移除了sklearn.cross_validation模块,后续运行还会触发模块不存在的报错,需要同步做版本兼容修改。
修复方案

分两处修改代码即可:

  1. 替换导入模块并调整训练集拆分调用
# 把原来的from sklearn import cross_validation替换为下面的导入
from sklearn.model_selection import train_test_split

# 训练集测试集拆分代码同步修改
X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.25, random_state=5)
  1. 修改单条测试数据编码的else分支,把单个字符串包裹为1维列表传入transform方法
# 测试单条数据实例的编码
test_datapoint = ['Saturday', '10:20', 'Atlanta', 'no']
test_datapoint_encoded = [-1] * len(test_datapoint)
count = 0
for i, item in enumerate(test_datapoint):
    if item.isdigit():
        test_datapoint_encoded[i] = int(test_datapoint[i])
    else:
        # 单个字符串包裹为列表转为1维输入,transform返回数组后取第一个元素取值
        test_datapoint_encoded[i] = int(label_encoder[count].transform([test_datapoint[i]])[0])
        count = count + 1 

test_datapoint_encoded = np.array(test_datapoint_encoded)

注意:如果测试数据里出现了训练阶段LabelEncoder没见过的离散值,会触发新的报错,需要提前做好离散值的覆盖校验或者设置缺失值处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:24:03