该文已经收录到专题机器学习进阶之路当中,欢迎大家关注。

1. 概念

线性回归(Linear Regression)是一种通过属性的线性组合来进行预测的线性模型,其目的是找到一条直线或者一个平面或者更高维的超平面,使得预测值与真实值之间的误差最小化。

2. 特点

  1. 优点:结果具有很好的可解释性(w直观表达了各属性在预测中的重要性),计算熵不复杂。
  2. 缺点:对非线性数据拟合不好
  3. 适用数据类型:数值型和标称型数据

3. 原理与推导

1. 给定数据集D = \left\{ {\left( {​{x_i},{y_i}} \right)} \right\}_{i = 1}^m,其中x_i=\left( {​{x_{i1}},{x_{i2}}, \ldots ,{x_{id}}} \right){y_i} \in R(线性回归的输出空间是整个实数空间)。m是样本数,d是属性维度。

线性回归试图学得:

                                    f\left( {​{x_i}} \right) = {w^T}{x_i} + b             (1),使得f\left( {​{x_i}} \right) \simeq {y_i}

为便于讨论,使b = {w_0} \cdot x{}_0,其中{x_0} = 1。此时,w就成为了w = \left( {​{w_0},{w_1}, \ldots ,{w_d}} \right)x就成为了x_i=\left( {​{1},{x_{i1}}, \ldots ,{x_{id}}} \right),期望学得的函数为f\left( {​{x_i}} \right) = {w^T}{x_i}

2. 预测值和真实值之间都肯定存在差异\varepsilon,对于每个样本:

                                             {y_i} = {w^T}{x_i} + {\varepsilon _i}                  (2)

假设误差{\varepsilon _i}是独立同分布的,并且服从高斯分布。即:

                                             p\left( {​{\varepsilon _i}} \right) = \frac{1}{​{\sqrt {2\pi } \sigma }}\exp \left( { - \frac{​{​{\varepsilon _i}^2}}{​{2{\sigma ^2}}}} \right)            (3)

将(2)代入(3)中,得到在已知参数w和数据w_i的情况下,预测值为y_i的条件概率:

                                              p\left( {​{y_i}\left| {​{x_i};w} \right.} \right) = \frac{1}{​{\sqrt {2\pi } \sigma }}\exp \left( { - \frac{​{​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}}}{​{2{\sigma ^2}}}} \right)           (4)

3. 将(4)连乘得到在已知参数w和数据x的情况下,预测值为y的条件概率,这个条件概率在数值上等于,likelihood(w|x,y),也就是在已知现有数据的条件下,w是真正参数的概率,即似然函数(5):

                           L\left( w \right) {\rm{ = }}\prod\limits_{i = 1}^m {p\left( {​{y_i}\left| {​{x_i};w} \right.} \right)} = \prod\limits_{i = 1}^m {\frac{1}{​{\sqrt {2\pi } \sigma }}} \exp \left( { - \frac{​{​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}}}{​{2{\sigma ^2}}}} \right)          (5)

为什么要引入似然函数:为了根据样本估计参数值。

为什么要对似然函数进行log变换:由于乘法难解,通过对数可以将乘法转换为加法,简化计算。

对数似然函数:

                                    \begin{array}{l} \ell\left( w \right) = \log \prod\limits_{i = 1}^m {\frac{1}{​{\sqrt {2\pi } \sigma }}} \exp \left( { - \frac{​{​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}}}{​{2{\sigma ^2}}}} \right)\\ = \sum\limits_{i = 1}^m {\log \frac{1}{​{\sqrt {2\pi } \sigma }}} \exp \left( { - \frac{​{​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}}}{​{2{\sigma ^2}}}} \right)\\ = \sum\limits_{i = 1}^m {\log \frac{1}{​{\sqrt {2\pi } \sigma }}} + \sum\limits_{i = 1}^m {log\left( {\exp \left( { - \frac{​{​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}}}{​{2{\sigma ^2}}}} \right)} \right)} \\ = m\log \frac{1}{​{\sqrt {2\pi } \sigma }} - \sum\limits_{i = 1}^m {\frac{​{​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}}}{​{2{\sigma ^2}}}} \\ = m\log \frac{1}{​{\sqrt {2\pi } \sigma }} - \frac{1}{​{​{\sigma ^2}}}\frac{1}{2}\sum\limits_{i = 1}^m {​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}} \end{array}          (6)

得到目标函数:

                                    J(w) = \frac{1}{2}\sum\limits_{i = 1}^m {​{​{\left( {​{y_i} - {w^T}{x_i}} \right)}^2}} \\ = \frac { 1 } { 2 } \left\| \left[ \begin{array} { c } { y _ { 1 } - w ^ { T } x _ { 1 } } \\ { y _ { 2 } - w ^ { T } x _ { 2 } } \\ { \cdots } \\ { y _ { m } - w ^ { T } x _ { m } } \end{array} \right] \right\| ^ { 2 }= \frac { 1 } { 2 } \left\| \left[ \begin{array} { l } { y _ { 1 } } \\ { y _ { 2 } } \\ { \cdots } \\ { y _ { m } } \end{array} \right] - w ^ { T } \left[ \begin{array} { c } { x _ { 1 } } \\ { x _ { 2 } } \\ { \cdots } \\ { x _ { m } } \end{array} \right] \right\| ^ { 2 } \\ = \frac{1}{2}{\left\| {y - {w^T}X} \right\|^2} = \frac{1}{2}{\left( {y - {w^T}x} \right)^T}\left( {y - {w^T}x} \right)          (7)(最小二乘法)

为什么要让目标函数越小越好:似然函数表示样本成为真实的概率,似然函数越大越好,也就是目标函数J\left( w \right)越小越好。

4. 目标函数是凸函数,只要找到一阶导数为0的位置,就找到了最优解。

因此求偏导:

                                             \begin{array}{l} \frac{​{\partial J\left( w \right)}}{​{\partial w}} = \frac{1}{2}\frac{\partial }{​{\partial w}}\left( {​{​{\left( {y - {w^T}x} \right)}^T}\left( {y - {w^T}x} \right)} \right)\\ = \frac{1}{2}\frac{\partial }{​{\partial w}}\left( {​{​{\left( {y - Xw} \right)}^T}\left( {y - Xw} \right)} \right)\\ = \frac{1}{2}\frac{\partial }{​{\partial w}}\left( {​{w^T}{X^T}Xw - 2{w^T}Xy + {y^T}y} \right)\\ {\rm{ = }}\frac{1}{2}\left( {​{X^T}Xw{\rm{ + }}{X^T}Xw{\rm{ - }}2Xy} \right)\\ {\rm{ = }}{X^T}Xw{\rm{ - }}Xy \end{array}          (8)

5. 令偏导等于0:

                                             \frac{​{\partial J\left( w \right)}}{​{\partial w}} = {\rm{0}}          (9)

得到:

                                             {X^T}Xw = Xy         (10)

情况一:{X^T}X可逆,唯一解。令公式(10)为零可得最优解为:

                                             w^* = {\left( {​{X^T}X} \right)^{ - 1}}X^Ty         (11)

               学得的线性回归模型为:

                                             \mathop y\limits^ \wedge = {w^T}X = {X^T}w = {X^T}{\left( {​{X^T}X} \right)^{ - 1}}{X^T}y      (12)

情况二:{X^T}X不可逆,可能有多个解。选择哪一个解作为输出,将有学习算法的偏好决定,常见的做法是增加\lambda扰动。

                                             {w^*} = {\left( {​{X^T}X + \lambda I} \right)^{ - 1}}{X^T}y      (13)

4. 算法描述

1. 从数据集D出发,构建输入矩阵X和输出向量y。

                                             X = \left[ \begin{array} { c } { x _ { 1 } ^ { T } } \\ { x _ { 2 } ^ { T } } \\ { \cdots } \\ { x _ { m } ^ { T } } \end{array} \right] \quad y = \left[ \begin{array} { c } { y _ { 1 } } \\ { y _ { 2 } } \\ { \dots } \\ { y _ { m } } \end{array} \right]     

2. 计算伪逆(pseudo-inverse){X^ + }

3. 返回{w^*} = {X^ + }y,学得的线性回归模型为\mathop y\limits^ \wedge = {w^T}X

5. 广义线性回归

y不再只是线性回归中用到的正态分布,而是扩大为指数族中的任一分布。这样得到的模型称为“广义线性模型”(generalized linear model):

                                             y = {g^{ - 1}}\left( {​{w^T}x + b} \right)

其中函数g\left( \cdot \right)称为“联系函数”(link function)。

参考文献:

1. 《机器学习基石课程》lecture_9_Linear_Regression——林轩田

2. 《机器学习》第三章线性回归——周志华

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