统计思维(实例9)——线性最小二乘法

最小二乘法拟合

相关系数度量变量关系的强弱和正负,但并不关注关系的斜率。估计斜率最常用的是线性最小二乘法拟合(linear least squares fit),“线性拟合”是用一条线对变量关系进行建模,“最小二乘法”拟合实现线与数据之间的均方差最小。

假设我们要将一个点序列ys表示成另一个序列xs的函数。如果xs和ys之间存在线性关系,截距为inter,斜率为slope,那么我们就可以预期每个y[i]值为inter + slope * x[i]。

除非完全相关,否则我们的预测只能是近似的,实际数据到拟合线的竖直偏移或残差(residual)为:
res = ys - (inter + slope * xs)
残差可能由随机因素导致,如测量误差,也可能由未知的非随机因素导致。如果参数inter和slope的估计错误,那么残差就会变大,我们希望选择的参数能使残差最小。最常见的的做法是使残差平方和sum(res**2)最小,这么选择的理由是:

  • 平方值和残差的正负没有关系

  • 平方值使较大的残差具有更多的权重,但不至于使最大的残差作用过大

  • 如果残差不相关,符合均值为0且方差为常数(但未知)的正态分布,那么最小二乘法拟合也是inter和slope的最大似然估计量(参见https://en.wikipedia.org/wiki/Linear_regression)

实现

最小二乘法的简单实现如下:

def LeastSquares(xs, ys):
    meanx, varx = MeanVar(xs)
    meany = Mean(ys)
    
    slope = Cov(xs, ys, meanx, meany) / varx
    inter = meany - slope * meanx    
    return inter, slope 

   def FitLine(xs, inter, slope):
    fit_xs = np.sort(xs)
    fit_ys = inter + slope * fit_xs    
    return fit_xs, fit_ys
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值