Difficoltà nel tracciare la regressione lineare di 2 gradi
Aug 25 2020
Sto affrontando alcuni problemi durante il tracciamento di una regressione lineare 2d con una curva di 2 gradi da un modello di Machine Learning.
Ecco il mio codice:
m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)
plt.plot(X, y, "b.")
plt.show()
Fino a qui ok, questo è il mio grafico a dispersione:
Ora sto addestrando un modello lineare di 2 gradi.
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
Modello addestrato.
E questo è il mio risultato quando traccio la curva:
plt.plot(X, lin_reg.predict(X_poly), "r-")
plt.show()
Sto cercando di capire come stampare la curva continua e non quei punti collegati in linea.
Di seguito è riportato l'output desiderato, disegnare manualmente.
Risposte
2 TrentonMcKinney Aug 25 2020 at 12:17
- Probabilmente ti prendi a calci
- Va tutto bene, tranne che
Xdeve essere risolto con numpy.sort().- Le linee vengono tracciate in ordine, da un punto all'altro. Poiché i punti non sono ordinati per
X, vengono disegnati ovunque.
- Le linee vengono tracciate in ordine, da un punto all'altro. Poiché i punti non sono ordinati per
np.random.seed(365)è stato specificato per produrre ogni volta gli stessi valori.
import numpy
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
m = 100
np.random.seed(365)
X = 6 * np.random.rand(m, 1) - 3
X = np.sort(X, axis=0) # sort the values
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)
# regression code
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
# plot
plt.plot(X, y, "b.")
plt.plot(X, lin_reg.predict(X_poly), "r-")
plt.show()