#python #linear-regression
#python #линейная регрессия
Вопрос:
У меня есть некоторые проблемы с линейной регрессией, я просто использовал простой образец, и я все еще получаю ошибку, не знаю, что я делаю не так.
Вот код:
x = [1,1,2,3,1,1,2,0,4,1]
x = np.array(x)
x = np.reshape(1,-1)
y = [1.24,0.88,0.88,1.31,1.36,0.79,0.79,0.79,1.36,1.36]
y = np.array(y)
y = np.reshape(1,-1)
lin_reg = LinearRegression()
lin_reg.fit(x,y)
"ValueError: Expected 2D array, got 1D array instead:
array=[1].
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."
Комментарии:
1. Изменить
y
?y.reshape(-1, 1)
2. Вы должны изучить, что это возвращает:
np.reshape(1,-1)
и спросите себя, действительно ли это то значение, которое вы хотите. Вам нужно вызватьreshape()
фактические массивы.3. @yatu должно ли это быть
x.reshape(-1, 1)
? Объекты должны быть 2D-массивом
Ответ №1:
В ошибке указано, что вы должны делать в этом случае.
Просто используйте .reshape(-1, 1)
вместо .reshape(1,-1)
.
Сделайте это только для x
, и проблема решена.
x = [1,1,2,3,1,1,2,0,4,1]
x = np.array(x).reshape(-1, 1) # Edited line
y = [1.24,0.88,0.88,1.31,1.36,0.79,0.79,0.79,1.36,1.36]
lin_reg = LinearRegression()
lin_reg.fit(x,y)
Комментарии:
1. Большое спасибо, не могли бы вы дать простое объяснение, почему нет необходимости изменять y?
2. Конечно. Если вы проверите официальную документацию sklearn, касающуюся линейной регрессии, вы можете увидеть это
y array-like of shape (n_samples,) or (n_samples, n_targets)
. Другими словами, вам не нужно изменять своюy
форму, поскольку она уже соответствует требуемой форме для обучения моделиfit
.3. Пожалуйста, будьте добры и отметьте мой ответ, если он решит вашу проблему. Спасибо! =)
Ответ №2:
вы неправильно вызвали reshape
функцию.
Если вы хотите изменить форму матриц x
или y
, вы должны вызвать like:
x = x.reshape(1, -1)
или объединение с одной строкой до:
x = np.array(x).reshape(1, -1)
Если вы только вызовете np.reshape()
, с вашими данными ничего не произойдет.