线性回归之最小二乘法——收藏

转载:
来源于:线性回归之最小二乘法

线性回归

线性回归是很常见的一种回归,线性回归可以用来预测或者分类,主要解决线性问题。
最小二乘法

线性回归过程主要解决的就是如何通过样本来获取最佳的拟合线。最常用的方法便是最小二乘法,它是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。

标题 ##数推导:

  1. 假设拟合直线为: y = a x + b y=ax+b y=ax+b

  2. 对任意样本点(xi,yi),误差为: e = y i − ( a x i + b ) e=y_i−(ax_i+b) e=yi(axi+b)

  3. 当$S=∑_{i=1}{n}n_i=∑e_i2 为 最 小 时 拟 合 度 最 高 , 即 为最小时拟合度最高,即 ∑_{i=1}{n}n_i=(y_i−ax_i−b)2$最小。

  4. 分别求一阶偏导
    ∂ S / ∂ b = − 2 ( ∑ i = 1 n y i − n b − a ∑ i = 1 n n x i ) ∂S/∂b=−2(∑_{i=1}^ny_i−nb−a∑_{i=1}^nnx_i) S/b=2(i=1nyinbai=1nnxi)
    ∂ S / ∂ a = − 2 ( ∑ i = 1 n x i y i − b ∑ i = 1 n x i − a ∑ i = 1 n x i 2 ) ∂S/∂a=−2(∑_{i=1}^nx_iy_i−b∑_{i=1}^nx_i−a∑_{i=1}^nx_i^2) S/a=2(i=1nxiyibi=1nxiai=1nxi2)

  5. 分别让上面两式等于0,并且有 n x ¯ = ∑ i = 1 n x i nx¯=∑^n_{i=1}x_i nx¯=i=1nxi n y ¯ = ∑ i = 1 n y i ny¯=∑^n_{i=1}y_i ny¯=i=1nyi

  6. 得到最终解
    这里写图片描述
    结果也可以如下:
    这里写图片描述
    代码实现如下:

import numpy as np
import matplotlib.pyplot as plt

def calcAB(x,y):
    n = len(x)
    sumX,sumY,sumXY,sumXX =0,0,0,0
    for i in range(0,n):
        sumX  += x[i]
        sumY  += y[i]
        sumXX += x[i]*x[i]
        sumXY += x[i]*y[i]
    a = (n*sumXY -sumX*sumY)/(n*sumXX -sumX*sumX)
    b = (sumXX*sumY - sumX*sumXY)/(n*sumXX-sumX*sumX)
    return a,b,

xi = [1,2,3,4,5,6,7,8,9,10]
yi = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]
a,b=calcAB(xi,yi)
print("y = %10.5fx + %10.5f" %(a,b))
x = np.linspace(0,10)
y = a * x + b
plt.plot(x,y)
plt.scatter(xi,yi)
plt.show()

矩阵推导

这里写图片描述

代码实现:

import numpy as np
import matplotlib.pyplot as plt

x = [1,2,3,4,5,6,7,8,9,10]
y = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]

A = np.vstack([x,np.ones(len(x))]).T

a,b = np.linalg.lstsq(A,y)[0]
print("y = %10.5fx + %10.5f" %(a,b))
x = np.array(x)
y = np.array(y)

plt.plot(x,y,'o',label='data',markersize=10)
plt.plot(x,a*x+b,'r',label='line')
plt.show()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值