阅读本文需要的背景知识点:矩阵求导、一丢丢编程知识
一、引言
前面介绍了两种二元分类算法——感知器算法、口袋算法,这些算法解决的都是分类的问题,但是现实中更多的是例如预测某一地区的房价、银行该给某个人多少额度的信用卡、今天应该买卖多少股票等等这种最后得到一个具体数值结果的问题,这种类型的问题在机器学习中统一被称为回归问题。
回归分析在统计学中是研究多组变量间关系的方法,在机器学习中也是应用广泛,下面介绍其中一种算法模型 - 线性回归1(Linear Regression)
二、模型介绍
在介绍模型前,我们先来看一个例子,假设有某地统计了不同工作年限人群的收入情况(模拟数据),如下表所示:
| 工作年限 | 平均月工资 |
|---|---|
| 1年 | 1598元 |
| 2年 | 3898元 |
| 3年 | 6220元 |
| 4年 | 7799元 |
| 5年 | 10510元 |
由上面表格中的数据可以画出每隔一年当地的平均月收入的图像:

由上图可以直观的看到这些点好像都在一条直线上或在其附近,我们根据直觉可以判断出当地的平均月收入与工作年限似乎有一定的线性关系,我们只需要找到一条直线,那么我们就能预测出当地有 6 年工资年限的人的平均月收入了。寻找这样一条直线的过程就称为线性回归分析。

定义:给定一些随机样本点 { x 1 , y 1 } , { x 2 , y 2 } , . . . \{ x_1, y_1 \},\{ x_2, y_2 \},... {
x1,y1},{
x2,y2},...,找到一个超平面(单变量时为一条直线,两变量时为一个平面)去拟合这些样本点。线性方程如下:
(1)超平面函数方程一般形式
(2)同感知器算法一样,将 b 看作第零个 w,将超平面函数方程简写成两个向量 w 和 x 的点积的形式
y = b + w 1 x 1 + w 2 x 2 + ⋯ + w M x M = w T 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} y=b+w1x1+w2x2+⋯+wMxM=wTx


三、算法步骤
那么如何从一堆样本点中找到最佳的那个超平面呢?在上面工作年限与平均月工资的例子中,好像可以画很多直线去拟合这些点。

就像上面两条直线一样,哪条直线直观上拟合的更好呢?应该可以通过图中虚线看到,每个样本点与直线 B 的距离相对直线 A 来说要远,直线 A 明显是比直线 B 拟合的更好的,这说明可以通过样本点与直线的距离来判断拟合的好坏情况。
假设有 N 个样本点 { x , y } \{ x, y \} {
x,y},每个样本点的自变量有 M 个 { x 1 , x 2 , . . . } \{ x_1, x_2, ... \} {
x1,x2,...},则可以定义所有样本点与这个超平面的距离之和为拟合这些样本点的代价函数,其中 w 为 M 维列向量,x 也为M 维列向量,y 为实数:
Cost ( w ) = ∑ i = 1 N ∣ w T x i − y i ∣ \operatorname{Cost}(w)=\sum_{i=1}^{N}\left|w^{T} x_{i}-y_{i}\right| Cost(w)=i=1∑N∣∣wTxi−yi∣∣
由于函数中存在绝对值,将其改写成平方的形式,这在几何中被称为欧几里得距离2。
Cost ( w ) = ∑ i = 1 N ( w T x i − y i ) 2 \operatorname{Cost}(w)=\sum_{i=1}^{N}\left(w^{T} x_{i}-y_{i}\right)^{2} Cost(w)=i=1∑N(wTxi−yi)2
直观上我们只需要让代价函数的值最小,也就是所有样本点到超平面的欧几里得距离之和最小,其对应的 w 则为这个超平面的权重系数。
w = argmin w ( ∑ i = 1 N ( w T x i − y i ) 2 ) w=\underset{w}{\operatorname{argmin}}\left(\sum_{i=1}^{N}\left(w^{T} x_{i}-y_{i}\right)^{2}\right) w=wargmin(i=1∑N(wTxi−yi)2)
argmin3 函数表示当括号内的函数方程值最小时返回此时的变量
基于上面函数的最小化来进行求解的方法被称为最小二乘法,由于代价函数是一个凸函数4,根据凸函数的性质可知其局部最小值即全局最小值,可以直接求得 w 的最佳解析解,其中 X 为 N x M 矩阵,y 为 N 维列向量:
w = ( X T X ) − 1 X T y w=\left(X^{T} X\right)^{-1} X^{T} y w=(XTX)−1XTy
X = [ x 1 T x 2 T ⋮ x N T ] = [ X 11 X 12 ⋯ X 1 M X 21 X 22 ⋯ X 2 M ⋮ ⋮ ⋱ ⋮ X N 1 X N 2 ⋯ X N M ] y = ( y 1 y 2 ⋮ y N ) 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) X=⎣⎢⎢⎢⎡x1Tx2T⋮xNT⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡X11X21⋮XN1X12X22⋮XN2⋯⋯⋱⋯X1MX2M⋮XNM⎦⎥⎥⎥⎤y=⎝⎜⎜⎜⎛y1y2⋮yN⎠⎟⎟⎟⎞
四、原理证明
线性回归代价函数为凸函数
凸函数是一个定义在某个向量空间的凸子集 C 上的实值函数f,而且对于凸子集 C 中任意两个向量 x 1 x_1 x1, x 2 x_2 x2满足下式:
f ( x 1 + x 2 2 ) ≤ f ( x 1 ) + f ( x 2 ) 2 f\left(\frac{x_{1}+x_{2}}{2}\right) \leq \frac{f\left(x_{1}\right)+f\left(x_{2}\right)}{2} f(2x1+x2)≤2

本文详细介绍了线性回归模型的概念、算法步骤和数学原理,包括最小二乘法的证明过程,以及如何通过Python实现线性回归。线性回归是解决回归问题的基本方法,通过找到最佳超平面使所有样本点到该超平面的欧几里得距离之和最小。此外,文章还探讨了线性回归中的多重共线性问题,并提供了使用scikit-learn库实现线性回归的示例。
最低0.47元/天 解锁文章
2989





