试图绘制二次回归,得到多行

时间:2015-11-24 21:09:09

标签: python matplotlib

我正在使用ipython演示numpy中的不同类型的回归,到目前为止,我已经能够毫无困难地绘制简单的线性回归。现在,当我继续对我的数据进行二次拟合并绘制它时,我没有得到二次曲线,而是获得了很多行。这是我正在运行的代码产生问题:

import numpy
from numpy import random
from matplotlib import pyplot as plt
import math

# Generate random data
X = random.random((100,1))
epsilon=random.randn(100,1)
f = 3+5*X+epsilon

# least squares system
A =numpy.array([numpy.ones((100,1)),X,X**2])
A = numpy.squeeze(A)
A = A.T
quadfit = numpy.linalg.solve(numpy.dot(A.transpose(),A),numpy.dot(A.transpose(),f))

# plot the data and the fitted parabola
qdbeta0,qdbeta1,qdbeta2 = quadfit[0][0],quadfit[1][0],quadfit[2][0]
plt.scatter(X,f)
plt.plot(X,qdbeta0+qdbeta1*X+qdbeta2*X**2)
plt.show()

我得到的是这张照片(放大显示问题): enter image description here

你可以看到,不是只有一个适合数据的抛物线,我有大量的个别线做了我不确定的事情。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您的X是随机排序的,因此用于绘制一条连续线的x值不是很好,因为它必须自行加倍。我猜你可以对它进行排序,但TBH我只是制作一个新的x坐标数组并使用它们:

plt.scatter(X,f)
x = np.linspace(0, 1, 1000)
plt.plot(x,qdbeta0+qdbeta1*x+qdbeta2*x**2)

给了我 example plot