首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是最容易实现的线性回归算法?

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

Stack Overflow用户
提问于 2015-07-31 07:11:55
回答 1查看 247关注 0票数 2

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

EN

回答 1

Stack Overflow用户

发布于 2015-07-31 08:47:45

约翰·D·库克在这个主题上有一个简单的C++实现的excelent post。他的实现使用常量内存,并且可以很轻松地并行化。

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

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31735595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档