具有PolynomialFeatures和LinearRegression的管道 - 意外结果

时间:2017-07-14 08:27:39

标签: python scikit-learn linear-regression pipeline

使用以下代码我只想拟合一个回归曲线来对未按预期工作的数据进行采样。

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

enter image description here

难道不存在完全适合数据点的曲线吗?因为训练数据(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()

enter image description here

那么这个行为的问题和解释是什么?

2 个答案:

答案 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

你会得到这个漂亮的数字:

enter image description here

答案 1 :(得分:0)

根据Miriam Farber的回答,我已经找到了另一种方法。由于X值未排序,我可以通过简单地使用以下值排序值来解决问题:

X=np.sort(X)

现在剩下的代码可以保持静止,并且可以提供所需的结果。

enter image description here