• 最小二乘法的实现与线性回归的应用


    1. 简介

    简单线性回归中,您有一个因变量y和一个自变量X。该模型可以表示为:

    y = m x + b y=mx+b y=mx+b

    其中

    • x x x: 自变量
    • y y y: 因变量
    • m m m: 斜率
    • b b b: 截距

    最小二乘法是回归分析中用于估计线性回归模型参数的标准方法。它可以最小化误差的平方和,从而找到数据的最佳拟合直线。

    在这里,误差是实际值和预测值之间的差异。实际值是观察到的值,而预测值是模型的估计值。

    在这里,我们将使用最小二乘法来估计线性回归模型的参数。我们将使用以下公式来计算回归系数:

    s s h = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 ssh = \sum_{i=1}^{n}(y_i - (mx_i+b))^2 ssh=i=1n(yi(mxi+b))2

    根据链式法则,我们可以计算偏导数:

    链式法则:

    ∂ ∂ x [ f ( g ( x ) ) ] = f ′ ( g ( x ) ) ⋅ g ′ ( x ) \frac{\partial}{\partial x}[f(g(x))] = f'(g(x)) \cdot g'(x) x[f(g(x))]=f(g(x))g(x)

    公示得出,复合函数的导数等于外函数的导数乘以内函数的导数。

    设: u = y i − ( m x i + b ) u=y_i - (mx_i+b) u=yi(mxi+b)

    所以:

    ∂ ∂ x [ f ( g ( x ) ) ] = u 2 ⋅ ( y i − ( m x i + b ) ) \frac{\partial}{\partial x}[f(g(x))] = u^2 \cdot (y_i - (mx_i+b)) x[f(g(x))]=u2(yi(mxi+b))

    导数规则:

    • 常数: f ( x ) = c f(x)=c f(x)=c的导数为0
    • 幂规则: f ( x ) = x n f(x)=x^n f(x)=xn的导数为 n x n − 1 nx^{n-1} nxn1
    • 乘法常数规则: f ( x ) = c ⋅ g ( x ) 的导数为 c ⋅ g ′ ( x ) f(x)=c \cdot g(x)的导数为c \cdot g'(x) f(x)=cg(x)的导数为cg(x)
    • 和差规则: f ( x ) = g ( x ) ± h ( x ) f(x)=g(x) \pm h(x) f(x)=g(x)±h(x)的导数为 g ′ ( x ) ± h ′ ( x ) g'(x) \pm h'(x) g(x)±h(x)
    • 乘法规则: f ( x ) = g ( x ) ⋅ h ( x ) f(x)=g(x) \cdot h(x) f(x)=g(x)h(x)的导数为 g ′ ( x ) ⋅ h ( x ) + g ( x ) ⋅ h ′ ( x ) g'(x) \cdot h(x) + g(x) \cdot h'(x) g(x)h(x)+g(x)h(x)
    • 链式法则: f ( x ) = g ( h ( x ) ) f(x)=g(h(x)) f(x)=g(h(x))的导数为 g ′ ( h ( x ) ) ⋅ h ′ ( x ) g'(h(x)) \cdot h'(x) g(h(x))h(x)

    因为是二次方,所以使用幂规则:( u 2 u^2 u2的导数为 2 u 2u 2u

    ∂ ∂ m = 2 u ⋅ ( − x i ) \frac{\partial }{\partial m} = 2u \cdot (-x_i) m=2u(xi)

    ∂ ∂ m = − 2 x i ⋅ ( y i − ( m x i + b ) ) \frac{\partial }{\partial m} = -2x_i \cdot (y_i - (mx_i+b)) m=2xi(yi(mxi+b))

    因为0的0次方等于1,所以:

    ∂ ∂ b = − 2 u ⋅ 1 \frac{\partial }{\partial b} = -2u \cdot 1 b=2u1

    ∂ b ∂ b = − 2 ( y i − ( m x i + b ) ) \frac{\partial b}{\partial b} = -2(y_i - (mx_i+b)) bb=2(yi(mxi+b))

    我们可以通过求导数来找到最小值。我们将导数设置为0,然后解出m和b。

    ∂ s s h ∂ m = − 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 \frac{\partial ssh}{\partial m} = -2 \sum_{i=1}^{n}x_i(y_i - (mx_i+b)) = 0 mssh=2i=1nxi(yi(mxi+b))=0

    ∂ s s h ∂ b = − 2 ∑ i = 1 n ( y i − ( m x i + b ) ) = 0 \frac{\partial ssh}{\partial b} = -2 \sum_{i=1}^{n}(y_i - (mx_i+b)) = 0 bssh=2i=1n(yi(mxi+b))=0

    ∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 \sum_{i=1}^{n}x_i(y_i - (mx_i+b)) = 0 i=1nxi(yi(mxi+b))=0

    ∑ i = 1 n ( y i − ( m x i + b ) ) = 0 \sum_{i=1}^{n}(y_i - (mx_i+b)) = 0 i=1n(yi(mxi+b))=0

    ∑ i = 1 n x i y i − m ∑ i = 1 n x i 2 − b ∑ i = 1 n x i = 0 \sum_{i=1}^{n}x_iy_i - m\sum_{i=1}^{n}x_i^2 - b\sum_{i=1}^{n}x_i = 0 i=1nxiyimi=1nxi2bi=1nxi=0

    ∑ i = 1 n y i − m ∑ i = 1 n x i − n b = 0 \sum_{i=1}^{n}y_i - m\sum_{i=1}^{n}x_i - nb = 0 i=1nyimi=1nxinb=0

    接下来,我们将解出m和b。

    关于b的方程:

    n b = ∑ i = 1 n y i − m ∑ i = 1 n x i nb = \sum_{i=1}^{n}y_i - m\sum_{i=1}^{n}x_i nb=i=1nyimi=1nxi

    b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n} b=ni=1nyimi=1nxi

    关于m的方程:

    我们已知b的值,所以我们可以将其代入方程中:

    ∑ i = 1 n x i y i − m ∑ i = 1 n x i 2 − ∑ i = 1 n y i − m ∑ i = 1 n x i n ∑ i = 1 n x i = 0 \sum_{i=1}^{n}x_iy_i - m\sum_{i=1}^{n}x_i^2 - \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n}\sum_{i=1}^{n}x_i = 0 i=1nxiyimi=1nxi2ni=1nyimi=1nxii=1nxi=0

    乘n消除分母:

    n ∑ i = 1 n x i y i − m n ∑ i = 1 n x i 2 − ( ∑ i = 1 n y i − m ∑ i = 1 n x i ) ∑ i = 1 n x i = 0 n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i)\sum_{i=1}^{n}x_i = 0 ni=1nxiyimni=1nxi2(i=1nyimi=1nxi)i=1nxi=0

    n ∑ i = 1 n x i y i − m n ∑ i = 1 n x i 2 − ∑ i = 1 n y i ∑ i = 1 n x i + m ∑ i = 1 n x i ∑ i = 1 n x i = 0 n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i + m\sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_i = 0 ni=1nxiyimni=1nxi2i=1nyii=1nxi+mi=1nxii=1nxi=0

    n ∑ i = 1 n x i y i − m n ∑ i = 1 n x i 2 − ∑ i = 1 n y i ∑ i = 1 n x i + m ( ∑ i = 1 n x i ) 2 = 0 n\sum_{i=1}^{n}x_iy_i - mn\sum_{i=1}^{n}x_i^2 - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i + m(\sum_{i=1}^{n}x_i)^2 = 0 ni=1nxiyimni=1nxi2i=1nyii=1nxi+m(i=1nxi)2=0

    得出mn的方程:

    m n ∑ i = 1 n x i 2 − m ( ∑ i = 1 n x i ) 2 = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i mn\sum_{i=1}^{n}x_i^2 - m(\sum_{i=1}^{n}x_i)^2 = n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i mni=1nxi2m(i=1nxi)2=ni=1nxiyii=1nyii=1nxi

    m ( n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 ) = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i m(n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2) = n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i m(ni=1nxi2(i=1nxi)2)=ni=1nxiyii=1nyii=1nxi

    m = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i}{n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2} m=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nyii=1nxi

    此时,我们已经得到了m和b的值。分别为:

    m = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^{n}x_iy_i - \sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i}{n\sum_{i=1}^{n}x_i^2 - (\sum_{i=1}^{n}x_i)^2} m=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nyii=1nxi

    b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^{n}y_i-m\sum_{i=1}^{n}x_i}{n} b=ni=1nyimi=1nxi

    简写为:

    m = n ( ∑ x y ) − ( ∑ x ) ( ∑ y ) n ( ∑ x 2 ) − ( ∑ x ) 2 m = \frac{n(\sum_{}^{}xy) - (\sum_{}^{}x)(\sum_{}^{}y)}{n(\sum_{}^{}x^2) - (\sum_{}^{}x)^2} m=n(x2)(x)2n(xy)(x)(y)

    b = ∑ y − m ( ∑ x ) n b = \frac{\sum_{}^{}y - m(\sum_{}^{}x)}{n} b=nym(x)

    我们可以使用这些公式来计算m和b的值。然后,我们可以使用这些值来计算预测值。

    2. 代码实现

    2.1 导入库

    import numpy as np
    import matplotlib.pyplot as plt
    
    • 1
    • 2

    2.2 生成数据

    x = np.array([1, 2])
    y = np.array([2, 3])
    
    • 1
    • 2

    在这里插入图片描述

    2.3 计算m和b的值

    n = len(x)
    m = (n * np.sum(x * y) - np.sum(x) * np.sum(y)) / (n * np.sum(x ** 2) - np.sum(x) ** 2)
    b = (np.sum(y) - m * np.sum(x)) / n
    m,b
    
    • 1
    • 2
    • 3
    • 4

    得出结果:

    (1.0, 1.0)
    
    • 1

    2.4 计算预测值

    根据线性回归模型:

    y = m x + b y=mx+b y=mx+b

    因为m和b的值都为1,所以:

    y = x + 1 y=x+1 y=x+1

    假设x为3,那么y的值为:

    y = 3 + 1 = 4 y=3+1=4 y=3+1=4

    在这里插入图片描述

    3. 其他

    你可以记录下来,然后使用这些公式来计算m和b的值。然后,您可以使用这些值来计算预测值。

    我们使用的值比较简单,你可以尝试使用更多的值来计算m和b的值。不过,这些值必须是线性相关的。

  • 相关阅读:
    前端开发环境安装(vue)
    这些JS题面试时一定要答对!
    5G时代带动陶瓷PCB成长——GPS陶瓷天线调试方法(二)
    世界杯主题系列-用Scratch制作足球比赛小游戏,源码分享啦
    Java计算机毕业设计德云社票务系统源码+系统+数据库+lw文档
    【C/C++】C语言获取键盘输入
    五、Linux目录结构
    OpenCV 图像的几何变换
    .NET性能优化-快速遍历List集合
    论文阅读——Align before Fuse
  • 原文地址:https://blog.csdn.net/qq_41974199/article/details/132850786