ValueError при использовании sklearn.linear_model.LinearRegression в Python - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь предсказать y значения на основе X значений. У меня есть файл Excel, в котором содержится сколько братьев и сестер на одного человека. Файл также содержит результат выживания, равный y (1 = выжил, 0 = умер).

Фрагмент кода ниже показывает, как я это делаю

dataSet = pd.read_excel("TitanicData.xlsx", sheet_name="TitanicData")
dataSet.head()
dataSet.columns

SibSp  = dataSet.iloc[:, 6]
Parch  = dataSet.iloc[:, 7]

Stack  = np.column_stack((SibSp, Parch, SibSp + Parch))
Family = pd.DataFrame(Stack, columns=['SibSp', 'Parch', 'Family'])

X      = Family.iloc[:, 2]
y      = dataSet.iloc[:, 1]

Это теперь дает мне правильные значения, которые я ожидаю, y - это DataFrame с единицами и 0, показывающими, умер человек или нет, X содержит сумму столбцов SibSp и Parch.

Затем я разделяю данные на обучающие и тестируемые кадры данных, что делается так (обновите, чтобы показать, откуда происходит X_train, X_test)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=101)

Однако, когда я пытаюсь использовать sklearn.linear_model.LinearRegression, я начинаю получать ошибки

classifier = LinearRegression()

classifier.fit(X_train, y_train)
classifier.predict(X_test)

ValueError: Ожидаемый 2D-массив, вместо него получен 1D-массив: array = [1 2 0 1 0 0 0 0 4 ...] Измените ваши данные либо с помощью array.reshape (-1, 1), если ваши данные имеют один feature или array.reshape (1, -1), если он содержит один образец.

Я пытался взглянуть на похожие вопросы по SO , но строка, выкидывающая это исключение,

classifier.fit(X_train, y_train)

Как я могу вписать свои тренировочные значения в мой классификатор?

Обновление:

print(X_train.shape, y_train.values.reshape(-1,1).shape)

дает мне (534,) (534, 1)

Обновление для отображения полной трассировки отладки

  File "<ipython-input-56-2da0ffaf5447>", line 1, in <module>
    train()

  File "C:/Users/user/Desktop/dantitanic/AnotherTest.py", line 41, in train
    classifier.fit(X_train, y_train)

  File "C:\Users\user\Anaconda3\lib\site-packages\sklearn\linear_model\base.py", line 458, in fit
    y_numeric=True, multi_output=True)

  File "C:\Users\user\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 756, in check_X_y
    estimator=estimator)

  File "C:\Users\user\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 552, in check_array
    "if it contains a single sample.".format(array))

1 Ответ

0 голосов
/ 08 января 2019

Вам нужно изменить форму X_train и X_test перед установкой следующим образом:

X_train = X_train.reshape(1, -1)
X_test = X_test.reshape(1, -1)
...