最小二乘法是用来做函数拟合或者求函数极值的方法。
- 最小二乘法的原理
目 标 函 数 = ∑ ( 观 测 值 − 理 论 值 ) 2 目标函数=\sum(观测值-理论值)^2 目标函数=∑(观测值−理论值)2观测值就是我们的多组样本,理论值就是我们的假设拟合函数,目标函数就是机器学习中的损失函数,我们的目标就是得到使目标函数最小时的拟合函数的模型。 - 代数法求解
对参数 θ i θ_i θi分别求偏导,令偏导数为0,求解方程组。 - 矩阵法求解
损失函数定义为 J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(θ)=\frac12(Xθ-Y)^T(Xθ-Y) J(θ)=21(Xθ−Y)T(Xθ−Y),其中Y是样本的输出向量。
对损失函数求偏导,偏导取0: α α θ J ( θ ) = X T ( X θ − Y ) = 0 \frac\alpha{\alphaθ}J(θ)=X^T(Xθ-Y)=0 αθαJ(θ)=XT(Xθ−Y)=0。
整理得: θ = ( X T X ) − 1 X T Y θ=(X^TX)^{-1}X^TY θ=(XTX)−1XTY
这样可以直接求出θ 的向量表达式,免去了代数法一个个求导的麻烦。 - 局限性与适用场景
1)最小二乘法需要计算 X T X X^TX XTX的逆矩阵,它的逆矩阵有可能不存在,这样就没办法直接使用最小二乘法了,此时梯度下降法仍然可以使用。当然,我们可以对样本数据进行整理,去掉冗余特征,让 X T X X^TX XTX行列式不等于0,继续使用最小二乘法。
2)当样本特征n非常大的时候,计算 X T X X^TX XTX的逆矩阵是一个非常耗时的工作(nxn矩阵求逆),甚至不可行。此时以梯度下降为代表的迭代法仍然可以使用。那这个n到底多大就不适合最小二乘法呢?如果你没有很多的分布式大数据计算资源,建议超过10000个特征就用迭代法吧。或者通过主成分分析降低特征的维度后再用最小二乘法。
3)如果拟合函数不是线性的,则无法使用最小二乘法,需要一些技巧转化为线性才可以使用。此时梯度下降法仍可以使用。
4)当样本容量m小于特征数量n时,拟合方程是欠定的,常用的优化方法都无法拟合数据;当m=n时,用方程组求解即可;当m>n时,拟合方程是超定的,常用最小二乘法。