Не могу разобраться в проблеме с этими простыми строками кода для линейной регрессии

#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() , с вашими данными ничего не произойдет.