我正在使用 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()
您可以看到,我没有一条适合数据的抛物线,而是有大量单独的线在做一些我不确定的事情。任何帮助将不胜感激。
最佳答案
您的X
是随机排序的,因此它不是一组很好的用于绘制连续线的x值,因为它必须自身加倍。我猜你可以对它进行排序,但是说实话,我只是创建一个新的 x 坐标数组并使用它们:
plt.scatter(X,f)
x = np.linspace(0, 1, 1000)
plt.plot(x,qdbeta0+qdbeta1*x+qdbeta2*x**2)
关于python - 尝试绘制二次回归,得到多条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903846/