ValueError при использовании sklearn.linear_model.LinearRegression в Python

Я пытаюсь предсказать значения 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 из единиц и нулей, отображающих, умер человек или нет, 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: Expected 2D array, got 1D array instead: array=[ 1 2 0 1 0 0 0 0 4 ...] Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Я попытался взглянуть на похожие вопросы по 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))

Прочтите вашу ошибку. В нем четко указано, что у вас есть данные другого измерения, которые вы вводите внутри fit. Подсказка. Пропустите 1-D, поскольку даже в ошибке указано, как это сделать.

meW 08.01.2019 11:47

Я попробовал X.reshape(1, -1), как будто он предлагает мне 'Series' object has no attribute 'reshape', я понимаю, что ему нужен 2D-массив [[], []], но я не знаю, как воспроизвести эту ошибку в коде @meW

Jaquarh 08.01.2019 11:48
X.values.reshape(-1,1)
meW 08.01.2019 11:49

Выдает мне, Found input variables with inconsistent numbers of samples: [1, 534]: / @meW

Jaquarh 08.01.2019 11:50

в какой строке вы получаете ошибку? предсказывать или соответствовать?

Nihal 08.01.2019 11:51
classifier.fit(X_train, y_train) согласно моей отладочной трассе. Я обновлю вопрос, чтобы предоставить полную трассировку. @Nihal
Jaquarh 08.01.2019 11:51

@Jaquarh для одномерных данных должно быть любое количество строк, кроме 1 столбца. Убедитесь сами, что вы указали [1,534], что означает прямо противоположное. Вы поняли мою точку зрения? Проверьте форму перед переходом в fit

meW 08.01.2019 11:53

Я новичок в Python, PHP - мой первый и единственный язык. Насколько я понимаю, он работает как [rows, cols]. Я следил за учебником scikit-learn, чтобы воспроизвести это, но с моими собственными данными. Я честно пытаюсь помочь вам больше, но я не понимаю, что представляет собой [1,534] или даже какое отношение shape имеет к 2D-массиву, поскольку (n, 2) будет [[0,0], [0,1]] и т. д., Где, как я предполагаю, мне нужен [[0], [1], [3]] и т. д. @ я

Jaquarh 08.01.2019 11:57

Но реплицируя это как код, поскольку Python не является моей игровой площадкой, я не понимаю, как бороться с этой ошибкой или чего от меня ожидают - в учебнике это не встречается. Я мог бы предоставить свою полную среду, если бы это помогло, а не минимальный, но полный пример?

Jaquarh 08.01.2019 11:58

попробуйте classifier.fit(X_train, y_train.values.reshape(-1,1)) Кстати, покажите, где инициализировать X_train и y_train

meW 08.01.2019 12:00

Та же ошибка, File "C:/Users/user/Desktop/dantitanic/AnotherTest.py", line 41, in train classifier.fit(X_train, y_train.values.reshape(-1,1)), представляющий собой одномерный массив: / Благодарю за вашу помощь! Помогло бы предоставление моей полной среды? т.е. с моим набором данных? @meW

Jaquarh 08.01.2019 12:01

поделитесь выводом print(X_train.shape, y_train.values.reshape(-1,1).shape)

meW 08.01.2019 12:03

Я обновил вопрос, указав, откуда берется X_train, и вывод print(), который является (534,) (534, 1) @meW.

Jaquarh 08.01.2019 12:05

отлично, поэтому я раньше просил показать мне, как вы инициализируете X_train и y_train. Перейти с classifier.fit(X_train.values.reshape(-1,1), y_train.values.reshape(-1,1))

meW 08.01.2019 12:06

Я думаю, что вы: A) заслуживаете золотой звезды за то, что терпите мою нубичность Python, и B) заслуживаете объятий, потому что это устранило мою проблему! Если вы хотите дать ответ на этот вопрос, я помечу его как правильный, когда смогу - Большое спасибо за вашу помощь и терпение

Jaquarh 08.01.2019 12:07

@Jaquarh продолжай учиться. Поскольку это просто обычный запрос, мне не нужно ставить его в качестве ответа.

meW 08.01.2019 12:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
16
1 473
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме