train_test_split() 错误:发现输入变量的样本数不一致

数据挖掘 Python scikit-学习 采样
2021-10-02 20:38:45

对 Python 来说相当新,但基于一些分类数据构建了我的第一个 RF 模型。我已将所有标签转换为 int64 数值数据并作为 numpy 数组加载到 X 和 Y 中,但是当我尝试训练模型时遇到错误。

这是我的数组的样子:

>>> X = np.array([[df.tran_cityname, df.tran_signupos, df.tran_signupchannel, df.tran_vmake, df.tran_vmodel, df.tran_vyear]])

>>> Y = np.array(df['completed_trip_status'].values.tolist())

>>> X
array([[[   1,    1,    2,    3,    1,    1,    1,    1,    1,    3,    1,
            3,    1,    1,    1,    1,    2,    1,    3,    1,    3,    3,
            2,    3,    3,    1,    1,    1,    1],
        [   0,    5,    5,    1,    1,    1,    2,    2,    0,    2,    2,
            3,    1,    2,    5,    5,    2,    1,    2,    2,    2,    2,
            2,    4,    3,    5,    1,    0,    1],
        [   2,    2,    1,    3,    3,    3,    2,    3,    3,    2,    3,
            2,    3,    2,    2,    3,    2,    2,    1,    1,    2,    1,
            2,    2,    1,    2,    3,    1,    1],
        [   0,    0,    0,   42,   17,    8,   42,    0,    0,    0,   22,
            0,   22,    0,    0,   42,    0,    0,    0,    0,   11,    0,
            0,    0,    0,    0,   28,   17,   18],
        [   0,    0,    0,   70,  291,   88,  234,    0,    0,    0,  222,
            0,  222,    0,    0,  234,    0,    0,    0,    0,   89,    0,
            0,    0,    0,    0,   40,  291,  131],
        [   0,    0,    0, 2016, 2016, 2006, 2014,    0,    0,    0, 2015,
            0, 2015,    0,    0, 2015,    0,    0,    0,    0, 2015,    0,
            0,    0,    0,    0, 2016, 2016, 2010]]])

>>> Y
array(['NO', 'NO', 'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO',
       'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO',
       'NO', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO'], 
      dtype='|S3')

>>> X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3)

回溯(最近一次通话最后):

  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/sklearn/cross_validation.py", line

2039,在 train_test_split arrays = indexable(*arrays) 文件“/Library/Python/2.7/site-packages/sklearn/utils/validation.py”,第 206 行,在可索引的 check_consistent_length(*result) 文件“/Library/Python/ 2.7/site-packages/sklearn/utils/validation.py”,第 181 行,在 check_consistent_length 中“样本:%r”% [int(l) for l in lengths])

ValueError: Found input variables with inconsistent numbers of samples: [1, 29]
2个回答

您遇到该错误是因为您的XY不具有相同的长度(这是train_test_split需要的),即X.shape[0] != Y.shape[0]. 鉴于您当前的代码:

>>> X.shape
(1, 6, 29)
>>> Y.shape
(29,)

要修复此错误:

  1. np.array()在定义X或之后使用以下命令删除额外维度时从内部删除额外列表: X = X.reshape(X.shape[1:]). 现在, 的形状X将是 (6, 29)。
  2. X通过运行转置以在X = X.transpose()中获得相等数量的样本现在, 的形状为(29, 6), 的形状为(29,)。XYXY

是不是 train_test_split 期望两者都X成为Y相同长度的列表?您的 X 的长度为 6,Y 的长度为 29。可以尝试将其转换为 pandas 数据框(尺寸为 29x6),然后再试一次?

鉴于您的数据,您似乎有 6 个特征。在这种情况下,请尝试将您的转换X为 29 行和 6 列。然后将该数据帧传递给train_test_split. 您可以使用将列表转换为数据框pd.DataFrame.from_records