彩笔运维勇闯机器学习--最小二乘法的数学推导

前言

今天我们来讨论一下回归算法当中的数学实现。本人数学也是渣,大学时期概率论一直挂到清考才勉强通过,+_+ !!,如今勇闯机器学习,硬着头皮重新学习了微积分和线代,也是为了记录自己最近的状态,避免过段时间忘记了。描述的时候有不周全的地方,请各位大佬们多担待了

本节将会运用一些数学知识来解释一下相关的回归算法的合理性,虽有些枯燥,但知其然也知其所以然,多了解一些总是好的

最小二乘法

最小二乘法的核心思想是找到一组参数,使得模型预测值与实际观测值之间的误差平方和最小。最小二乘法是回归模型中非常常用的计算回归系数的方法:

\\\text{f} = \\sum_{i=1}\^{n} (y_i - \\hat{y}_i)\^2 \\

其中\(y_i\)是真实值,\(\hat{y}_i\)是预测值

推导过程

先用最简单的一元线性回归,一元线性回归的数学模型为:

\\\hat{y_i}=β_0+β_1x_i \\

带入公式:

\\\text{f} = \\sum_{i=1}\^{n} (y_i - (β_0+β_1x_i))\^2 = \\sum_{i=1}\^{n} (y_i - β_0 - β_1x_i)\^2 \\

由于要讨论的是\(β_0\)和\(β_1\),这是一个多变量函数,为了研究单独变量,可以分别对其求偏导

\\\frac{\\partial f}{\\partial β_0} = (\\sum_{i=1}\^{n} (y_i - β_0 - β_1x_i)\^2)' \\

首先,有限个数的求和之后的导数=有限个数导数之后求和,把\((y_i - β_0 - β_1x_i)^2\)看成一个整体

\\\frac{\\partial f}{\\partial β_0} = \\sum_{i=1}\^{n} ((y_i - β_0 - β_1x_i)\^2)' \\

这是复合函数求导,那就来个剥洋葱法则,先对平方求导,再对加法求导

\\\frac{\\partial f}{\\partial β_0} = \\sum_{i=1}\^{n} 2(y_i - β_0 - β_1x_i)⋅(y_i - β_0 - β_1x_i)' \\

由于是对\(β_0\)求导,其余可认为是常数,求导为0

\\\frac{\\partial f}{\\partial β_0} = \\sum_{i=1}\^{n} 2(y_i - β_0 - β_1x_i) ⋅ -1 =-2\\sum_{i=1}\^{n} β_0(y_i - β_0 - β_1x_i) \\

导数是函数切线的斜率,要找到函数的最小值,就是其导数为0的地方

\\\frac{\\partial f}{\\partial β_0}=-2\\sum_{i=1}\^{n} (y_i - β_0 - β_1x_i)=0 \\

整理一下:

\\\sum_{i=1}\^{n} (y_i - β_0 - β_1x_i)=\\sum_{i=1}\^{n}y_i - \\sum_{i=1}\^{n}β_0 - \\sum_{i=1}\^{n}β_1x_i=0 \\

方程1: \\sum_{i=1}\^{n}y_i = nβ_0 + β_1⋅\\sum_{i=1}\^{n}x_i

同理对\(β_1\)求偏导

\\\frac{\\partial f}{\\partial β_1} = \\sum_{i=1}\^{n} 2(y_i - β_0 - β_1x_i) ⋅ -x_i =0 \\

整理一下:

\\\sum_{i=1}\^{n} 2(y_i - β_0 - β_1x_i) ⋅ -x_i=-2(\\sum_{i=1}\^{n} x_iy_i-\\sum_{i=1}\^{n}β_0x_i-\\sum_{i=1}\^{n}β_1x_i\^2)=0 \\

方程2:

\\\sum_{i=1}\^{n} x_iy_i = β_0⋅\\sum_{i=1}\^{n}x_i+β_1⋅\\sum_{i=1}\^{n}x_i\^2 \\

我们将样本数据\((x_i, y_i)\)求平均值,就是样本均值

\\\bar{x}=\\frac{1}{n}\\sum_{i=1}\^{n}x_i \\

\\\bar{y}=\\frac{1}{n}\\sum_{i=1}\^{n}y_i \\

带入方程1:

\\\bar{y} = β_0 + β_1\\bar{x} \\

将\(β_0\)带入方程2计算\(β_1\):

\\\sum_{i=1}\^{n} x_iy_i = (\\bar{y} - β_1\\bar{x})⋅\\sum_{i=1}\^{n}x_i+β_1⋅\\sum_{i=1}\^{n}x_i\^2 = n\\bar{x}\\bar{y}-nβ_1\\bar{x}\^2+β_1⋅\\sum_{i=1}\^{n}x_i\^2 \\

