Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有多项式特征和线性回归的管道-意外结果_Python_Scikit Learn_Linear Regression_Pipeline - Fatal编程技术网

Python 具有多项式特征和线性回归的管道-意外结果

Python 具有多项式特征和线性回归的管道-意外结果,python,scikit-learn,linear-regression,pipeline,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.pred

使用下面的代码,我只想将回归曲线拟合到未按预期工作的样本数据

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


那么,这种行为的问题和解释是什么呢?

这两个图的区别在于

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
将数组中的任意两个连续值逐行连接起来,因为它们没有排序,所以在第一个图中可以看到这一组行

替换

plt.plot(X[:,np.newaxis],y_pred,color="red")

你会得到一个漂亮的身材:


根据Miriam Farber的回答,我想出了另一种方法。由于X值没有排序,我可以通过简单地用以下值排序来解决问题:

X=np.sort(X)
现在剩下的代码可以保持静止,并将提供所需的结果

X=np.sort(X)