日拱一卒之最小二乘法
由于最小二乘法在最近出现的频率比较高,所以单独拎出来研究研究,b站上有个几何的解读,虽然感觉弄得不错,但是还是觉得有点深了,而且有点快,各种公式的嵌套看的有点乱,于是乎,记录下自己的一些理解与看到的东西。
定义
- “二乘” :在古汉语和数学术语中,“二乘”就是平方的意思。
- “最小” :指的是我们要让某个数值达到最小。
一句话定义:
最小二乘法是一种数学优化技术,它通过最小化误差的平方和,来寻找数据的最佳函数匹配。
假设你在纸上画了很多个散点,现在你想画一条直线穿过它们,要求这条直线能最能代表这些点的趋势。你怎么确定哪条线是“最好”的?最小二乘法告诉你:那条让所有点到直线的垂直距离的平方加起来最小的线,就是最好的线。
假设有一组真实数据 y y y 和模型的预测数据 y ^ \hat{y} y^。我们希望它们越接近越好。(人工智能方向的理解)
定义“误差”: 我们定义每一个点的误差为 e i = y i − y ^ i e_i = y_i - \hat{y}_i ei=yi−y^i(真实值 - 预测值)。
如果直接求和 ∑ ( y i − y ^ i ) \sum (y_i - \hat{y}_i) ∑(yi−y^i),会出问题。因为误差有正有负(有的点在直线上方,有的在下方)。正负相抵后,总和可能为 0,但这并不代表直线完美穿过了所有点,可能只是误差刚好抵消了。
去符号: 为了消除符号影响,我们有两种选择:
- 取绝对值: ∣ y i − y ^ i ∣ |y_i - \hat{y}_i| ∣yi−y^i∣
- 取平方: ( y i − y ^ i ) 2 (y_i - \hat{y}_i)^2 (yi−y^i)2
为什么选择“平方”而不是“绝对值”? 这就是最小二乘法的核心智慧,主要有三个原因:
-
惩罚大误差(关键点) :
平方会对大的误差进行“严厉惩罚”。如果误差是 2,平方后是 4;如果误差是 10,平方后变成了 100。
这意味着,最小二乘法绝不容忍极端偏差。它会拼命把那条线往离得最远的那个点拉一拉,尽量照顾所有点,不让任何一个点掉队太远。
-
计算方便(求导) :
绝对值函数 ∣ x ∣ |x| ∣x∣ 在 x = 0 x=0 x=0 处有一个尖角,不可导,数学处理很麻烦。
-
平方函数 x 2 x^2 x2 是光滑的抛物线,处处可导。可以直接求导并令其为 0,一步就能算出答案(解析解)。
-
统计学背景(高斯分布) :
如果假设数据的噪声服从正态分布(高斯分布) ,那么“最小二乘法”求解出来的结果,等价于“极大似然估计”。这意味着它是统计学上最合理的估计。(这个后边再专门研究)
代数推导
第一步:定义损失函数
假设模型为 Y ≈ X θ Y \approx X\theta Y≈Xθ。我们要最小化误差向量 e = Y − X θ e = Y - X\theta e=Y−Xθ 的模长平方(即能量):
J ( θ ) = ∥ Y − X θ ∥ 2 J(\theta) = \| Y - X\theta \|^2 J(θ)=∥Y−Xθ∥2
写成矩阵乘法形式(实数域):
J ( θ ) = ( Y − X θ ) T ( Y − X θ ) J(\theta) = (Y - X\theta)^T (Y - X\theta) J(θ)=(Y−Xθ)T(Y−Xθ)
第二步:展开公式
利用矩阵转置规则 ( A − B ) T = A T − B T (A-B)^T = A^T - B^T (A−B)T=AT−BT 和 ( A B ) T = B T A T (AB)^T = B^T A^T (AB)T=BTAT:
J ( θ ) = ( Y T − θ T X T ) ( Y − X θ ) J(\theta) = (Y^T - \theta^T X^T)(Y - X\theta) J(θ)=(YT−θTXT)(Y−Xθ)
J ( θ ) = Y T Y − Y T X θ − θ T X T Y + θ T X T X θ J(\theta) = Y^T Y - Y^T X\theta - \theta^T X^T Y + \theta^T X^T X \theta J(θ)=YTY−YTXθ−θTXTY+θTXTXθ
关键技巧:中间两项是标量(实数)。
- Y T X θ Y^T X \theta YTXθ 是一个 1 × 1 1 \times 1 1×1 的数。
- θ T X T Y \theta^T X^T Y θTXTY 也是一个 1 × 1 1 \times 1 1×1 的数。
- 标量的转置等于它自己,所以这两项是相等的。
J ( θ ) = Y T Y − 2 θ T X T Y + θ T X T X θ J(\theta) = Y^T Y - 2\theta^T X^T Y + \theta^T X^T X \theta J(θ)=YTY−2θTXTY+θTXTXθ
第三步:求梯度(对 θ \theta θ 求导)
我们需要用到两个矩阵求导公式:
- ∂ ( θ T A ) ∂ θ = A \frac{\partial (\theta^T A)}{\partial \theta} = A ∂θ∂(θTA)=A (针对线性项)
- ∂ ( θ T A θ ) ∂ θ = 2 A θ \frac{\partial (\theta^T A \theta)}{\partial \theta} = 2A\theta ∂θ∂(θTAθ)=2Aθ (针对二次项,当 A A A 对称时)
对 J ( θ ) J(\theta) J(θ) 求导:
- Y T Y Y^T Y YTY 对 θ \theta θ 是常数 → 0 \to 0 →0。
- − 2 θ T X T Y -2\theta^T X^T Y −2θTXTY 对 θ \theta θ 求导 → − 2 X T Y \to -2 X^T Y →−2XTY。
- θ T ( X T X ) θ \theta^T (X^T X) \theta θT(XTX)θ 对 θ \theta θ 求导 → 2 ( X T X ) θ \to 2 (X^T X) \theta →2(XTX)θ。
∇ θ J ( θ ) = − 2 X T Y + 2 X T X θ \nabla_\theta J(\theta) = -2 X^T Y + 2 X^T X \theta ∇θJ(θ)=−2XTY+2XTXθ
第四步:令导数为 0(极值点)
为了找到最小值,令梯度为 0:
2 X T X θ − 2 X T Y = 0 2 X^T X \theta - 2 X^T Y = 0 2XTXθ−2XTY=0
X T X θ = X T Y X^T X \theta = X^T Y XTXθ=XTY
这就是著名的“正规方程” (Normal Equation)。
最后左乘逆矩阵 ( X T X ) − 1 (X^T X)^{-1} (XTX)−1:
θ = ( X T X ) − 1 X T Y \theta = (X^T X)^{-1} X^T Y θ=(XTX)−1XTY
几何推导:正交投影 (The Geometric Way)
核心思想
- 列空间:矩阵 X X X 的列向量张成了一个子空间(平面),记为 C o l ( X ) Col(X) Col(X)。
- 限制:无论 θ \theta θ 怎么取, X θ X\theta Xθ 只能在这个平面上移动。
- 目标:真实值 Y Y Y 通常不在这个平面上(因为有噪声)。我们要在这个平面上找一个点 Y ^ = X θ \hat{Y} = X\theta Y^=Xθ,离 Y Y Y 最近。
- 结论:几何学告诉我们,最近的点就是 Y Y Y 在平面上的正交投影。
推导过程
这意味着,误差向量 e = Y − X θ e = Y - X\theta e=Y−Xθ 必须垂直(正交) 于这个平面。
- 既然垂直于平面,那么 e e e 必须垂直于平面上的所有基向量(即 X X X 的每一列)。
- 用数学语言描述“垂直”就是内积为 0。
所以, X X X 的每一列与 e e e 的点积都为 0:
X T ⋅ e = 0 X^T \cdot e = 0 XT⋅e=0
代入 e = Y − X θ e = Y - X\theta e=Y−Xθ:
X T ( Y − X θ ) = 0 X^T (Y - X\theta) = 0 XT(Y−Xθ)=0
展开:
X T Y − X T X θ = 0 X^T Y - X^T X \theta = 0 XTY−XTXθ=0
X T X θ = X T Y X^T X \theta = X^T Y XTXθ=XTY
图片放的不合适,但是可以作为一个参考吧,具体的看原文。

