我得到了一个二维数据集,有两列x
和y
。我想在新数据输入时动态地获得线性回归系数和拦截。使用scikit-learn我可以像这样计算所有当前可用的数据:
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
x = np.arange(100)
y = np.arange(100)+10*np.random.random_sample((100,))
regr.fit(x,y)
print(regr.coef_)
print(regr.intercept_)
字符串
然而,我有一个相当大的数据集(总共超过10 k行),我想在有新行进来的时候尽可能快地计算系数和截距。目前计算10 k行大约需要600微秒,我想加快这个过程。
Scikit-learn似乎没有线性回归模块的在线更新功能。有没有更好的方法来做到这一点?
4条答案
按热度按时间dxpyg8gm1#
我从这篇论文中找到了解决方案:updating simple linear regression。实现如下:
字符串
性能对比:
Scikit学习版,总共计算10k个样本。
型
我的版本假设已经计算了9k样本:
型
10倍的速度,这是预期的。
ih99xse12#
我把Kevin Fang的回答改编成了一个类:
字符串
w6lpcovy3#
很好!感谢分享你的发现:)这里是一个用点积编写的解决方案的等效实现:
字符串
当处理时间序列数据时,我们可以扩展这个想法,使用软(类似EMA)窗口进行滑动窗口回归。
toiithl64#
您可以使用实现更快算法的加速库-特别是https://github.com/intel/scikit-learn-intelex
对于线性回归,您将获得更好的性能
第一个安装包
字符串
然后添加python脚本
型