\\\sum_{i=1}\^{n} x_iy_i - n\\bar{x}\\bar{y} = β_1(-n\\bar{x}\^2+\\sum_{i=1}\^{n}x_i\^2) \\

\β_1=\\frac{\\sum_{i=1}\^{n} x_iy_i - n\\bar{x}\\bar{y}}{\\sum_{i=1}\^{n}x_i\^2-n\\bar{x}\^2} \\

经过漫长的推导:

\β_1=\\frac{\\sum_{i=1}\^{n} x_iy_i - n\\bar{x}\\bar{y}}{\\sum_{i=1}\^{n}x_i\^2-n\\bar{x}\^2} \\

\β_0 = \\bar{y} - β_1\\bar{x} \\

小结

通过最小二乘法,一步一步计算出截距与回归系数的公式,这其中用到的数学知识主要有:多元函数求偏导、导数的计算

多元回归下的最小二乘法

推导过程

多元线性回归的数学模型:

\y = β_0 + β_1x_1 + β_2x_2 + \\dots + β_nx_n \\

相比于一元回归的最小二乘法,多元回归可谓有一点复杂,因为特征数量的增加,带来的样本与特征的快速上升

比如有3个样本,2个特征,记为:\(y = β_0 + β_1x_1 + β_2x_2\)

\x\^{(1)} = \[1,2 \]

\x\^{(2)} = \[3,4 \]

\x\^{(3)} = \[5,6 \]

用矩阵表达:

\X=\\begin{bmatrix} 1 \& 2 \\\\ 3 \& 4 \\\\ 5 \& 6 \\end{bmatrix} \\

假设有m个特征,n个样本

\\\hat{y}_i = β_0 + β_1x_1\^{(1)} + β_2x_2\^{(1)} + \\dots + β_nx_n\^{(1)} \\

\\\hat{y}_i = β_0 + β_1x_1\^{(2)} + β_2x_2\^{(2)} + \\dots + β_nx_n\^{(2)} \\

\... \\

\\\hat{y}_i = β_0 + β_1x_1\^{(m)} + β_2x_2\^{(m)} + \\dots + β_nx_n\^{(m)} \\

\X=\\begin{bmatrix} 1 \& x_1\^{(1)} \& x_2\^{(1)} \& \\dots \& x_n\^{(1)} \\\\ 1 \& x_1\^{(2)} \& x_2\^{(2)} \& \\dots \& x_n\^{(2)} \\\\ ... \\\\ 1 \& x_1\^{(m)} \& x_2\^{(m)} \& \\dots \& x_n\^{(m)} \\\\ \\end{bmatrix} \\

\β=\\begin{bmatrix} β_0 \\\\ β_1 \\\\ ... \\\\ β_n \\\\ \\end{bmatrix} \\

所以通过矩阵的点积,可以将公式改写为,在m个特征,n个样本下:

\\\hat{y}_i=Xβ \\

带入最小二乘法公式:

\\\text{f} = \\sum_{i=1}\^{n} (y_i - \\hat{y}_i)\^2 = \\sum_{i=1}\^{n} (y_i - Xβ)\^2 = \\\| {y_i} - Xβ \\\|_2 = (y_i - Xβ)\^T(y_i - Xβ) \\

展开矩阵:

\(y_i - Xβ)\^T(y_i - Xβ) = y_i\^Ty_i-y_i\^TXβ-X\^Tβ\^Ty_i+X\^Tβ\^TXβ \\

由于 \(y_i^TXβ\) 的转置矩阵就是 \(X^Tβ^Ty_i\) :

\= y_i\^Ty_i-2X\^Tβ\^Ty_i+X\^Tβ\^TXβ \\

为了找到β最小值,先求导然后令导数为0

\\\frac{\\partial f}{\\partial β} = (y_i\^Ty_i-2X\^Tβ\^Ty_i+X\^Tβ\^TXβ)' = -2X\^Ty_i+2X\^TXβ = 0 \\

=>

\X\^Ty_i=X\^TXβ \\

两边同时乘以\(X^TX\)逆矩阵,换句话说,\(X^TX\)是可逆矩阵:

\β=(X\^TX)\^{-1}X\^Ty_i \\

小结

这其中用到的数学知识主要有:导数、矩阵等方面的知识

用MathJax语法写公式真的太费劲了!还不如在纸上手写

联系我

  • 联系我,做深入的交流

至此,本文结束

在下才疏学浅,有撒汤漏水的,请各位不吝赐教...