Я пытаюсь предсказать значения 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))
Я попробовал X.reshape(1, -1), как будто он предлагает мне 'Series' object has no attribute 'reshape', я понимаю, что ему нужен 2D-массив [[], []], но я не знаю, как воспроизвести эту ошибку в коде @meW
X.values.reshape(-1,1)Выдает мне, Found input variables with inconsistent numbers of samples: [1, 534]: / @meW
в какой строке вы получаете ошибку? предсказывать или соответствовать?
classifier.fit(X_train, y_train) согласно моей отладочной трассе. Я обновлю вопрос, чтобы предоставить полную трассировку. @Nihal
@Jaquarh для одномерных данных должно быть любое количество строк, кроме 1 столбца. Убедитесь сами, что вы указали [1,534], что означает прямо противоположное. Вы поняли мою точку зрения? Проверьте форму перед переходом в fit
Я новичок в Python, PHP - мой первый и единственный язык. Насколько я понимаю, он работает как [rows, cols]. Я следил за учебником scikit-learn, чтобы воспроизвести это, но с моими собственными данными. Я честно пытаюсь помочь вам больше, но я не понимаю, что представляет собой [1,534] или даже какое отношение shape имеет к 2D-массиву, поскольку (n, 2) будет [[0,0], [0,1]] и т. д., Где, как я предполагаю, мне нужен [[0], [1], [3]] и т. д. @ я
Но реплицируя это как код, поскольку Python не является моей игровой площадкой, я не понимаю, как бороться с этой ошибкой или чего от меня ожидают - в учебнике это не встречается. Я мог бы предоставить свою полную среду, если бы это помогло, а не минимальный, но полный пример?
попробуйте classifier.fit(X_train, y_train.values.reshape(-1,1)) Кстати, покажите, где инициализировать X_train и y_train
Та же ошибка, File "C:/Users/user/Desktop/dantitanic/AnotherTest.py", line 41, in train classifier.fit(X_train, y_train.values.reshape(-1,1)), представляющий собой одномерный массив: / Благодарю за вашу помощь! Помогло бы предоставление моей полной среды? т.е. с моим набором данных? @meW
поделитесь выводом print(X_train.shape, y_train.values.reshape(-1,1).shape)
Я обновил вопрос, указав, откуда берется X_train, и вывод print(), который является (534,) (534, 1) @meW.
отлично, поэтому я раньше просил показать мне, как вы инициализируете X_train и y_train. Перейти с classifier.fit(X_train.values.reshape(-1,1), y_train.values.reshape(-1,1))
Я думаю, что вы: A) заслуживаете золотой звезды за то, что терпите мою нубичность Python, и B) заслуживаете объятий, потому что это устранило мою проблему! Если вы хотите дать ответ на этот вопрос, я помечу его как правильный, когда смогу - Большое спасибо за вашу помощь и терпение
@Jaquarh продолжай учиться. Поскольку это просто обычный запрос, мне не нужно ставить его в качестве ответа.






Вам необходимо изменить форму X_train и X_test перед установкой следующим образом:
X_train = X_train.reshape(1, -1)
X_test = X_test.reshape(1, -1)
Прочтите вашу ошибку. В нем четко указано, что у вас есть данные другого измерения, которые вы вводите внутри
fit. Подсказка. Пропустите1-D, поскольку даже в ошибке указано, как это сделать.