有没有数学和算法好的朋友,计算线性回归用啥算法最快?

2023-11-12 14:18:13 +08:00
 Richard14

题目要求简单线性回归,也就是给一组二维坐标,比如[0,1],[2,2],[5,4]...等等,然后求出对应在直角坐标系里的回归的直线的斜率和截距即可。

上网查了查,资料说有啥最小二乘法,牛顿法,梯度下降法等等,说实话公式一个也没看懂。初中数学给的那个线性回归公式倒是看懂了,算起来也挺简单的。从计算效率角度讲,具体算的时候用哪种方法比较快?

2848 次点击
所在节点    程序员
17 条回复
billlee
2023-11-12 14:48:50 +08:00
你这个一维模型应该是最小二乘法快吧,不过一维模型真的需要考虑效率问题吗?不是随便算都行
ranaanna
2023-11-12 14:48:53 +08:00
这么简单的线性回归问题,当然是最小二乘法罗。以前做实验的时候数据少都是手工或者用计算器算的。用电脑算实在是完全不在话下,现在流行机器学习人工智能什么的,海量的线性回归都没有问题,更不要说这么简单的。那些高斯牛顿法梯度下降法什么的是用来求函数最小值问题的,当然就不限于线性问题了,用来处理非线性最小二乘问题比较合适。这么简单的问题就先不要考虑那种方法比较快了
iorilu
2023-11-12 14:50:58 +08:00
线性回归, 直接调公式就出来啊, 不用迭代

公式任何一个线性代数库都
dayeye2006199
2023-11-12 14:57:59 +08:00
(X^T X)^-1 X^T Y
矩阵乘法直接撸就行
LykorisR
2023-11-12 16:38:26 +08:00
最小二乘法,Ax=b, x=(A^TA)^-1*A^Tb
iOCZS
2023-11-12 17:07:25 +08:00
数学计算的话,用最小二乘法就行了。
写代码的话,梯度下降这种迭代思想容易写成代码。
gpt5
2023-11-12 17:14:40 +08:00
一般来说,自己手写的,都不如调包快。
特别是久经优化和考验的包。
lithiumii
2023-11-12 17:43:15 +08:00
只要结果的话矩阵运算最快,需要各种参数(什么 t 啊 p 啊 f 啊之类的)调包快
ruxuan1306
2023-11-12 17:52:43 +08:00
Excel-数据分析-回归

<amp-youtube data-videoid="EUR7RE18VDY" layout="responsive" width="480" height="270"></amp-youtube>
ruxuan1306
2023-11-12 17:54:17 +08:00
哦不好意思没注意,原来是在对比计算机运行的效率,不是人算出结果的效率
jc89898
2023-11-12 20:08:36 +08:00
@dayeye2006199 你这个有很大的问题,一般都是近似法,直接计算 inverse 对大 matrix 根本不行
t133
2023-11-12 22:47:25 +08:00
@jc89898 解线性方程可以用 CG 需要 vector matrix multiplication.
也可以用 cholesky decomposition
YsHaNg
2023-11-13 06:39:29 +08:00
svd 有 c 接口用 eigen 直接调用
dun2
2023-11-13 09:44:30 +08:00
python 走起..

```
import numpy as np
from sklearn.linear_model import LinearRegression

x = np.array([0, 2, 5]).reshape(-1, 1)
y = np.array([1, 2, 4])

model = LinearRegression()

model.fit(x, y)

print(f"斜率:", model.coef_[0])
print(f"截距:", model.intercept_)
```
sakura6264
2023-11-13 14:24:47 +08:00
最小二乘比较快吧。
真特别追求效率可以把演算挪到 GPU 上
vvhy
2023-11-13 21:41:15 +08:00
单变量线性回归,“初中方法”就好了啊,反正都是 O(n),区别不大,用最简单的就行了
rogerer
2023-11-14 10:12:38 +08:00
最小二乘法因为涉及到矩阵运算 在高维的时候效率比较低

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/991152

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX