关于机器学习:机器学习算法系列三-标准线性回归算法Standard-Linear-Regression-Algorithm

2次阅读

共计 7412 个字符,预计需要花费 19 分钟才能阅读完成。

浏览本文须要的背景知识点:矩阵求导、一丢丢编程常识

一、引言

  后面介绍了两种二元分类算法——感知器算法、口袋算法,这些算法解决的都是分类的问题,然而事实中更多的是例如预测某一地区的房价、银行该给某个人多少额度的信用卡、明天应该交易多少股票等等这种最初失去一个具体数值后果的问题,这种类型的问题在机器学习中对立被称为回归问题。

  回归剖析在统计学中是钻研多组变量间关系的办法,在机器学习中也是利用宽泛,上面介绍其中一种算法模型 – 线性回归 1(Linear Regression)

二、模型介绍

  在介绍模型前,咱们先来看一个例子,假如有某地统计了不同工作年限人群的支出状况(模仿数据),如下表所示:

工作年限 均匀月工资
1 年 1598 元
2 年 3898 元
3 年 6220 元
4 年 7799 元
5 年 10510 元

  由下面表格中的数据能够画出每隔一年当地的均匀月支出的图像:

  由上图能够直观的看到这些点如同都在一条直线上或在其左近,咱们依据直觉能够判断出当地的均匀月支出与工作年限仿佛有肯定的线性关系,咱们只须要找到一条直线,那么咱们就能预测出当地有 6 年工资年限的人的均匀月支出了。寻找这样一条直线的过程就称为线性回归剖析。

  定义:给定一些随机样本点 {x1, y1},{x2, y2},…,找到一个超平面(单变量时为一条直线,两变量时为一个立体)去拟合这些样本点。线性方程如下:

(1)超平面函数方程个别模式

(2)同感知器算法一样,将 b 看作第零个 w,将超平面函数方程简写成两个向量 w 和 x 的点积的模式

$$
\begin{array}{rcc}
y & =b+w_{1} x_{1}+w_{2} x_{2}+\cdots+w_{M} x_{M} \\
& =\quad w^{T} x
\end{array}
$$



单变量为直线、两变量为立体、多变量为超平面

三、算法步骤

  那么如何从一堆样本点中找到最佳的那个超平面呢?在下面工作年限与均匀月工资的例子中,如同能够画很多直线去拟合这些点。

  就像下面两条直线一样,哪条直线直观上拟合的更好呢?应该能够通过图中虚线看到,每个样本点与直线 B 的间隔绝对直线 A 来说要远,直线 A 显著是比直线 B 拟合的更好的,这阐明能够通过样本点与直线的间隔来判断拟合的好坏状况。

  假如有 N 个样本点 {x, y},每个样本点的自变量有 M 个 {x1, x2, …},则能够定义所有样本点与这个超平面的间隔之和为拟合这些样本点的代价函数,其中 w 为 M 维列向量,x 也为 M 维列向量,y 为实数:

$$
\operatorname{Cost}(w)=\sum_{i=1}^{N}\left|w^{T} x_{i}-y_{i}\right|
$$

  因为函数中存在绝对值,将其改写成平方的模式,这在几何中被称为欧几里得间隔 2

$$
\operatorname{Cost}(w)=\sum_{i=1}^{N}\left(w^{T} x_{i}-y_{i}\right)^{2}
$$

  直观上咱们只须要让代价函数的值最小,也就是所有样本点到超平面的欧几里得间隔之和最小,其对应的 w 则为这个超平面的权重系数。

$$
w=\underset{w}{\operatorname{argmin}}\left(\sum_{i=1}^{N}\left(w^{T} x_{i}-y_{i}\right)^{2}\right)
$$

<center>argmin3 函数示意当括号内的函数方程值最小时返回此时的变量 </center>

  基于下面函数的最小化来进行求解的办法被称为最小二乘法,因为代价函数是一个凸函数 4,依据凸函数的性质可知其部分最小值即全局最小值,能够间接求得 w 的最佳解析解,其中 X 为 N x M 矩阵,y 为 N 维列向量:

$$
w=\left(X^{T} X\right)^{-1} X^{T} y
$$

