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