题目要求简单线性回归,也就是给一组二维坐标,比如[0,1],[2,2],[5,4]...等等,然后求出对应在直角坐标系里的回归的直线的斜率和截距即可。
上网查了查,资料说有啥最小二乘法,牛顿法,梯度下降法等等,说实话公式一个也没看懂。初中数学给的那个线性回归公式倒是看懂了,算起来也挺简单的。从计算效率角度讲,具体算的时候用哪种方法比较快?
1
billlee 2023-11-12 14:48:50 +08:00
你这个一维模型应该是最小二乘法快吧,不过一维模型真的需要考虑效率问题吗?不是随便算都行
|
2
ranaanna 2023-11-12 14:48:53 +08:00
这么简单的线性回归问题,当然是最小二乘法罗。以前做实验的时候数据少都是手工或者用计算器算的。用电脑算实在是完全不在话下,现在流行机器学习人工智能什么的,海量的线性回归都没有问题,更不要说这么简单的。那些高斯牛顿法梯度下降法什么的是用来求函数最小值问题的,当然就不限于线性问题了,用来处理非线性最小二乘问题比较合适。这么简单的问题就先不要考虑那种方法比较快了
|
3
iorilu 2023-11-12 14:50:58 +08:00
线性回归, 直接调公式就出来啊, 不用迭代
公式任何一个线性代数库都 |
4
dayeye2006199 2023-11-12 14:57:59 +08:00 1
(X^T X)^-1 X^T Y
矩阵乘法直接撸就行 |
5
LykorisR 2023-11-12 16:38:26 +08:00
最小二乘法,Ax=b, x=(A^TA)^-1*A^Tb
|
6
iOCZS 2023-11-12 17:07:25 +08:00
数学计算的话,用最小二乘法就行了。
写代码的话,梯度下降这种迭代思想容易写成代码。 |
7
gpt5 2023-11-12 17:14:40 +08:00 1
一般来说,自己手写的,都不如调包快。
特别是久经优化和考验的包。 |
8
lithiumii 2023-11-12 17:43:15 +08:00 via Android
只要结果的话矩阵运算最快,需要各种参数(什么 t 啊 p 啊 f 啊之类的)调包快
|
9
ruxuan1306 2023-11-12 17:52:43 +08:00
Excel-数据分析-回归
|
10
ruxuan1306 2023-11-12 17:54:17 +08:00
哦不好意思没注意,原来是在对比计算机运行的效率,不是人算出结果的效率
|
11
jc89898 2023-11-12 20:08:36 +08:00
@dayeye2006199 你这个有很大的问题,一般都是近似法,直接计算 inverse 对大 matrix 根本不行
|
12
t133 2023-11-12 22:47:25 +08:00 via iPhone
@jc89898 解线性方程可以用 CG 需要 vector matrix multiplication.
也可以用 cholesky decomposition |
13
YsHaNg 2023-11-13 06:39:29 +08:00
svd 有 c 接口用 eigen 直接调用
|
14
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_) ``` |
15
sakura6264 2023-11-13 14:24:47 +08:00
最小二乘比较快吧。
真特别追求效率可以把演算挪到 GPU 上 |
16
vvhy 2023-11-13 21:41:15 +08:00
单变量线性回归,“初中方法”就好了啊,反正都是 O(n),区别不大,用最简单的就行了
|
17
rogerer 2023-11-14 10:12:38 +08:00 via iPhone
最小二乘法因为涉及到矩阵运算 在高维的时候效率比较低
|