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


21

对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)文件“ /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中,” sample:%r“%[int(l)in l in lengths])

ValueError: Found input variables with inconsistent numbers of samples: [1, 29]

将来,请将编程问题发布stackoverflow。此次问答涉及的是数据科学,而不是编程。
里卡多·克鲁兹

Answers:


15

您正遇到该错误,因为您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()来获得同等数量的样本XY。现在,Xwill 的形状为(29,6),Ywill 的形状为(29,)。

1
太神奇了,这对我有用!谢谢Tuomastik!我非常感谢您的指导:)
josh_gray

2

是不是train_test_split希望能够获得XY是相同长度的名单?您的X的长度为6,Y的长度为29。可以尝试将其转换为pandas数据帧(尺寸为29x6),然后重试吗?

根据您的数据,看起来您具有6个功能。在这种情况下,请尝试将您的数据转换X为29行6列。然后将该数据帧传递给train_test_split。您可以使用将列表转换为数据框pd.DataFrame.from_records


感谢您对Sal的帮助!没错,我只需要将其转换为相同的长度即可。我的X.shape是(1、6、29),而Y.shape是(29,)。我只需要重塑它们,对我来说一切都很好:)
josh_gray
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.