详解最小二乘法

最小二乘法

   在阅读西瓜书时,一开始很疑惑为什么可以用最小二乘法去求解线性模型的最优参数解,后来通过学习Andrew Y. Ng的机器学习课程终于明白了最小二乘法求参的缘由,并分享给大家我的理解。

  由于涉及数学理论的知识,总离不开大量的公式。为了不过于枯燥,我尽量让本文显得通俗易懂些。但其实更希望朋友们能静下心来,细细推导每一个公式的由来,欣赏其中的数学之美。


背景概述

  我们知道在机器学习中有这样一类模型,它叫做线性模型,它的主要表现形式如下所示:
f ( x i ) = θ T x i + b ( 1 ) f(x^i)=\theta^T x^i+ b \qquad(1) f(xi)=θTxi+b(1)
   这里简单介绍一下每个符号的意思:

  • x i x^i xi 表示第 i i i 个样本,需要注意的是 x i x^i xi 并不是一个实数,而是一个拥有 n n n 个属性的列向量,用公式直观地表示为: ( x i ) T = { x 1 i , x 2 i , . . . , x n i } {(x^i)}^T = \{x_1^i, x_2^i,...,x_n^i\} (xi)T={x1i,x2i,...,xni} ,其中 x 1 i x_1^i x1i 则代表第 i i i 个样本的第1个属性,依次类推。

  • θ T = { θ 1 , θ 2 , . . . , θ n } \theta^T = \{ \theta_1, \theta_2,...,\theta_n\} θT={θ1,θ2,...,θn} 可以看到 θ \theta θ 同样是一个 n n n 行列向量,其中每一行的值,如 θ 1 \theta_1 θ1 就代表着第一个属性在这个线性分类器的权重。可以发现 θ T x i = θ 1 x 1 i + θ 2 x 2 i + . . . + θ n x n i \theta^T x^i = \theta_1 x_1^i + \theta_2 x_2^i +...+\theta_n x_n^i θTxi=θ1x1i+θ2x2i+...+θnxni 相当于每个属性和其对应的权重相乘,也就是线性模型称号的由来。

  • b b b 很好理解,类似于一元函数 y = a x + b y = ax + b y=ax+b 中的 b b b,就是线性模型的一个偏移量。

  • f ( x i ) f(x^i) f(xi) 就是我们的线性回归函数,对于输入的一个样本 x i x^i xi ,线性回归函数都会对应地给予一个预测值,即 f ( x i ) f(x^i) f(xi)

   所以求解线性模型的关键就在于求得 θ \theta θ b b b ,为了求解方便,我们适当对之前的公式进行一些调整:

  • θ T = { θ 1 , θ 2 , . . . , θ n , b } \theta^T = \{\theta_1, \theta_2,...,\theta_n, b\} θT={θ1,θ2,...,θn,b} ,即在原先 θ \theta θ 的基础上在加一行,并且使得该行值等于 b b b θ ∈ R n + 1 \theta \in \Bbb R^{n + 1} θRn+1

  • ( x i ) T = { x 1 i , x 2 i , . . . , x n i , 1 } {(x^i)}^T = \{x_1^i, x_2^i, ... , x_n^i, 1\} (xi)T={x1i,x2i,...,xni,1} , 即 x i ∈ R n + 1 x^i \in \Bbb R^{n+1} xiRn+1

  有了这两个改动,我们就能非常轻松地将 (1) 式改成如下形式:
f ( x i ) = θ T x i ( 2 ) f(x^i) = \theta^T x^i \qquad (2) f(xi)=θTxi(2)

   此时我们的任务就简化成了求 θ \theta θ ,也就是在这时我们可以使用最小二乘法来求解 θ \theta θ :
1 2 ∑ i = 1 n ( f ( x i ) − y i ) 2 ( 3 ) \frac{1}{2} \sum_{i = 1}^{n} {(f(x^i) - y^i)^2} \qquad (3) 21i=1n(f(xi)yi)2(3)

   这里的 y i y^i yi 是指第 i i i 个样例的真实标记,也就是实际结果,而不是我们的预测结果。

   只要求得使(3)式的值最小的 θ \theta θ 就完成了求得最优参数的过程,这就是最小二乘法的本质。

   用数学公式表示为: θ = a r g m i n { 1 2 ∑ i = 1 n ( f ( x i ) − y i ) 2 } \theta = argmin\{\frac{1}{2} \sum_{i = 1}^{n} {(f(x^i) - y^i)^2} \} θ=argmin{21i=1n(f(xi)yi)2}

   关于这个求解过程我们先不去讲,我们先讲讲为什么在这里可以使用最小二乘法来求解最优参数。


为什么可以用最小二乘法

   我们首先要明确一点,线性模型并不能百分百准确地预测结果。

   比方说我们预测房价,根据面积,房间数,我们可以构建一个简单的线性模型,通过大量的训练,我们使得这个模型精度达到一定程度。给定这个模型一个房子的上述属性,我们可以得到该房子的预测价格在一定程度上接近甚至与市价相同。但是总有意外,房屋主人希望尽快将房子卖出去,可能抛售的价格就会低于我们的预测价格;又或者说房屋主人希望多卖些,那么定价可能会稍高些。所以一个又一个的意外会使得我们的线性模型出现问题。所以我们需要构建一个更加强壮的线性模型:
