- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很难弄清楚为什么我的 plt.legend 显示错误的多项式度数。它说 53 而不是 100。我的代码应该是这样的:
import scipy as sp
import numpy as np
import urllib2
import matplotlib.pyplot as plt
url = 'https://raw.github.com/luispedro/BuildingMachineLearningSystemsWithPython/master/ch01/data/web_traffic.tsv'
src = urllib2.urlopen(url)
data = np.genfromtxt(src)
x = data[:, 0]
y = data[:, 1]
x = x[~sp.isnan(y)]
y = y[~sp.isnan(y)]
def error(f, a, b):
return sp.sum((f(a) - b) ** 2)
fp100 = sp.polyfit(x, y, 100)
f100 = sp.poly1d(fp100)
plt.plot(x, f100(x), linewidth=4)
plt.legend("d={num}".format(num=f100.order), loc=2)
plt.show()
最佳答案
我可以用你的数据重现:
>>> np.__version__
1.8.0
>>> fp100 = sp.polyfit(x, y, 100)
polynomial.py:587: RankWarning: Polyfit may be poorly conditioned
warnings.warn(msg, RankWarning)
>>> f100 = sp.poly1d(fp100)
>>> f100.order
53
注意警告并咨询the docs :
polyfit issues a RankWarning when the least-squares fit is badly conditioned. This implies that the best fit is not well-defined due to numerical error. The results may be improved by lowering the polynomial degree or by replacing x by x - x.mean()
您的y
具有低方差:
>>> y.mean()
1961.7438692098092
>>> y.std()
860.64491521872196
因此,人们不会期望更高的多项式能够很好地拟合它。请注意,在按照文档的建议替换 x 之后,x 被 x-x.mean()
近似为低阶多项式,并不比高阶多项式差:
>>> xp=x-x.mean()
>>> f100 = sp.poly1d(sp.polyfit(xp, y,100))
>>> max(abs(f100(xp)-y)/y)
2.1173504721727299
>>> abs((f100(xp)-y)/y).mean()
0.18100985148093593
>>> f4 = sp.poly1d(sp.polyfit(xp, y, 4))
>>> max(abs(f4(xp)-y)/y)
2.1228866902203842
>>> abs((f4(xp)-y)/y).mean()
0.20139219654066282
>>> print f4
4 3 2
8.827e-08 x + 3.161e-05 x + 0.0003102 x + 0.06247 x + 1621
事实上,最重要的分量似乎有 2 次。所以这是正常的,最接近你的数据的次数不大于 100 的多项式实际上有 53 次。所有更高的单项式都是退化的。下图表示近似值,红线对应 4 次多项式,绿线对应 53 次多项式:
关于python - scipy.polyfit(x, y, 100) 将是 100 阶多项式,但 matplotlib.pyplot.legend 显示 53?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20838970/
这个问题在这里已经有了答案: Relationship between SciPy and NumPy (8 个答案) 关闭 6 年前。 我开始知道 numpy 和 scipy 都有 polyfit
为什么要 numpy.polyfit 和 numpy.polynomial.polynomial.polyfit 在下面的测试中产生不同的图? import numpy as np from nump
有没有办法计算两个变量的多项式模型的参数。它们是独立的,因此: z = a + bx + cx^2 + dy + ey^2 有人告诉我,您可以为此使用 numpy.polyfit,但它只能支持两个变量
有什么区别 https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html 和 https://docs.scipy.o
我使用了 numpy 的 polyfit 并获得了两个数组 x 和 y 的非常好的拟合(使用 7 阶多项式)。我的关系是这样的; y(x) = p[0]* x^7 + p[1]*x^6 + p[2]*
我正在尝试将二次方程拟合到一些实验数据并在 numpy 中使用 polyfit。我希望得到一条凹曲线,因此要确保二次项的系数为负,并且拟合本身也是加权的,因为点上有一些权重。有没有简单的方法来做到这一
我有一个对象以抛物线模式抛出的信息。从开始位置到结束位置以特定间隔总共拍摄了 30 张图像。 现在我已经设法提取了在所有 30 个图像中抛出的对象的 x,y 坐标...... 我认为使用 polyfi
我正在模拟三体问题并绘制 3D 轨迹图。我试图弄清楚如何通过使用 np.polyfit 扩展绘图线来预测这些行星的轨迹。我有使用数据框和 2D 图执行此操作的经验,但没有在 3D 中且不使用任何类型的
我正在尝试使用np.polyfit,但我不断收到错误: TypeError: polyfit() got an unexpected keyword argument 'w' documentatio
我有一个包含 20 列的数据框。我希望创建散点图,每个散点图都有一条最合适的线。 x 列将保持不变,我想使用 for 循环遍历数据框中的每个其他列。结果将是 19 个散点图。 我当前的设置看起来像这样
当用一条直线拟合一组数据并用误差加权时,我期望 polyfit 返回一个 2x2 协方差矩阵,我可以从中对对角线元素求平方根以找到系数中的不确定性,但我没有. 这是一个最小的工作示例: from nu
我找不到调整数据的曲线(列出“chi”和“m”)。我使用 polyfit 生成曲线,但它不足以捕捉点的行为。 前面的代码有一个图表,显示了数据和调整之间的差异。 import matplotlib.p
我想向量化以下函数 def nppolyfit(pnp_array, **kwargs): """ Moving polyfit """ win_size = kwargs['length
我浏览了文档,但无法正确解释 在我的代码中,我想找到一条通过 2 个点 (x1,y1), (x2,y2) 的直线,所以我使用了 np.polyfit((x1,x2),(y1,y2),1)因为它是一个
在用numpy的polyfit创建一条best fit时,可以指定参数full为True。除了系数之外,这会返回 4 个额外的值。这些值是什么意思,它们告诉我函数与我的数据的拟合程度如何? https
我有一些数据,我希望对其进行建模,以便能够在与数据相同的范围内获得相对准确的值。 为此,我使用 polyfit 来拟合 6 阶多项式,由于我的 x 轴值,它建议我将其居中并缩放以获得更准确的拟合。 但
这只是一个基本问题。我正在使用 polyfit 拟合线以散点。在某些情况下,我的散点具有相同的 X 值,而 polyfit 无法为其拟合一条线。必须有一些东西可以处理这种情况。毕竟,它只是一个线条配合
我正在尝试适应这些值: 这是我的代码: for i in range(-area,area): stDev1= [] for j in range(-area,area):
关于此:polynomial equation parameters我得到平方函数的 3 个参数 y = a*x² + b*x + c 现在我只想得到描述我的平方函数的 first 参数函数 y =
Polyfit 是一个很好的工具,可以将一条线拟合到一组点上。然而,我的数据具有不同程度的统计显着性。 例如,对于一个点 (x1,y2) 我可能只有 10 个观测值,而对于另一个点 (x2,y2) 我
我是一名优秀的程序员,十分优秀!