码迷,mamicode.com
首页 > 其他好文 > 详细

最小二乘法思想

时间:2020-04-01 19:12:47      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:http   理论   The   表达   无法   整理   假设   就是   大数   

最小二乘法主要用于函数拟合或函数极值,其思想主要是通过将理论值与预测值的距离的平方和达到最小。在机器学习,尤其是回归模型中,经常可以看到最小二乘法的身影。

最小二乘法的原理与要解决的问题

最小二乘法的形式如下式所示:

\[目标函数 = \sum(理论值 - 预测值)^2 \]

理论值是样本数据,预测值是拟合函数得到的预测值。目标函数就是机器学习中的损失函数。我们的目标就是得到使目标函数最小化时候的拟合函数的模型。
举个线性回归的例子,比如有m个只有一个特征的样本。

\[(x_{1},y_{1}),(x_{2},y_{2}),...(x_{m},y_{m}) \]

由于只有一个特征,假设采用的拟合函数为:

\[h_{\theta}(x) = \theta_0 + \theta_1x \]

这样就有了一个特征,对应的拟合函数的两个参数\(\theta_0 和\theta_1x\)需要求出
目标函数为:

\[J(\theta_0,\theta_1)= \sum_{i=0}^{m}(y_{i}-h_{\theta}x_{i})^2 \]

用最小二乘法做什么那?使\(J(\theta_0,\theta_1)\)最小,求出使\(J(\theta_0,\theta_1)\)最小时的\(\theta_0 和\theta_1\),那最小二乘法怎么才能使\(J(\theta_0,\theta_1)\)最小呢?

最小二乘法的代数法解法

要使\(J(\theta_0,\theta_1)\)最小,方法就是对\(\theta_0 和\theta_1\)分别来求偏导数,令偏导数为0,得到一个关于\(\theta_0 和\theta_1\)的二元方程组,求解这个方程组就可以得到\(\theta_0 和\theta_1\)的值。
\(J(\theta_0,\theta_1)\)\(\theta_0\)求导,得到如下方程:

\[\sum_{i=1}^m(y_{i}-\theta_0 - \theta_1x_{i}) = 0 \tag{1} \]

\(J(\theta_0,\theta_1)\)\(\theta_1\)求导,得到如下方程:

\[\sum_{i=1}^m(y_{i}-\theta_0 - \theta_1x_{i})x^{i} = 0 \tag{2} \]

对公式(1)展开有如下表达;

\[m\sum_{i=1}^m\frac{y_i}{m}-m\theta_0-m\theta_1\sum_{i=1}^m\frac{x_i}{m}=0 \]

\(\vec x=\sum_{i=1}^m\frac{x_i}{m},\vec y=\sum_{i=1}^m\frac{y_i}{m}\)
则公式(1)有如下表达:

\[m\vec y - m\theta_0 - m\theta_1\vec x=0 \]

\[=>\theta_0= \vec y - \theta_1\vec x \tag{3} \]

将公式(3)代入(2)中有:

\(\sum_{i=1}^my_ix_i-\theta_0\sum_{i=1}^mx_i-\theta_1\sum_{i=1}^mx_i^2=0\)
=>\(\sum_{i=1}^my_ix_i-(\vec y - \theta_1\vec x)\sum_{i=1}^mx_i-\theta_1\sum_{i=1}^mx_i^2=0\)
=>\(\theta_1=\frac{\sum_{i=1}^my_i x_i - \vec y\sum_{i=1}^mx_i}{\sum_{i=1}^mx_i^2-\vec x \sum_{i=1}^mx_i}\)
=>\(\theta_1=\frac{\sum_{i=1}^my_i x_i - \vec y\sum_{i=1}^mx_i - m\vec y\vec x +m\vec y\vec x}{\sum_{i=1}^mx_i^2-2\vec x \sum_{i=1}^mx_i+\vec x\sum_{i=1}^mx_i}\)
=>\(\theta_1=\frac{y_ix_i-\vec yx_i-y_i\vec x+\vec y\vec x}{\sum_{i=1}^m(x_i^2-2\vec xx_i+\vec x^2)}\)
=>\(\theta_1=\frac{(x_i-\vec x)(y_i-\vec y)}{\sum_{i=1}^m(x_i-\vec x)^2}\)

\(\theta_0 也可根据\theta_0= \vec y - \theta_1\vec x得到\)

最小二乘法的矩阵法解法

假设函数\(h_\theta(x_1,x_2,...,x_n)=\theta_0x_0+\theta_1x_1+...+\theta_{n-1}x_{n-1}\)的矩阵表达为:

\[h_\theta(x) = X\theta \]

其中,假设函数\(h_\theta(x)\)为m x 1的向量,\(\theta\)为n x 1的向量,里面有n个代数法的模型参数。X为m x n维的矩阵,m代表样本的个数,n代表样本特征数
损失函数定义为\(J(\theta)=\frac{1}{2}(X_\theta-Y)^T(X_\theta-Y)\)
其中Y是样本的输出向量,维度为m x 1,\(\frac{1}{2}\)主要是为求导后系数为1,方便计算
根据最小二乘法原理,对这个损失函数对\(\theta\)向量求导取0,结果如下所示:

\[\frac{\partial J(\theta)}{\partial\theta} =X^T(X_\theta-Y)=0 \]

这里用到了链式求导法则以及两个矩阵求导的公式

公式1:\(\frac{\partial}{\partial x}(X^TX) = 2X,X为向量\)
公式2:\(\nabla x f(AX+B)=A^T\nabla_Yf,Y=AX+B,f(Y)为标量\)

对上述求导等式整理可得:

\[X^TX_\theta = X^TY \]

两边同时左乘\((X^TX)^{-1}\)可得:

\[\theta = (X^TX)^{-1}X^TY \]

最小二乘法的局限性和使用场景

从上面可以看出,最小二乘法适用简洁高效,比梯度下降这样的迭代法似乎方便很多。但是这里我们就聊聊最小二乘法的局限性。

  • 第一、最小二乘法需要计算\(X^TX\)的逆矩阵,有时它的逆矩阵是不存在的,这样就不能直接只用最小二乘法了。此时以梯度下降法为代表的迭代法仍然可用。当然,我们也可以对样本数据进行整理,去除掉冗余特征,让\(X^TX\)的行列式不为0,然后继续使用
  • 第二、当样本特征n非常da的时候,计算\(X^TX\)的逆矩阵是一个非常耗时的工作(n x n的矩阵求逆),甚至不可行。此时以梯度下降法为代表的迭代法仍然可用。那这个n到底多大就不适合最小二乘法呢?如果你没有很多的分布式大数据计算资源,建议超过10000个特征就用迭代法吧,或者通过主成分分析降低特征的维度后再用最小二乘法
  • 第三、如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍可使用
  • 第四、特殊情况,当样本量m很少,小于特征数n的时候,这时拟合方程是欠定的,常用的优化方法都无法去拟合数据。当样本量m等于特征数n的时候,用方程组求解就可以了。当m大于n时,拟合方程是超定的,也就是我们常用与最小二乘法的场景了。

参考:https://www.cnblogs.com/pinard/p/5976811.html

最小二乘法思想

标签:http   理论   The   表达   无法   整理   假设   就是   大数   

原文地址:https://www.cnblogs.com/whiteBear/p/12614592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!