y i = θ T x i + ε i ( 4 ) y^i = \theta^T x^i + \varepsilon^i \qquad (4) yi=θTxi+εi(4)

  • 在这里, ε i \varepsilon^i εi 代表了第 i i i 个样本的所有各种各样的误差加在一起的总误差。

   通过这个公式可以看出,真实的标记结果 y i y^i yi (在房价问题里,指的是房屋抛售出来的真实价格,而不是我们的预测价格) 是由我们的线性回归预测结果再加上一个总误差得到的。

   关于这个总误差的分布,我们不妨大胆地假设它呈正态分布,即:
ε i ∼ N ( 0 , σ 2 ) ( 5 ) \varepsilon^i \sim N(0, \sigma^2) \qquad (5) εiN(0,σ2)(5)

  为什么能假设这个总误差为正态分布呢?我截取了《概率统计教程(第二版)》的一段话:

人们已经知道,很多工程测量中产生的误差X都是服从正态分布的随机变量。分析起来,造成误差的原因有仪器偏差 X 1 X_1 X1,大气折射偏差 X 2 X_2 X2, 温度变化偏差 X 3 X_3 X3,估读误差造成的偏差 X 4 , . . . X_4, ... X4,... 这些偏差 X i X_i Xi 对总误差 X X X 的影响一般都很微小,没有一个起到特别突出的影响,类似的情况通常是:虽然每个 X i X_i Xi的分布并不知道,但 X = ∑ X i X = \sum X_i X=Xi 却服从正态分布。

   通过这段话是不是能更好地理解这个总误差服从正态分布的原因了。这里选择 μ = 0 \mu = 0 μ=0 的原因是,这些误差使得房价可能稍高可能稍低,所以这样选择比较合适。这个选择放在其他情况都是合适的,因为误差往往都是正负的。

   接下来就是公式推导过程了:

   由(5)式我们可以得到:
y i − θ T x i ∼ N ( 0 , σ 2 ) ( 6 ) y^i - \theta^T x^i \sim N(0, \sigma^2) \qquad (6) yiθTxiN(0,σ2)(6)

   假设 θ \theta θ 已经确定,但我们还没有求出其值,对于单个样例,我们可以得到:
p ( y i ∣ x i ; θ ) = 1 2 π σ e − ( y i − θ T x i ) 2 2 σ 2 p(y^i|x^i ; \theta) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(y^i - \theta^T x^i)^2}{2 \sigma^2}} p(yixi;θ)=2π σ1e2σ2(yiθTxi)2

   根据极大似然估计(如果不知道,可以网上搜一下)计算整个样本集(包含有m个样例)的似然函数:
L ( θ ) = p ( y ∣ x ; θ ) = ∏ i = 1 m 1 2 π σ e − ( y i − θ T x i ) 2 2 σ 2 L(\theta) = p(y|x ; \theta) = \prod_{i = 1}^{m} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(y^i - \theta^T x^i)^2}{2 \sigma^2}} L(θ)=p(yx;θ)=i=1m2π σ1e2σ2(yiθTxi)2
   将似然函数转化成对数似然函数:
l ( θ ) = l n L ( θ ) = ∑ i = 1 m l n 1 2 π σ e − ( y i − θ T x i ) 2 2 σ 2 l(\theta) = ln{L(\theta)} = \sum_{i = 1}^{m} ln \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(y^i - \theta^T x^i)^2}{2 \sigma^2}} l(θ)=lnL(θ)=i=1mln2π σ1e2σ2(yiθTxi)2
   进一步化简:
l ( θ ) = m l n 1 2 π σ − ∑ i = 1 m ( y i − θ T x i ) 2 2 σ 2 l(\theta) = mln{\frac{1}{\sqrt{2\pi}\sigma}} - \sum_{i = 1}^{m} \frac{(y^i - \theta^T x^i)^2}{2 \sigma^2} l(θ)=mln2π σ1i=1m2σ2(yiθTxi)2
   为了使 l ( θ ) l(\theta) l(θ)最大,则 ∑ i = 1 m ( y i − θ T x i ) 2 2 σ 2 \sum_{i = 1}^{m} \frac{(y^i - \theta^T x^i)^2}{2 \sigma^2} i=1m2σ2(yiθTxi)2 要最小,由于 σ 2 ≥ 0 \sigma^2 \ge 0 σ20,所以只要 ∑ i = 1 m ( y i − θ T x i ) 2 2 \sum_{i = 1}^{m} \frac{(y^i - \theta^T x^i)^2}{2} i=1m2(yiθTxi)2 最小,也就回归了最开始的最小二乘法。


最小二乘法求解过程

   介绍了为什么可以用最小二乘法来求解最优参数解,下面我们就介绍一下最小二乘法求解过程,这里我们先重写一遍上文的最小二乘法:
