Re: 請問如何計算回歸方程式
※ 引述《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://www.ptt.cc/bbs/Python/M.1593103031.A.06E.html
→
06/26 00:40,
5年前
, 1F
06/26 00:40, 1F
推
06/26 17:11,
5年前
, 2F
06/26 17:11, 2F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章