【问题标题】:Least square fit a 2D line最小二乘拟合二维线
【发布时间】:2017-08-20 22:53:18
【问题描述】:

我意识到我可以使用 numpy 来找到这样的行:

import numpy as np
import matplotlib.pyplot as plt
a = np.array([1,2,3,4,6,7])
b = np.array([5,4,3,2,-2,-1])
k,m = np.polyfit(a,b,1)
plt.scatter(a,b)
plt.plot([0,10],[m,10*k+m])
plt.show()

但我想改用原始 python 代码。我的数学太生疏了,但如果能用几行代码完成,我真的很感激帮助!

【问题讨论】:

  • 我不确定我是否理解你的问题。原始 Python 代码到底是什么意思?您可以快速找到普通最小二乘系数估计的方程。它们实现起来非常简单,但如果不使用numpy/scipy 矩阵代数例程,它就不会完全适合“几行”。
  • @juanpa.arrivillaga: 一个 numpy 矩阵代数实现绝对足够好(但我自己搞不清楚)!
  • 我正在使用手机,但请查看this out
  • here 是简单的二维情况。不需要矩阵代数。

标签: python least-squares


【解决方案1】:

如果您正在寻找基于最小化二次误差的 simple linear regression,纯 Python 实现非常简单(检查上面链接中的 α 和 β 方程):

def linear_fit(x, y):
    """For set of points `(xi, yi)`, return linear polynomial `f(x) = k*x + m` that
    minimizes the sum of quadratic errors.
    """
    meanx = sum(x) / len(x)
    meany = sum(y) / len(y)
    k = sum((xi-meanx)*(yi-meany) for xi,yi in zip(x,y)) / sum((xi-meanx)**2 for xi in x)
    m = meany - k*meanx
    return k, m

对于您的示例输入:

>>> x = [1,2,3,4,6,7]
>>> y = [5,4,3,2,-2,-1]
>>> linear_fit(x, y)
(-1.1614906832298135, 6.285714285714285)

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2017-02-24
    • 2012-08-29
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多