Помилка train_test_split (): Знайдено вхідні змінні з невідповідною кількістю зразків


21

Досить нова у Python, але будую мою першу модель РФ на основі деяких класифікаційних даних. Я перетворив усі мітки в числові дані int64 і завантажив у 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 = індексується (* масиви) Файл "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", рядок 206, в індексується check_consistent_length (* результат) Файл "/ Бібліотека / Python / 2.7 / пакунки для сайтів / sklearn / utils / validation.py ", рядок 181, у check_consistent_length" зразки:% r "% [int (l) для l довжини])

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

Надалі, будь ласка, опублікуйте питання програмування для stackoverflow . Це питання стосується науки про дані, а не програмування.
Рікардо Крус

Відповіді:


15

Ви стикаєтеся з цією помилкою, оскільки ваша Xта Yне має однакової довжини (що і 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()щоб отримати рівну кількість зразків у Xта Y. Тепер форма Xбуде (29, 6), а форма Yбуде (29,).

1
Дивовижно це працювало для мене! Спасибі Tuomastik! Я дуже ціную вказівки :)
josh_gray

2

Хіба train_test_split не сподівається на те, що вони будуть Xі Yбудуть списком однакової довжини? Ваш X має довжину 6, а Y - довжину 29. Можливо, спробуйте перетворити це у фрейм даних панди (розмірність 29x6) і спробуйте знову?

З огляду на ваші дані, схоже, у вас є 6 функцій. У такому випадку спробуйте перетворити Xна 29 рядків і 6 стовпців. Потім передайте цей кадр даних train_test_split. Ви можете перетворити свій список у кадр даних за допомогою pd.DataFrame.from_records.


Дякуємо за допомогу Сал! Ви маєте рацію, я просто повинен був перетворити його на однакові довжини. Мій X.shape був (1, 6, 29), а Y.shape - (29,). Мені просто довелося їх змінити, і для мене це все нормально працювало :)
josh_gray
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.