作者mychiux413 (小邱)
看板Python
标题Re: 请问如何计算回归方程式
时间Fri Jun 26 00:37:09 2020
※ 引述《aredfish (一切都是假的)》之铭言:
: 给定两个相同长度的list,分别代表x与y的座标,请问我该怎麽用python去计算他的线性回归方程式y=mx+b 呢?
: -----
: Sent from JPTT on my Samsung SM-G930F.
如果你是想了解原理,首先方程式要改成下面比较好算:
y0 x0 1
y1 x1 1 m
[y2] = [x2 1][b]
y3 x3 1
. . 1
. . 1
. . 1
然後换成 Y = XA 表示
於是你会发现只有A是未知数, X,Y都是你采样到的数据,
而我们想找到一个A可以让所有的残值总和最小,
那麽A的解我们想像对两侧左边乘一个(X+),会使得(X+)X = I --> 单位矩阵,
那原式就会变成(X+)Y = (X+)XA = IA = A,
就求得A = (X+)Y 了, 所以关键只要找到(X+), m跟b就求出来了!
那麽X+到底是什麽呢? 直接给答案, 就是np.linalg.pinv(X), 所以直接速解:
import numpy as np
X = ...
Y = ...
A = np.matmul(np.linalg.pinv(X), Y)
print(A)
就解完了
你可以先带个简单的二元一次方程式验算看看:
已知 m = 1, b = 2
(1) m * 0.5 + b = 2.5
(2) m * 2.0 + b = 4.0
import numpy as np
X = [[0.5, 1.0], [2.0, 1.0]]
Y = [[2.5], [4.0]]
A = np.matmul(np.linalg.pinv(X), Y)
print(A)
发现会得到解析解,
接着扩大取样数据且加入误差会得到拟合的解.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.168.77.17 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1593103031.A.06E.html
1F:→ mychiux413: 详细理论参考: 统计学-台大开放式课程 06/26 00:40
2F:推 aredfish: 感谢,但一时无法理解,我再仔细想一下 06/26 17:11