Python SKLearn: ошибка «Плохая форма ввода» при прогнозировании последовательности - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть файл Excel, в котором хранится последовательность в каждом столбце (чтение из верхней ячейки в нижнюю), и тенденция последовательности аналогична предыдущему столбцу. Поэтому я хотел бы предсказать последовательность для n-го столбца в этом наборе данных.

Образец моего набора данных:

sample data

Обратите внимание, что у каждого столбца есть набор значений / последовательности, и они сортируются по мере продвижения вправо, поэтому я хочу предсказать, например, значения в столбце Z.

Вот мой код:

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# Read the Excel file in rows
df = pd.read_excel(open('vec_sol2.xlsx', 'rb'),
                header=None, sheet_name='Sheet1')
print(type(df))
length = len(df.columns)
# Get the sequence for each row

x_train, x_test, y_train, y_test = train_test_split(
    np.reshape(range(0, length - 1), (-1, 1)), df, test_size=0.25, random_state=0)

print("y_train shape: ", y_train.shape)

pred_model = LogisticRegression()
pred_model.fit(x_train, y_train)
print(pred_model)

Я объясню логику как можно больше:

  • x_train и x_test будут просто номером индекса / столбца, связанным с последовательностью.
  • y_train - массив последовательностей.
  • Всего имеется 51 столбец, поэтому разделение его на 25% представляет собой результаты тестовых данных в 37 последовательностях поездов и 13 последовательностях тестов.

Мне удалось получить формы каждого вар при отладке, они:

  • x_train: (37, 1)
  • x_test: (13, 1)
  • y_train: (37, 51)
  • y_test: (13, 51)

Но сейчас при запуске программы выдается следующее сообщение:

ValueError: bad input shape (37, 51)

В чем здесь моя ошибка?

1 Ответ

0 голосов
/ 05 ноября 2018

Я не понимаю, почему вы используете это:

x_train, x_test, y_train, y_test = train_test_split(
np.reshape(range(0, length - 1), (-1, 1)), df, test_size=0.25, random_state=0)

У вас есть данные здесь df. Извлеките X и y из него, а затем разделите его, чтобы обучить и проверить.

Попробуйте это:

X = df.iloc[:,:-1]
y = df.iloc[:, -1:]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=0)

В противном случае статистика, которой вы поделились, показывает, что вы пытаетесь получить 51 колонный вывод из одной функции, что странно, если подумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...