Для MRE:
m = 100
X = 6*np.random.rand(m,1)-3
y = 0.5*X**2 + X+2 + np.random.randn(m,1)
lin_reg = LinearRegression()
lin_reg.fit(X,y)
y_pred_1 = lin_reg.predict(X)
y_pred_1 = [_[0] for _ in y_pred_1]
График (X, y) на графике работает нормально. Построение (X, y_pred_1) дает мне линию наилучшего соответствия. Теперь, поскольку мое значение y выше создано с использованием X в степени 2, то это будет выглядеть как парабола.
Таким образом, лучшая подгоночная линия в этом случае будет не линейной, а полиномиальной со степенью 2.
Итак, я делаю:
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly_2 = poly_features.fit_transform(X)
poly_reg_2 = LinearRegression()
poly_reg_2.fit(X_poly_2, y)
y_pred_2 = poly_reg_2.predict(X_poly_2)
y_pred_2 = [_[0] for _ in y_pred_2]
и нанесу ее на график, который дает мне что-то вроде параболы, но содержит слишком много строк. вот что я получаю, когда строю точки, прогнозирую линию 1 градуса, прогнозирую линию 2 градуса.
Используя ploty:
import plotly.graph_objects as go
plot_X = [_[0] for _ in X.tolist()]
plot_y = [_[0] for _ in y.tolist()]
fig = go.Figure()
fig.add_trace(
go.Scatter(
x = plot_X,
y = plot_y,
mode="markers"
)
)
fig.add_trace(
go.Scatter(
x = plot_X,
y = y_pred_1,
name="degree = 1"
)
)
fig.add_trace(
go.Scatter(
x = plot_X,
y = y_pred_2,
name="degree = 2"
)
)
fig.show()
, которая выдает
Что я делаю не так?
Из любопытства, почему sklearn использует линейную регрессию для предсказания нелинейных вещей, таких как парабола, в моем случае?
Также если Я бегу poly_reg_2.coef_
, это дает мне array([[0.99366804, 0.45225746]])
, как бы я это интерпретировал?
y = 0.99366804x + 0.45225746x
было то, что я думал, но тогда это не будет рисовать параболу, откуда вы знаете, какой коэффициент поднять до степени из 2 и какой из них сохранить его градус = 1?
РЕДАКТИРОВАТЬ: когда я строю график, используя
fig.add_trace(
go.Scatter(
x = plot_X,
y = y_pred_2,
name="degree = 2",
mode="markers"
)
)
, добавив параметр режима и установив его в маркер, который создает график рассеяния, он, кажется, показывает работу хорошо, но на графике рассеяния.