可以参考https://blog.youkuaiyun.com/MoreAction_/article/details/106443383?ops_request_misc=%257B%2522request%255Fid%2522%253A%25227ef8c0683c2dd970ff9fb57930568291%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=7ef8c0683c2dd970ff9fb57930568291&biz_id=0&spm=1018.2226.3001.4187这篇文章。
以二维举例:
假设我们在一个 3维空间里。有两个基准向量 x 1 x_1 x1 和 x 2 x_2 x2。它们定义了一个平面。要寻找这两个向量的组合,去够那个飘在空中的点 Y Y Y。
具体的数值例子:
- x 1 x_1 x1 (红色箭头) :躺在 x 轴上 → [ 1 , 0 , 0 ] T \rightarrow [1, 0, 0]^T →[1,0,0]T
- x 2 x_2 x2 (蓝色箭头) :躺在 y 轴上 → [ 0 , 1 , 0 ] T \rightarrow [0, 1, 0]^T →[0,1,0]T
- Y Y Y (空中的星星) :悬浮在半空 → [ 1 , 2 , 3 ] T \rightarrow [1, 2, 3]^T →[1,2,3]T
显然, x 1 x_1 x1 和 x 2 x_2 x2 无论怎么组合( θ 1 x 1 + θ 2 x 2 \theta_1 x_1 + \theta_2 x_2 θ1x1+θ2x2),结果的第三个分量永远是 0。这意味着:永远无法用 x 1 x_1 x1 和 x 2 x_2 x2 完美组合出 Y Y Y(因为 Y Y Y 的高度是 3)。
目标是找到一组系数 θ 1 , θ 2 \theta_1, \theta_2 θ1,θ2,使得组合出来的向量 Y ^ \hat{Y} Y^(预测值)离 Y Y Y 最近。
直觉: Y Y Y 在地板上的垂直投影就是最近的点。
预测向量: Y ^ = θ 1 x 1 + θ 2 x 2 \hat{Y} = \theta_1 x_1 + \theta_2 x_2 Y^=θ1x1+θ2x2。
误差向量: e = Y − Y ^ e = Y - \hat{Y} e=Y−Y^。为了让距离最短,误差线 e e e 必须垂直于地板。
为什么是“点积为 0”? 如果误差线
e
e
e 垂直于整个地板,那么它必须垂直于地板上的每一根经纬线。
也就是:
- e e e 必须垂直于 x 1 x_1 x1。
- e e e 必须垂直于 x 2 x_2 x2。
数学翻译(垂直 = 点积为 0) :
{ x 1 T ⋅ e = 0 x 2 T ⋅ e = 0 \begin{cases} x_1^T \cdot e = 0 \\ x_2^T \cdot e = 0 \end{cases} {x1T⋅e=0x2T⋅e=0
把具体的数字代进去看看:预测值显然应该是影子的坐标
Y
^
=
[
1
,
2
,
0
]
T
\hat{Y} = [1, 2, 0]^T
Y^=[1,2,0]T。
那么误差向量就是
e
=
[
1
,
2
,
3
]
−
[
1
,
2
,
0
]
=
[
0
,
0
,
3
]
T
e = [1, 2, 3] - [1, 2, 0] = [0, 0, 3]^T
e=[1,2,3]−[1,2,0]=[0,0,3]T(一根竖直向上的线)。
验证垂直性:
- x 1 ⋅ e = [ 1 , 0 , 0 ] ⋅ [ 0 , 0 , 3 ] = 0 x_1 \cdot e = [1, 0, 0] \cdot [0, 0, 3] = 0 x1⋅e=[1,0,0]⋅[0,0,3]=0 (没毛病,垂直)
- x 2 ⋅ e = [ 0 , 1 , 0 ] ⋅ [ 0 , 0 , 3 ] = 0 x_2 \cdot e = [0, 1, 0] \cdot [0, 0, 3] = 0 x2⋅e=[0,1,0]⋅[0,0,3]=0 (没毛病,垂直)
矩阵化: X T X^T XT 的诞生
把 x 1 T x_1^T x1T 和 x 2 T x_2^T x2T 叠在一起,这不就是矩阵 X T X^T XT 吗?
[ x 1 T x 2 T ] ⏟ X T ⋅ e = [ 0 0 ] \underbrace{ \begin{bmatrix} x_1^T \\ x_2^T \end{bmatrix} }_{X^T} \cdot e = \begin{bmatrix} 0 \\ 0 \end{bmatrix} XT [x1Tx2T]⋅e=[00]
所以几何条件变成了: X T e = 0 X^T e = 0 XTe=0。
重点:这里的 X T X^T XT 作用就是—— “一次性检查误差向量 e e e 是否垂直于所有的基向量” 。
求解 θ \theta θ:
将 e = Y − X θ e = Y - X\theta e=Y−Xθ 代入:
X T ( Y − X θ ) = 0 X^T (Y - X\theta) = 0 XT(Y−Xθ)=0
展开:
- X T Y − X T X θ = 0 X^T Y - X^T X \theta = 0 XTY−XTXθ=0
- X T X θ = X T Y X^T X \theta = X^T Y XTXθ=XTY
代入数值计算验证一下:
-
构造 X X X:
X = [ 1 0 0 1 0 0 ] X = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 0 & 0 \end{bmatrix} X= 100010
-
计算 X T Y X^T Y XTY (投影分量) :
X T Y = [ 1 0 0 0 1 0 ] [ 1 2 3 ] = [ 1 2 ] X^T Y = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \end{bmatrix} XTY=[100100] 123 =[12]
-
计算 X T X X^T X XTX (坐标系校正) :
X T X = [ 1 0 0 0 1 0 ] [ 1 0 0 1 0 0 ] = [ 1 0 0 1 ] X^T X = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} XTX=[100100] 100010 =[1001]
-
解方程:
[ 1 0 0 1 ] θ = [ 1 2 ] \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \theta = \begin{bmatrix} 1 \\ 2 \end{bmatrix} [1001]θ=[12]
显然:
θ = [ 1 2 ] \theta = \begin{bmatrix} 1 \\ 2 \end{bmatrix} θ=[12]
结论:
我们算出
θ
1
=
1
,
θ
2
=
2
\theta_1 = 1, \theta_2 = 2
θ1=1,θ2=2。
预测值
Y
^
=
1
⋅
x
1
+
2
⋅
x
2
=
[
1
,
2
,
0
]
T
\hat{Y} = 1 \cdot x_1 + 2 \cdot x_2 = [1, 2, 0]^T
Y^=1⋅x1+2⋅x2=[1,2,0]T。
与最大似然估计的联系
简单来说:最小二乘法是最大似然估计在“误差服从正态分布”这个特定假设下的一种特殊情况。
一、 什么是最大似然估计 (MLE)?
Maximum Likelihood Estimation (MLE) 是一种统计方法,用来估计模型的参数。
1. 直观理解:侦探视角
假设你是一个侦探,来到了案发现场(这就是你拿到的数据)。你需要推断凶手是谁、作案手法是什么(这就是模型参数)。
-
概率(Probability) :已知参数,预测数据。
- 例子:已知硬币是均匀的(参数),扔10次,出现5正5反的概率是多少?
-
似然(Likelihood) :已知数据,推断参数。
- 例子:不知道硬币均不均匀,但我扔了10次,全是正面(数据)。请问,这枚硬币“动过手脚”的可能性有多大?
- MLE的逻辑:既然我抛出了10次全是正面,那么“这枚硬币两面都是正面”这个参数假设,虽然不一定对,但最能解释当前的数据。
MLE的核心思想:
找到一组参数
θ
\theta
θ,使得在这组参数下,出现当前数据的概率最大。
二、 最小二乘法与 MLE 的联系(数学推导)
为什么说最小二乘法是 MLE 的一种特例?我们通过线性回归来推导。
1. 设定假设
在线性回归中,假设真实值 y y y 和预测值 X w Xw Xw 之间有一个误差 ϵ \epsilon ϵ:
y = X w + ϵ y = Xw + \epsilon y=Xw+ϵ
关键步骤来了! 必须对这个误差 ϵ \epsilon ϵ 做一个假设。通常假设误差服从高斯分布(正态分布) ,且均值为0,方差为 σ 2 \sigma^2 σ2。
ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0, \sigma^2) ϵ∼N(0,σ2)
这意味着,给定 x x x 和 w w w,真实标签 y y y 也服从正态分布,其均值是 X w Xw Xw:
y ∼ N ( X w , σ 2 ) y \sim N(Xw, \sigma^2) y∼N(Xw,σ2)
2. 写出概率密度函数
根据正态分布公式,某一个样本点 y i y_i yi 出现的概率密度是:
P ( y i ∣ x i ; w ) = 1 2 π σ exp ( − ( y i − w T x i ) 2 2 σ 2 ) P(y_i | x_i; w) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left( - \frac{(y_i - w^T x_i)^2}{2\sigma^2} \right) P(yi∣xi;w)=2πσ1exp(−2σ2(yi−wTxi)2)
3. 写出似然函数 (Likelihood Function)
因为样本之间是独立的,所以所有样本同时出现的概率(似然函数 L ( w ) L(w) L(w))就是把每一个样本的概率乘起来:
L ( w ) = ∏ i = 1 n P ( y i ∣ x i ; w ) = ∏ i = 1 n 1 2 π σ exp ( − ( y i − w T x i ) 2 2 σ 2 ) L(w) = \prod_{i=1}^n P(y_i | x_i; w) = \prod_{i=1}^n \frac{1}{\sqrt{2\pi}\sigma} \exp\left( - \frac{(y_i - w^T x_i)^2}{2\sigma^2} \right) L(w)=i=1∏nP(yi∣xi;w)=i=1∏n2πσ1exp(−2σ2(yi−wTxi)2)
4. 最大化似然函数
要找到 w w w 让 L ( w ) L(w) L(w) 最大。连乘很难算,为了方便计算,取对数(Log-Likelihood)。因为对数函数是单调增的,最大化对数似然等价于最大化原函数。
ln L ( w ) = ∑ i = 1 n ln [ 1 2 π σ exp ( − ( y i − w T x i ) 2 2 σ 2 ) ] \ln L(w) = \sum_{i=1}^n \ln \left[ \frac{1}{\sqrt{2\pi}\sigma} \exp\left( - \frac{(y_i - w^T x_i)^2}{2\sigma^2} \right) \right] lnL(w)=i=1∑nln[2πσ1exp(−2σ2(yi−wTxi)2)]
利用对数性质 ln ( a b ) = ln a + ln b \ln(ab) = \ln a + \ln b ln(ab)=lna+lnb,展开:
ln L ( w ) = ∑ i = 1 n [ ln ( 1 2 π σ ) − ( y i − w T x i ) 2 2 σ 2 ] \ln L(w) = \sum_{i=1}^n \left[ \ln(\frac{1}{\sqrt{2\pi}\sigma}) - \frac{(y_i - w^T x_i)^2}{2\sigma^2} \right] lnL(w)=i=1∑n[ln(2πσ1)−2σ2(yi−wTxi)2]
5. 见证奇迹的时刻
要最大化这个 ln L ( w ) \ln L(w) lnL(w)。
-
第一项 ∑ ln ( 1 2 π σ ) \sum \ln(\frac{1}{\sqrt{2\pi}\sigma}) ∑ln(2πσ1) 是常数(和 w w w 无关),求导时直接为0,可以忽略。
-
剩下的就是要最大化:
$$
- \sum_{i=1}^n \frac{(y_i - w^T x_i)2}{2\sigma2}
$$
- \sum_{i=1}^n \frac{(y_i - w^T x_i)2}{2\sigma2}
最大化一个负数,等价于最小化那个正数(去掉负号) 。
同时,
1
2
σ
2
\frac{1}{2\sigma^2}
2σ21 也是常数系数,不影响求极值的位置。
所以,最大化似然函数,最终等价于:
最小化 ∑ i = 1 n ( y i − w T x i ) 2 \textbf{最小化} \sum_{i=1}^n (y_i - w^T x_i)^2 最小化i=1∑n(yi−wTxi)2
看!这不就是最小二乘法的公式吗?
1. 这种联系说明了什么?
- 最小二乘法(Least Squares) 是从几何角度(距离最小)或代数角度出发的。
- 最大似然估计(MLE) 是从概率统计角度出发的。
- 联系:如果你假设数据中的噪声是正态分布的,那么这两种方法求出来的解是完全一样的。
2. 如果噪声不是正态分布呢?
这就体现出 MLE 的普适性了。
- 如果误差服从拉普拉斯分布(Laplace Distribution,尖峰更厚),推导出的 MLE 等价于 最小化绝对值误差(L1 Loss) ,也就是 Lasso 回归的基础。
- 如果误差服从泊松分布(Poisson Distribution),推导出的就是广义线性模型中的泊松回归。
最小二乘法之所以好用,是因为在自然界中,大多数误差确实服从正态分布(中心极限定理)。它是最大似然估计在高斯噪声假设下的完美替身。
Tips:
- 残差=真实值-预测值
- 物理、数学在某些意义上的统一,确实牛皮
5005

被折叠的 条评论
为什么被折叠?