$$
X=\left[\begin{array}{c}
x_{1}^{T} \\
x_{2}^{T} \\
\vdots \\
x_{N}^{T}
\end{array}\right]=\left[\begin{array}{cccc}
X_{11} & X_{12} & \cdots & X_{1 M} \\
X_{21} & X_{22} & \cdots & X_{2 M} \\
\vdots & \vdots & \ddots & \vdots \\
X_{N 1} & X_{N 2} & \cdots & X_{N M}
\end{array}\right]
\quad
y=\left(\begin{array}{c}
y_{1} \\
y_{2} \\
\vdots \\
y_{N}
\end{array}\right)
$$

四、原理证实

线性回归代价函数为凸函数

  凸函数是一个定义在某个向量空间的凸子集 C 上的实值函数 f,而且对于凸子集 C 中任意两个向量 x1,x2 满足下式:

$$
f\left(\frac{x_{1}+x_{2}}{2}\right) \leq \frac{f\left(x_{1}\right)+f\left(x_{2}\right)}{2}
$$

  不等式右边:

$$
\operatorname{Cost}\left(\frac{w_{1}+w_{2}}{2}\right)=\sum_{i=1}^{N}\left[\left(\frac{w_{1}+w_{2}}{2}\right)^{T} x_{i}-y_{i}\right]^{2}
$$

  不等式左边:

$$
\frac{\operatorname{Cost}\left(w_{1}\right)+\operatorname{Cost}\left(w_{2}\right)}{2}=\frac{\sum_{i=1}^{N}\left(w_{1}^{T} x_{i}-y_{i}\right)^{2}+\sum_{i=1}^{N}\left(w_{2}^{T} x_{i}-y_{i}\right)^{2}}{2}
$$

(1)不等式右边乘以 2

(2)将 2 移入连加运算内,括号写出三项

(3)将平方开展成 6 项

$$
\begin{aligned}
2 \operatorname{Cost}\left(\frac{w_{1}+w_{2}}{2}\right) &=2 \sum_{i=1}^{N}\left[\left(\frac{w_{1}+w_{2}}{2}\right)^{T} x_{i}-y_{i}\right]^{2} & (1) \\
&=\sum_{i=1}^{N} 2\left(\frac{w_{1}^{T} x_{i}}{2}+\frac{w_{2}^{T} x_{i}}{2}-y_{i}\right)^{2} & (2) \\
&=\sum_{i=1}^{N}\left(\frac{w_{1}^{T} x_{i} x_{i}^{T} w_{1}}{2}+\frac{w_{2}^{T} x_{i} x_{i}^{T} w_{2}}{2}+w_{1}^{T} x_{i} w_{2}^{T} x_{i}-2 w_{1}^{T} x_{i} y_{i}-2 w_{2}^{T} x_{i} y_{i}+2 y_{i}^{2}\right) & (3)
\end{aligned}
$$

(1)不等式左边也乘以 2

(2)两项连加运算的和写成两项和的连加运算

(3)将中括号内的平方项开展

(4)移项至与下面保持一致

$$
\begin{aligned}
\operatorname{Cost}\left(w_{1}\right)+\operatorname{Cost}\left(w_{2}\right) &=\sum_{i=1}^{N}\left(w_{1}^{T} x_{i}-y_{i}\right)^{2}+\sum_{i=1}^{N}\left(w_{2}^{T} x_{i}-y_{i}\right)^{2} & (1) \\
&=\sum_{i=1}^{N}\left[\left(w_{1}^{T} x_{i}-y_{i}\right)^{2}+\left(w_{2}^{T} x_{i}-y_{i}\right)^{2}\right] & (2)\\
&=\sum_{i=1}^{N}\left(w_{1}^{T} x_{i} x_{i}^{T} w_{1}-2 w_{1}^{T} x_{i} y_{i}^{2}+y_{i}^{2}+w_{2}^{T} x_{i} x_{i}^{T} w_{2}-2 w_{2}^{T} x_{i} y_{i}+y_{i}^{2}\right) & (3)\\
&=\sum_{i=1}^{N}\left(w_{1}^{T} x_{i} x_{i}^{T} w_{1}+w_{2}^{T} x_{i} x_{i}^{T} w_{2}-2 w_{1}^{T} x_{i} y_{i}-2 w_{2}^{T} x_{i} y_{i}+2 y_{i}^{2}\right) & (4)
\end{aligned}
$$

  将不等式左边的项减去不等式右边的项,将失去的差值记为 Δ,当初只须要证实这两项的差值大于等于零。

(1)察看两项的后果,最初 3 项是一样的,相减后在化简

(2)将二分之一提出来

(3)察看括号外面会发现为一个平形式