J ( θ ) = 1 2 ∑ i = 1 n ( f ( x i ) − y i ) 2 J(\theta) = \frac{1}{2} \sum_{i = 1}^{n} {(f(x^i) - y^i)^2} J(θ)=21i=1n(f(xi)yi)2

   我们的任务是找到一个 θ \theta θ ,使得 J ( θ ) J(\theta) J(θ) 最小。可以很容易地发现 J ( θ ) J(\theta) J(θ) 式没有最大值,因为它可以无穷大,相反它在整个参数空间中有一个极小值(也恰恰是它的最小值)。联系一下多元函数求极值,即在极值点处各个偏导为0。

   接下来需要涉及到矩阵求导,这里需要几个公式,我先罗列出来:

  1. t r A B = t r B A t r 表 示 矩 阵 的 迹 trAB = trBA \qquad tr表示矩阵的迹 trAB=trBAtr
  2. t r A B C = t r C B A = t r A C B trABC = trCBA = trACB trABC=trCBA=trACB
  3. t r A = t r A T A ∈ R n × n trA = trA^T \qquad A \in R^{n\times n} trA=trATARn×n
  4. t r ( A + B ) = t r A + t r B tr(A + B) = trA + trB tr(A+B)=trA+trB
  5. t r a = a a ∈ R tra = a \qquad a \in R tra=aaR
  6. f ( A ) = t r A B , 则 ∇ A f ( A ) = B T ∇ 表 示 矩 阵 求 导 符 号 f(A) = trAB, 则\nabla_Af(A) = B^T \qquad \nabla表示矩阵求导符号 f(A)=trAB,Af(A)=BT
  7. ∇ A t r A B A T C = C A B + C T A B T \nabla_AtrABA^TC = CAB + C^TAB^T AtrABATC=CAB+CTABT

   关于这些公式的证明以及矩阵求导,最好去网上查阅一下相关的资料,加以理解。然后我们正式进入 J ( θ ) J(\theta) J(θ)的求导过程。
令 X T = { x 1 , x 2 , . . . , x m } , y T = { y 1 , y 2 , . . , y m } , y ∈ R m 令X^T = \{{x^1, x^2, ..., x^m}\},y^T = \{y^1, y^2, .., y^m\},y \in \Bbb R^m XT={x1,x2,...,xm},yT={y1,y2,..,ym}yRm

∇ θ J ( θ ) = ∇ θ 1 2 ( X θ − y ) T ( X θ − y ) = 1 2 ∇ θ t r ( θ T X T X θ − θ T X T y − y T X θ + y T y ) = 1 2 ∇ θ t r θ T X T X θ − 1 2 ∇ θ t r θ T X T y − 1 2 ∇ θ t r y T X θ \nabla_\theta J(\theta) = \nabla_\theta \frac{1}{2}(X\theta - y)^T(X\theta - y)\\ =\frac{1}{2}\nabla_\theta tr(\theta^TX^TX\theta - \theta^TX^Ty - y^TX\theta +y^Ty)\\ =\frac{1}{2}\nabla_\theta tr\theta^TX^TX\theta - \frac{1}{2}\nabla_\theta tr\theta^TX^Ty - \frac{1}{2} \nabla_\theta tr y^TX\theta θJ(θ)=θ21(Xθy)T(Xθy)=21θtr(θTXTXθθTXTyyTXθ+yTy)=21θtrθTXTXθ21θtrθTXTy21θtryTXθ
∇ θ t r θ T X T X θ = ∇ θ t r θ E θ T X T X = X T X θ E + X T X θ E T = 2 X T X θ \nabla_\theta tr\theta^TX^TX\theta = \nabla_\theta tr\theta E \theta^TX^TX \\ =X^TX\theta E + X^TX\theta E^T \\ = 2X^TX\theta θtrθTXTXθ=θtrθEθTXTX=XTXθE+XTXθET=2XTXθ
∇ θ t r θ T X T Y = ∇ θ t r ( θ T X T y ) T = ∇ θ t r y T X θ = ( y T X ) T = X T y \nabla_\theta tr\theta^TX^TY = \nabla_\theta tr(\theta^TX^Ty)^T \\ =\nabla_\theta tr y^TX\theta \\ =(y^TX)^T\\ =X^Ty θtrθTXTY=θtr(θTXTy)T=θtryTXθ=(yTX)T=XTy
∇ θ t r Y T X θ = ∇ θ t r θ y T X = ( y T X ) T = X T y \nabla_\theta trY^TX\theta =\nabla_\theta tr\theta y^TX\\ =(y^TX)^T\\ =X^Ty θtrYTXθ=θtrθyTX=(yTX)T=XTy
∇ θ J ( θ ) = X T X θ − X T y \nabla_\theta J(\theta) = X^TX\theta - X^Ty θJ(θ)=XTXθXTy

最后使 ∇ θ J ( θ ) = 0 \nabla_\theta J(\theta) = 0 θJ(θ)=0,则:
X T X θ = X T Y ⇒ θ = ( X T X ) − 1 X T y X^TX\theta = X^TY \Rightarrow \theta = (X^TX)^{-1}X^Ty XTXθ=XTYθ=(XTX)1XTy

你可能感兴趣的:(算法)