cas*_*per 9 python numpy least-squares
有人可以解释如何使用numpy.polyfit获取Chi ^ 2/doF?
Sve*_*ach 17
假设您有一些数据点
x = numpy.array([0.0, 1.0, 2.0, 3.0])
y = numpy.array([3.6, 1.3, 0.2, 0.9])
Run Code Online (Sandbox Code Playgroud)
要将抛物线拟合到这些点,请使用numpy.polyfit():
p = numpy.polyfit(x, y, 2)
Run Code Online (Sandbox Code Playgroud)
要获得此拟合的卡方x值,请在数据点的值处计算多项式,减去y值,平方和求和:
chi_squared = numpy.sum((numpy.polyval(p, x) - y) ** 2)
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以将此数字除以自由度数.
小智 5
Numpypolyfit至少从 1.3 版开始就支持full参数。如果设置为True,polyfit将返回更多值,包括残差的平方。这是卡方(未按自由度标准化)。
所以一个简单的例子是
p, residuals, _, _, _ = numpy.polyfit(x, y, 2, full=True)
chisq_dof = residuals / (len(x) - 3)
Run Code Online (Sandbox Code Playgroud)
我自己还没有尝试过使用权重,但我认为polyfit这里做了正确的事情(从 numpy 1.7 开始,polyfit接受一个参数w来提供拟合的权重)。
| 归档时间: |
|
| 查看次数: |
8319 次 |
| 最近记录: |