对于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度的预测线时得到的结果。
使用绘图]:>
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" ) )
添加模式参数并将其设置为创建散点图的标记,它似乎可以正常工作,但在散点图中。
对于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 =线性回归()lin_reg.fit(X,y)y_pred_1 = lin_reg.predict(X)y_pred_1 = [_ [0] for _ in y_pred_1] ...
似乎您在进入LR之前在X_poly_2中有错误。似乎X_poly_2应该更改为
X_poly_2=X_poly_2[:,0].reshape(100,1)
我有同样的问题。这是我解决的方法。