Я не получаю полиномиальную регрессию в sklearn гладко - PullRequest
0 голосов
/ 12 января 2019

Для этого кода полиномиальной регрессии, реализованного в python с sklearn

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import pandas as pd

m=100
X=6*np.random.rand(m,1)-3
y=0.5*X**3+X+2+np.random.rand(m,1)

poly_features=PolynomialFeatures(3)
X_poly=poly_features.fit_transform(X)
lin_reg=LinearRegression()

X_new=[[0],[3]]

lin_reg.fit(X_poly,y)

plt.plot(X,y,"b.")
plt.plot(X, lin_reg.predict(poly_features.fit_transform(X)),  "r-")

plt.show()

Вывод отображается как

enter image description here

Но я хотел получить плавную предсказательную линию. Как получить это?

1 Ответ

0 голосов
/ 12 января 2019

Проблема в том, что массив X не отсортирован. Поэтому, когда вы используете линии -r для построения ваших данных, он соединяет точки данных в порядке ваших несортированных точек X-данных. Следовательно, вы видите случайную сеть линий. Порядок не имеет значения для графика с маркерами, потому что вы просто строите точки без линий.

Решение состоит в том, чтобы отсортировать данные X и передать отсортированные данные X вашей команде заговора и соответственно fit_transform.

shape = X.shape
X = np.sort(X.flatten())
plt.plot(X, lin_reg.predict(poly_features.fit_transform(X.reshape((shape)))),  "r-", lw=2)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...