Re: [問題] 關於科學計算 --- 擬合 (fit)

作者: painkiller (肚子餓~)   2016-01-01 03:51:44
x,y各自有誤差值的情況其實還蠻複雜的
一般雙變數線性回歸有以下幾種
1. x, y 無誤差
2. x為自變數無誤差,y有誤差
3. x,y均為科學觀測所得數據,兩者均有各自誤差值
1最單純,剛剛有人提到的scipy.lingress就可以
有在用pandas的話也有內建的 OLS (ordinary least squre)
一些常見的繪圖package也有 (如seaborn)
自己選一個喜歡的即可
2稍微複雜一點,你想要的應該是
weighted least square,
基本上要自己照weighted least square的公式寫個function
然後用scipy.optimize.minimize之類東西去
針對輸入的資料minimize
3最麻煩,不過學會3 基本上1,2都可以輕鬆處理
scipy內建比較萬用的是scipy.odr.ODR (orthogonal distance regression)
或是像之前推文有人提到的total least squares
最近越來越流行的是MCMC/Bayesian approach
但是對MCMC沒啥基礎的話可能得花點時間學一下
不過如果只是想知道MCMC的結果
可以試試一些現有的MCMC package
比如說這個專門用MCMC求上述3.的斜率與截距的誤差的function:
https://github.com/jmeyers314/linmix
當然以上都是假設x跟y的量測誤差是獨立的,非獨立的狀況又更複雜了...
Good luck~
不知道scikitlearn有沒有更直接的做法就是了
※ 引述《modflow (星期一男孩)》之銘言:
: ※ 引述《nomoyang (恩)》之銘言:
: : 大家好,請教大家常用的科學計算模組有那些呢?
: : 我的需求:
: : 擬合函數 :y = a*x + b
: : 提供的觀測值:x、y (x與y都各自有誤差值)
: : 欲利用擬合找出來的值:
: : 1、參數值 a、b
: : 2、a與b的誤差值
: : 3、chi square χ2 (或 reduced chi square)
: : 謝謝大家 ^^
: 這看起來是線性回歸
: 用Scipy的linregress即可
: 詳細請看
: http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.linregress.html
作者: painkiller (肚子餓~)   2016-01-01 04:01:00
補充一下,x跟y的誤差都不小的時候比較有必要用MCMC如果誤差不大用MCMC沒什麼特別好處,只是慢而已 :P
作者: nomoyang (恩)   2016-01-01 09:09:00
謝謝你,我就是需要3 ^^
作者: yogi (Yogi)   2016-01-02 14:26:00
2的話可以用numpy自己的linag函式庫做pseudo-inverse matrix至於3的話, 可以用scipy的Orthogonal distance regressionhttp://docs.scipy.org/doc/scipy/reference/odr.html
作者: ENEP (Moo)   2016-01-02 14:40:00
作者: painkiller (肚子餓~)   2016-01-03 13:55:00
追加補充一點,MCMC還有個好處就是可以取upper limit有點像是所謂的survival analylsis的概念如果有的資料只有x有值,y只知道小於某個數字MCMC可以把這點考慮進去做regression
作者: andrew43 (討厭有好心推文後刪文者)   2016-01-13 15:16:00
這也叫 model II regression

Links booklink

Contact Us: admin [ a t ] ucptt.com