gpt4 book ai didi

python - 使用 PolynomialFeatures 和 LinearRegression 绘制 n 次预测线,当 n > 1 时无法正常工作

转载 作者:行者123 更新时间:2023-12-01 00:03:00 24 4
gpt4 key购买 nike

对于 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()

输出 enter image description here

我做错了什么?

出于好奇,为什么 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"
)
)

添加模式参数并将其设置为创建散点图的标记,它似乎显示工作正常,但在散点图中。

最佳答案

我也遇到了同样的问题。这是我解决这个问题的方法。

x_predict = np.linspace(-3, 3, 100)
y_predict = lin_reg.predict(poly_features.transform(x_predict .reshape(-1, 1)))
plt.plot(x_predict , y_predict)
plt.plot(X, y, 'bo')
plt.show()

关于python - 使用 PolynomialFeatures 和 LinearRegression 绘制 n 次预测线,当 n > 1 时无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60199318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com