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)