$$
\begin{aligned}
\Delta &=\sum_{i=1}^{N}\left(\frac{w_{1}^{T} x_{i} x_{i}^{T} w_{1}}{2}+\frac{w_{2}^{T} x_{i} x_{i}^{T} w_{2}}{2}-w_{1}^{T} x_{i} w_{2}^{T} x_{i}\right) & (1) \\
&=\frac{1}{2} \sum_{i=1}^{N}\left(w_{1}^{T} x_{i} x_{i}^{T} w_{1}+w_{2}^{T} x_{i} x_{i}^{T} w_{2}-2 w_{1}^{T} x_{i} w_{2}^{T} x_{i}\right) & (2) \\
&=\frac{1}{2} \sum_{i=1}^{N}\left(w_{1}^{T} x_{i}-w_{2}^{T} x_{i}\right)^{2} & (3)
\end{aligned}
$$

  不等式左边减去不等式右边的差值为平形式的连加运算,在实数范畴内其最初的后果必然是大于等于零,证毕。

线性回归代价函数的解析解

(1)线性回归的代价函数

(2)能够将其改写成两个 N 维向量的点积的模式

(3)应用 A 示意第一个 N 维行向量,则代价函数其实是 A 向量乘以 A 向量的转置

$$
\begin{aligned}
\operatorname{Cost}(w) &=\sum_{i=1}^{N}\left(w^{T} x_{i}-y_{i}\right)^{2} & (1)\\
&=\left(w^{T} x_{1}-y_{1} \ldots w^{T} x_{N}-y_{N}\right)\left(\begin{array}{c}
w^{T} x_{1}-y_{1} \\
\cdots \\
w^{T} x_{N}-y_{N}
\end{array}\right) & (2)\\
&=\quad A A^{T} & (3)
\end{aligned}
$$

(1)向量 A 的定义

(2)向量 A 能够写成两个 N 维行向量相减

(3)第一个行向量能够将 w 的转置提出来,写成一个 M 维向量和一个 M x N 矩阵相乘(留神 x 本来就是 M 维列向量,N 个列向量 x 就组成了 M x N 矩阵)

(4)定义一个 N x M 矩阵 X,N 行对应 N 个样本数,M 列对应 M 个变量,定义一个 N 维列向量 y,N 维对应 N 个样本数。能够看到后面一堆列向量 x 的组合就是矩阵 X 的转置,前面一堆实数 y 的组合就是列向量 y 的转置

$$
\begin{aligned}
A &=\left(w^{T} x_{1}-y_{1} \ldots w^{T} x_{N}-y_{N}\right) & (1)\\
&=\left(w^{T} x_{1} \ldots w^{T} x_{N}\right)-\left(y_{1} \ldots y_{N}\right) & (2) \\
&=w^{T}\left(x_{1} \ldots x_{N}\right)-\left(y_{1} \ldots y_{N}\right) & (3) \\
&=\quad w^{T} X^{T}-y^{T} & (4)
\end{aligned}
$$

(1)代价函数写成两个向量的点积的模式

(2)将下面的简化后的 A 带入到代价函数中

(3)依据转置的性质 5,能够将前面的转置改写

(4)将乘法开展

(5)察看两头两项发现他们互为转置,又因为这两项最初的后果都是实数,所以这两个项的后果必然是相等的,所以能够合并这两项

$$
\begin{aligned}
\operatorname{Cost}(w) &=A A^{T} & (1)\\
&= \left(w^{T} X^{T}-y^{T}\right)\left(w^{T} X^{T}-y^{T}\right)^{T} & (2) \\
&= \left(w^{T} X^{T}-y^{T}\right)(X w-y) & (3) \\
&= w^{T} X^{T} X w-w^{T} X^{T} y-y^{T} X w+y^{T} y & (4) \\
&= w^{T} X^{T} X w-2 w^{T} X^{T} y+y^{T} y & (5)
\end{aligned}
$$

(1)代价函数对 w 求偏导数,依据向量求导公式,只有第一项和第二项与 w 无关,最初一项为常数,又因为代价函数是个凸函数,当对 W 的偏导数为 0 向量时,代价函数为最小值。

(2)将第二项移项后同时除以 2,再两边同时在后面乘以一个逆矩阵,等式右边的矩阵和逆矩阵乘后为单位矩阵,所以只剩下 w 向量。

