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

Kaggle机器学习教程中train_test_split实现遇ValueError求助

嘿,这个问题我太熟了!咱们一步步来排查和解决:

核心问题:变量赋值错误

你在执行train_test_split的时候,犯了一个很容易忽略的笔误:

train_x, val_x, train_y, val_x = train_test_split(x, y,random_state = 0)

看到没?第四个变量你写成了val_x,但它应该是val_y!这就导致了两个严重问题:

  • 用于存储验证集标签的val_y根本没被定义
  • 原本应该存验证集特征的val_x,最后被覆盖成了验证集的标签数据(一维数组)

当你调用data_model.predict(val_x)时,模型收到的是一维的标签数据,而它需要的是二维的特征矩阵,这直接触发了ValueError: Expected 2D array, got 1D array instead。

额外小问题:缺少必要的导入

你代码里用到了mean_absolute_error,但没有从sklearn.metrics导入这个函数,这会导致后续运行还会报错。

修正后的完整代码

import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error  # 新增必要的导入

main_file_path = '../input/train.csv'
data = pd.read_csv(main_file_path)
y = data.SalePrice
data_predictors = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
x = data[data_predictors]
# 修正变量赋值,把第四个变量改为val_y
train_x, val_x, train_y, val_y = train_test_split(x, y, random_state = 0)
data_model = DecisionTreeRegressor()
data_model.fit(train_x,train_y)
data_prediction = data_model.predict(val_x)
print(mean_absolute_error(val_y, data_prediction))

验证修正效果

运行修正后的代码,val_x会保持二维的特征矩阵,val_y是一维的标签数组,模型就能正常执行预测和计算平均绝对误差(MAE)了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 08:57:49