Невозможно правильно подогнать линию полиномиальной регрессии

#python #scikit-learn #regression #polynomials

#python #scikit-learn #регрессия #полиномы

Вопрос:

У меня есть фрейм данных, как показано ниже:

 price |  Sales
6.62  |  64.8
8.71  |  38
 

Это выглядит так

введите описание изображения здесь

Я не очень хорошо знаком с нелинейной регрессией, но после нескольких руководств я использовал следующий код для соответствия полиномиальному распределению:

 X = df['price'].values
y = df['sales'].values

X = X.reshape(-1,1)

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

pre_process = PolynomialFeatures(degree=2)
X_poly = pre_process.fit_transform(X)

pr_model = LinearRegression()
# Fit our preprocessed data to the polynomial regression model
pr_model.fit(X_poly, y)
# Store our predicted Humidity values in the variable y_new
y_pred = pr_model.predict(X_poly)
# Plot our model on our data
plt.scatter(X, y, c = "black")
plt.plot(X, y_pred)
 

И я понимаю, что это неправильно:

введите описание изображения здесь

Есть идеи, чего мне не хватает, что я не могу получить правильную строку для подгонки?

Ответ №1:

Прогноз верен:

 X = np.random.uniform(0,1,100)
y = 3*X**2   2*X - 8   np.random.normal(0,1,100)

X = X.reshape(-1,1)

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

pre_process = PolynomialFeatures(degree=2)
X_poly = pre_process.fit_transform(X)

pr_model = LinearRegression()
pr_model.fit(X_poly, y)

y_pred = pr_model.predict(X_poly)

plt.scatter(X, y, c = "black")
plt.scatter(X, y_pred, c="orange")
 

введите описание изображения здесь

Чтобы построить линию, вам нужно отсортировать значения x:

 plt.scatter(X, y, c = "black")
x_sorted = np.sort(X,axis=0)
y_pred_sorted = pr_model.predict(pre_process.fit_transform(x_sorted))
plt.plot(x_sorted,y_pred_sorted,c="orange")
 

введите описание изображения здесь