最小二乘法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

几个关键字: 优化技术最小误差的平方和最佳函数曲线拟合

1、线性最小二乘的基本公式

考虑超定方程组(超定指未知数小于方程个数):

∑ j = 1 n X i j β j = y i , ( i = 1 , 2 , 3... m ) \sum_{j=1}^nX_{ij}\beta_j=y_i,(i=1,2,3...m) j=1nXijβj=yi(i=1,2,3...m)
其中m代表有m个等式,n代表有 n 个未知数 ,m>n ;将其进行向量化后为: X β = y X\beta=y Xβ=y

在这里插入图片描述
   , ,
显然该方程组一般而言没有解,所以为了选取最合适的 β \beta β 让该等式"尽量成立",引入残差平方和函数S : S ( β ) = ∥ X β − y ∥ S(\beta)=\lVert{X\beta-y}\rVert S(β)=Xβy

(在统计学中,残差平方和函数可以看成n倍的均方误差MSE)
β = β ^ \beta=\hat{\beta} β=β^ 时, S ( β ) S(\beta) S(β) 取最小值,通过对 S ( β ) S(\beta) S(β) 进行微分求最值,可以得到:
X T X β ^ = X T y X^TX\hat{\beta}=X^Ty XTXβ^=XTy

如果矩阵 X T X X^TX XTX 非奇异则 β \beta β有唯一解:

β ^ = ( X T X ) − 1 X T y \hat{\beta}=(X^TX)^{-1}X^Ty β^=(XTX)1XTy

2、一元线性回归

一元线性回归,表示只有一个因变量,从数学公式来说就是一条直线,数学公式: y = a x + b y=ax+b y=ax+b

现在生成 100 组模拟数据,这些数据为 y = 0.5 ∗ x + 0.5 , ( a = 0.5 , b = 0.5 ) y=0.5*x + 0.5, (a=0.5, b=0.5) y=0.5x+0.5,(a=0.5,b=0.5) 直线附近的散点。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
g = np.random.normal(0, 0.01, 100)
x = np.linspace(0,1,100)
a = 0.5
b = 0.5
y = x*a + b
y2 = y + g
plt.plot(x, y)
plt.scatter(x, y2, color='red')
plt.grid()
plt.title("linear regression")
plt.show()

上面的代码可见,y 数组中的点都分布在直线上,而 y2 数组中的点与直线有一定的偏离,偏离值符合期望为 0,标准差为 0.01 的正态分布。

在这里插入图片描述
问题是,如果我们已知 y2 数组中的值,如何去拟合并求得最终的一元线性方程呢?

监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面。

最小二乘法的原则是以“残差平方和最小”确定直线位置。用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。

最常用的是普通最小二乘法(Ordinary Least Square,OLS):所选择的回归模型应该使所有观察值的残差平方和达到最小。(Q为残差平方和)- 即采用平方损失函数。

样本回归模型:
在这里插入图片描述

其中 e i e_i ei 为样本 $(X_i, Y_i) $ 的误差。

对平方损失函数求偏导,函数的极值点为偏导为 0 的点,最后可得:
在这里插入图片描述

实例

数据编号12345
x0.10.10.20.30.4
y1.11.11.93.13.9

∑ i = 1 5 X i \displaystyle\sum_{i=1}^5X_i i=15Xi = 0.1+0.1+0.2+0.3+0.4 = 1.1
∑ i = 1 5 X i 2 \displaystyle\sum_{i=1}^5X_i^2 i=15Xi2 = 0.01 + 0.01 + 0.04 + 0.09 + 0.16 = 0.31
∑ i = 1 5 X i Y i \displaystyle\sum_{i=1}^5X_iY_i i=15XiYi = 3.09
∑ i = 1 5 Y i \displaystyle\sum_{i=1}^5Y_i i=15Yi = 11.1

结合公式可以算法直线方程为 : y = 0.1235 + 9.5294 x y=0.1235+9.5294x y=0.1235+9.5294x

使用 Java Math3 中的 SimpleRegression 来验证计算结果:

        SimpleRegression regression = new SimpleRegression();
        regression.addData(0.1d, 1.1);
        regression.addData(0.1d, 1.1);
        regression.addData(0.2d, 1.9);
        regression.addData(0.3d, 3.1);
        regression.addData(0.4d, 3.9);


        System.out.println(regression.getIntercept()); //0.12352941176470651
        System.out.println(regression.getSlope());//9.529411764705879

3、最小二乘法的矩阵形式

最小二乘法的矩阵形式为: A x = b Ax=b Ax=b

其中 A 为 n × k n{\times}k n×k 的矩阵, x 为 k × 1 k{\times}1 k×1 的列向量, b 为 为 n × 1 n{\times}1 n×1 的列向量。

正常来看,这个方程是没有解的,但在数值计算领域,我们通常是计算 m i n ∥ A x − b ∥ min\lVert{Ax-b}\rVert minAxb ,解出其中的 x 。比较直观的做法是求解 A T A x = A T b A^TAx=A^Tb ATAx=ATb,但通常比较低效。

其中一种常见的解法是对 A 进行QR分解( A = Q R A=QR A=QR ),其中 Q 是 n × k n{\times}k n×k 正交矩阵(Orthonormal Matrix),R 是 k × k k{\times}k k×k 上三角矩阵(Upper Triangular Matrix),则有:
m i n ∥ A x − b ∥ = m i n ∥ Q R x − b ∥ = m i n ∥ R x − Q − 1 b ∥ min\lVert{Ax-b}\rVert=min\lVert{QRx-b}\rVert=min\lVert{Rx-Q^{-1}b}\rVert minAxb=minQRxb=minRxQ1b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值