$$
\begin{aligned}
\frac{\partial \operatorname{Cost}(w)}{\partial w} &=2 X^{T} X w-2 X^{T} y=0 & (1)\\
w &=\left(X^{T} X\right)^{-1} X^{T} y & (2)
\end{aligned}
$$

  这样就求出了 w 的解析解,能够看到其中需要求一个矩阵的逆矩阵,当括号内 N x N 矩阵不是满秩矩阵 )6 时没有逆矩阵,其本质是自变量 x 之间存在多重共线性 7(Multicollinearity),下一节将介绍线性回归中的多重共线性与如何解决这种多重共线性的问题。下式中 y 向量后面的局部被称为矩阵 X 的伪逆矩阵,能够通过奇怪值合成 8(SVD)求得矩阵的伪逆矩阵。

$$
w=\underbrace{\left(X^{T} X\right)^{-1} X^{T}}_{X^{+}} y
$$

  能够看到 X 为 N x M 矩阵,y 为 N 维列向量。在下面工作年限与均匀月工资的例子中,X 为 一个 5 x 2 的矩阵,y 为一个 5 维列向量,最初能够算得 w 为 一个 2 维列向量,则这个例子的线性方程为 y = 2172.5 * x – 512.5。

$$
X = \begin{bmatrix}
1 & 1\\
1 & 2\\
1 & 3\\
1 & 4\\
1 & 5
\end{bmatrix}
\quad
y = \begin{pmatrix}
1598\\
3898\\
6220\\
7799\\
10510
\end{pmatrix}
$$

$$
w=\left(X^{T} X\right)^{-1} X^{T} y=\left(\begin{array}{c}
-512.5 \\
2172.5
\end{array}\right)
$$

线性回归代价函数解析解的几何解释

  线性方程的矩阵模式,其中 y 为 N 维列向量,X 为 N x M 矩阵,w 为 M 维列向量:

$$
y = Xw
$$

  先来看下图,由 M 个彩色 N 维列向量 X 组成了灰色超平面 S,红色 N 维列向量 y 为理论样本点的 y 值,在工作年限与均匀月工资的例子中 x1 = (1, 1, 1, 1, 1)、x2 = (1, 2, 3, 4, 5)、y = (1598, 3898, 6220, 7799, 10510)。当初要找由向量 x 通过线性组合后的 y’,使得 y – y’ 最小,也就是图中紫色的向量。由图中能够看出,当 y – y’ 是超平面的法向量时最短,也等价于 y – y’ 与每一个向量 x 垂直。


<center> 几何解释 </center>

(1)y – y’ 与每一个向量 x 垂直,留神后果为 M 维零向量

(2)替换 y’ 的线性方程

(3)开展括号

(4)移项后可解得 w

$$
\begin{array}{l}
X^{T}\left(y-y^{\prime}\right)=0 & (1) \\
X^{T}(y-X w)=0 & (2)\\
X^{T} y-X^{T} X w=0 & (3) \\
w=\left(X^{T} X\right)^{-1} X^{T} y & (4)
\end{array}
$$

  能够看到几何解释与通过求导的形式的后果是统一的

五、代码实现

应用 Python 实现线性回归算法:

def linear(X, y):
    """
    线性回归
    args:
        X - 训练数据集
        y - 指标标签值
    return:
        w - 权重系数
    """
   # pinv 函数间接求矩阵的伪逆矩阵
   return np.linalg.pinv(X).dot(y)

六、第三方库实现

scikit-learn9 实现:

from sklearn.linear_model import LinearRegression

# 初始化线性回归器
lin = LinearRegression(fit_intercept=False)
# 拟合线性模型
lin.fit(X, y)
# 权重系数
w = lin.coef_

七、动画演示

  当线性方程取不同权重系数时,其对应的代价函数的变动,能够看到代价函数是先减小到一个最小值后而后逐步增大。

八、思维导图

九、参考文献

  1. https://en.wikipedia.org/wiki…
  2. https://en.wikipedia.org/wiki…
  3. https://en.wikipedia.org/wiki…
  4. https://en.wikipedia.org/wiki…
  5. https://en.wikipedia.org/wiki…
  6. https://en.wikipedia.org/wiki…(linear_algebra)
  7. https://en.wikipedia.org/wiki…
  8. https://en.wikipedia.org/wiki…
  9. https://scikit-learn.org/stab…

残缺演示请点击这里

注:本文力求精确并通俗易懂,但因为笔者也是初学者,程度无限,如文中存在谬误或脱漏之处,恳请读者通过留言的形式批评指正

本文首发于——AI 导图 ,欢送关注

正文完
 0