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
相关产品推荐
相关产品推荐

