使用以下代码我只想拟合一个回归曲线来对未按预期工作的数据进行采样。
X = 10*np.random.rand(100)
y= 2*X**2+3*X-5+3*np.random.rand(100)
xfit=np.linspace(0,10,100)
poly_model=make_pipeline(PolynomialFeatures(2),LinearRegression())
poly_model.fit(X[:,np.newaxis],y)
y_pred=poly_model.predict(X[:,np.newaxis])
plt.scatter(X,y)
plt.plot(X[:,np.newaxis],y_pred,color="red")
plt.show()
难道不存在完全适合数据点的曲线吗?因为训练数据(X [:,np.newaxis])和用于预测y_pred的数据是相同的(也是(X [:,np.newaxis])。
如果我改为使用xfit数据来预测模型,结果就是所希望的......
...
y_pred=poly_model.predict(xfit[:,np.newaxis])
plt.scatter(X,y)
plt.plot(xfit[:,np.newaxis],y_pred,color="red")
plt.show()
那么这个行为的问题和解释是什么?
答案 0 :(得分:1)
两个图之间的区别在于
行UIVisualEffectView
{<1}}中的值未按照
排序plt.plot(X[:,np.newaxis],y_pred,color="red")
X[:,np.newaxis]
的值已排序。
现在,plt.plot(xfit[:,np.newaxis],y_pred,color="red")
逐行连接数组中的任意两个连续值,因为它们没有排序,所以在第一个数字中得到这一行。
替换
xfit[:,np.newaxis]
带
plt.plot
你会得到这个漂亮的数字:
答案 1 :(得分:0)