用python计算residuals

这篇笔记整理了如何使用numpy库计算residuals。通过numpy的函数操作,结合numpy.vstack和lstsq解决最小二乘拟合问题,找到线性方程的解,从而求得原始数据与拟合线之间的residuals。
部署运行你感兴趣的模型镜像

经常涉及到这些小操作,每次都没整理,下次用的时候又得百度,麻烦,干脆整理下,下次使用直接翻笔记了!

  1. 采用numpy库,如何计算residuals(x,y)?记得这里的x,y都是numpy.ndarray,假设x.shape=(3L,3L), y.shape=(3L,)
    >>> x
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
     >>> y
    array([2, 5, 8])
  1. 那怎么计算x与y之间的residuals呢?用到一些np中的简单操作,比如函数原型:numpy.vstack(tup),等价于:np.concatenate(tup, axis=0) if tup contains arrays thatare at least 2-dimensional.
A=np.vstack([x,np.ones(x.shape[-1])]).T
>>> A
array([[1., 4., 7., 1.],
      [2., 5., 8., 1.],
      [3., 6., 9., 1.]])

直观的从例子可以看出A就是x另外加上全1的行,两个连接起来,然后转置。
4. 接下来使用lstsq(ndarray)来计算AB=y的最小二乘解:

B=np.linalg.lstsq(A,y)[0]
>>> B
array([ 2.57894737,  1.        , -0.57894737, -0.52631579])
  1. 不好理解了?再深入点,要拟合y=mx+c这条线了,所以要求解下AB=y的最小二乘解,实在不懂,参考numpy帮助,看看那个解释,偶就不想再琢磨了,哈哈,懒一点哇。找到m,c的值:
m=B[:-1]
>>> m 注意这是除常数的其它系数了
array([ 2.57894737,  1.        , -0.57894737])
c=B[-1]
>>> c  注意这是常数项系数
-0.5263157894736847

那显然可以知道,拟合出的线是啥(为了简单,我们就当成直线哇,和帮助吻合,看起来更容易懂)?pre=np.sum(m*x.T,axis=1)+c
原始的线是y, So:

pre=np.sum(m*x.T,axis=1)+c
>>> pre  注意这里m.shape=(3L,),x.shape=(3L,3L),这俩乘积是用m的每个元素分别乘以x的每一列,形成新的(3L,3L)矩阵,要注意理解背后的原理,别被忽悠了!
array([2., 5., 8.])
  1. 那最后两者之间的residuals就可以直接如下计算:
    res=y-pre

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值