什么是最容易实现的线性回归算法?

时间:2015-07-30 23:11:55

标签: algorithm statistics linear-regression

我想使用普通最小二乘法实现单变量回归。我无法访问线性代数或微积分库,因此我需要实现任何矩阵运算或微分方法。什么是最不复杂的方法?

1 个答案:

答案 0 :(得分:1)

约翰D.库克有一个关于这个主题的excelent post,它有一个简单的C ++实现。他的实现使用恒定的内存,并且可以轻松地并行化。

我写了一个简单的Python版本。谨慎使用,可能存在错误:

class Regression:
    def __init__(self):
        self.n = 0.0
        self.sXY = 0.0
        self.xM1 = 0.0
        self.xM2 = 0.0
        self.yM1 = 0.0
        self.yM2 = 0.0

    def add(self, x, y):
        self.sXY += (self.xM1 - x) * (self.yM1 - y) * self.n / (self.n + 1.0);

        n1 = self.n;
        self.n+=1;

        xdelta = x - self.xM1;
        xdelta_n = xdelta / self.n;
        self.xM1 += xdelta_n;
        self.xM2 += xdelta * xdelta_n * n1;

        ydelta = y - self.yM1;
        ydelta_n = ydelta / self.n;
        self.yM1 += ydelta_n;
        self.yM2 += ydelta * ydelta_n * n1;

    def count(self):
        return self.n

    def slope(self):
        return self.sXY / self.xM2

    def intercept(self):
        return self.yM1 - (self.sXY / self.xM2) * self.xM1

    def correlation(self):
        return self.sXY / (self.xM2**0.5 * self.yM2**0.5)

    def covariance(self):
        return self.sXY / self.n

r = Regression()

r.add(1, 2)
r.add(4, 9)
r.add(16, 17)
r.add(17, 13)
r.add(21, 11)

print 'Count:', r.count()
print 'Slope:', r.slope()
print 'Intercept:', r.intercept()
print 'Correlation:', r.correlation()
print 'Covariance:', r.covariance()