ValueError: Найдены входные переменные с несовпадающим количеством образцов: [6, 366]

Вопрос или проблема

Я пытаюсь разделить свои x и y на обучающие и тестовые данные для моей модели машинного обучения, но получаю эту ошибку: ValueError: Найдены входные переменные с непоследовательным количеством образцов: [6, 366]. Мой массив numpy x выглядит так:

array([[2, 3, 4, ..., 31, 1, 2],
       [1, 1, 1, ..., 12, 1, 1],
       [2021, 2021, 2021, ..., 2021, 2022, 2022],
       [53, 53, 1, ..., 52, 52, 52],
       [1, 1, 1, ..., 4, 1, 1],
       [1, 1, 1, ..., 1, 0, 1]], dtype=object)

x.shape: (6, 366)

Мой массив y:

array([ 774.534973,  975.50769 , ... ,  3824.19873 ])

С формой: (366,)

Вам, вероятно, следует транспонировать ваш массив x, так как первое измерение должно соответствовать количеству образцов в вашем наборе данных, в данный момент первое измерение соответствует количеству признаков вместо количества образцов. Следующий код должен сработать:

import numpy as np
from sklearn.model_selection import train_test_split
# генерируем случайные данные с такой же формой, как у ваших данных
X, y = np.random.randn(6, 366), np.random.randn(366)
print(X.shape, y.shape)
# (6, 366) (366,)

# транспонируем массив признаков, чтобы убедиться, что первое измерение соответствует количеству образцов
X = X.T
print(X.shape, y.shape)
# (366, 6) (366,)
X_train, X_test, y_train, y_test = train_test_split(X, y)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
# (274, 6) (92, 6) (274,) (92,)

Ответ или решение

Ошибка ValueError: Found input variables with inconsistent numbers of samples: [6, 366], с которой вы столкнулись во время разделения ваших данных на тренировочные и тестовые выборки, указывает на несоответствие в размере массивов x и y. Для успешного обучения модели машинного обучения количество строк в массиве признаков (x) должно совпадать с количеством элементов в целевой переменной (y).

Анализ проблемы

Максимальная информация, которую можно извлечь из представленных массивов:

  • Array x с формой (6, 366): здесь первая размерность (6) указывает на количество признаков, а вторая (366) представляет количество образцов.
  • Array y с формой (366,): это одномерный массив, где 366 — это количество целевых значений для каждого образца.

Корректировка структуры данных

Ваша проблема возникает из-за того, что в текущем виде массив x не соответствует условию модели, при котором каждая строка должна представлять отдельный образец, а столбцы — его признаки. Чтобы исправить это, необходимо транспонировать массив x, чтобы он принял форму (366, 6). Теперь каждая строка будет представлять образец, а каждый столбец — признак.

Решение

Вот как можно осуществить транспонирование и последующее разделение с помощью функции train_test_split из библиотеки scikit-learn:

import numpy as np
from sklearn.model_selection import train_test_split

# Ваши данные
x = np.array([[2, 3, 4, ..., 31, 1, 2],
              [1, 1, 1, ..., 12, 1, 1],
              [2021, 2021, 2021, ..., 2021, 2022, 2022],
              [53, 53, 1, ..., 52, 52, 52],
              [1, 1, 1, ..., 4, 1, 1],
              [1, 1, 1, ..., 1, 0, 1]], dtype=object)

y = np.array([774.534973, 975.50769, ..., 3824.19873])

# Транспонирование массива x
x = x.T

# Проверка форм массивов
print(x.shape)  # (366, 6)
print(y.shape)  # (366,)

# Деление на тренировочные и тестовые наборы
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# Проверка форм выборок
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)
# Ожидаемые размеры: (292, 6), (74, 6), (292,), (74,)

Заключение

Проблема, с которой вы столкнулись, связана с неправильной интерпретацией размерностей ваших данных. Очевидное решение — транспонировать массив x, чтобы соответствовать требованиям модели. Убедитесь, что каждый образец представлен в виде одной строки, а соответствующая целевая переменная находится в массиве y. Следуя приведенным рекомендациям, вы сможете успешно подготовить данные для обучения вашей модели машинного обучения.

Оцените материал
Добавить комментарий

Капча загружается...