问题描述
当我运行此代码时:
feature_names = ["date","shop_id","item_id","item_price","item_cnt_day"]
feature_names
X_train = train[feature_names]
print(X_train.shape)
X_train.head()
X_sales = sales[feature_names]
print(X_sales.shape)
X_sales.head()
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X_train,X_sales,y_train,y_sales = train_test_split(X_train,test_size=0.3)
feature_names = ["date","item_cnt_day"]
feature_names
X_train = train[feature_names]
print(X_train.shape)
X_train.head()
X_sales = sales[feature_names]
print(X_sales.shape)
X_sales.head()
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X_train,test_size=0.3)
(2935848,5)
(2935849,5)
我明白了ValueError
:
ValueError Traceback(最近一次调用 最后)在 13 从 sklearn.metrics 导入 mean_squared_error 14 ---> 15 X_train,test_size=0.3) 16
~/anaconda3/envs/aiffel/lib/python3.7/site-packages/sklearn/model_selection/_split.py 在 train_test_split(*arrays,**options) 2125 中提高 TypeError(“传递的参数无效:%s”% str(选项))2126 -> 2127 数组 = 可索引(*数组)2128 2129 n_samples = _num_samples(arrays[0])
~/anaconda3/envs/aiffel/lib/python3.7/site-packages/sklearn/utils/validation.py 在 indexable(*iterables) 中 第291话 292 结果 = [_make_indexable(X) for X in iterables] --> 293 check_consistent_length(*result) 294 返回结果 295
~/anaconda3/envs/aiffel/lib/python3.7/site-packages/sklearn/utils/validation.py 在 check_consistent_length(*arrays) 255 如果 len(uniques) > 1: 256 raise ValueError(“发现输入变量的数量不一致” --> 257" 样本:%r" % [int(l) for l in lengths]) 258 259
ValueError: 发现输入变量的样本数量不一致:[2935848,2935849]
解决方法
您的问题已达到,因为您的两个数据框(火车和销售)具有不同的长度。您的训练数据集有 2935848 个样本,销售数据集有 2935849 个。两个数据集的长度必须相同才能正常工作。检查为什么此长度不匹配并添加一行或删除一行以匹配它们。
其次,但同样重要的是,您应该了解您使用 train_test_split
做什么以及您的目标是什么。此函数输入为 X 和 Y,输出 X_train
、X_test
、y_train
、y_test
。阅读您的代码,您输入了两个具有相同 5 个特征的 X(X_train
和 X_sales
)。我希望你这样做是出于某种原因,请注意这一点。
X 是所有具有特征的样本,Y 是您要预测的相应输出值。检查并评估使用的 train_test_split
是您正在寻找的函数。