我试图为我的数据创建一个2度的回归曲线。当我创建我的图表时,我得到了一个有趣的锯齿形东西:
但我想把我的数据建模成一条实际的曲线,看起来就像散点图的连接版本。
有什么建议/更好的方法吗?
degree = 2
p = np.poly1d(np.polyfit(data['input'],y, degree))
plt.plot(data['input'], p(data['input']), c='r',linestyle='-')
plt.scatter(data['input'], p(data['input']), c='b')
在这里,数据[['input']是与y具有相同维度的列向量。
编辑:我也试过这样做:
X, y = np.array(data['input']).reshape(-1,1), np.array(data['output'])
lin_reg=LinearRegression(fit_intercept=False)
lin_reg.fit(X,y)
poly_reg=PolynomialFeatures(degree=2)
X_poly=poly_reg.fit_transform(X)
poly_reg.fit(X_poly,y)
lin_reg2=LinearRegression(fit_intercept=False)
lin_reg2.fit(X_poly,y)
X_grid=np.arange(min(X),max(X),0.1)
X_grid=X_grid.reshape((len(X_grid),1))
plt.scatter(X,y,color='red')
plt.plot(X,lin_reg2.predict(poly_reg.fit_transform(X)),color='blue')
plt.show()
这给了我这个图表。
散点图是我的数据,蓝色之字形是一条二次曲线,用来模拟数据。帮助?
3条答案
按热度按时间4xy9mtcn1#
在你的图中,你只需要用直线从一点到另一点进行绘制(其中y值是来自polyfit函数的近似y)。
我会跳过polyfit函数(因为你有你感兴趣的所有y值),只需要用B样条函数
scipy
插值data['input']
和y
,然后用你感兴趣的x范围绘制新的y值。仅从点到点绘制(锯齿形)
插值点
试试这个,然后用你的数据调整!:)
svmlkihl2#
With Degree 3
With Degree 4
agxfikkp3#
因为你没有给我们看你的数据,我假设你的自变量不是单调的。
下面是我的代码
1.它计算两个数据向量,其中 y = y(x) 但 x 不是单调的
1.它计算一个拟合数据的二次多项式
1.它在上图的左侧绘制了 x与y 的散点图和 x与y=p(x) 的线图,其中 y 是根据最佳拟合多项式计算的
1.它排序 x → xs
1.在上图的右边部分,它再次绘制了相同的散点图和 xs vs y=p(xs) 的线图。
.