经典机器学习系列(三)【线性模型与广义线性模型】


  这一节我们介绍线性模型,介绍思路如下:我们先介绍概念,什么叫做线性模型?在了解了基本的线性模型之后,我们将其应用于 一元线性回归,之后扩展到 多元线性回归。之后我们再将其扩展到 广义线性模型。最后通过广义线性模型迁移到 logit回归(分类问题)中。

线性模型基本概念

  线性模型(Linear Model)是在假设特征满足线性关系,给定一些数据,需要用这些数据训练一个模型,并用此模型进行预测。但这个模型是属性的线性组合,其函数形式为:

f ( x ) = w 1 x 2 + w 2 x 2 + ⋯ w n x n + b f(x) = w_{1}x_{2}+w_{2}x_{2} + \cdots w_{n}x_{n}+b f(x)=w1x2+w2x2+wnxn+b

  用向量表示的话,如下所示:

f ( x ) = w T x + b f(x) = w^{T}x+b f(x)=wTx+b

  其中的 w w w b b b是我们需要学习的参数。一旦 w w w b b b确定下来,那么这个模型也就确定下来了。

一元线性回归

  假定我们现在手头上有一些训练样本 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1) ( x 2 , y 2 ) (x_{2},y_{2}) (x2,y2) ⋯ \cdots ( x m , y m ) (x_{m},y_{m}) (xm,ym)。那么我们如何来找到一组参数 w w w b b b使得构建的线性模型能够很好地表示这组样本输入与输出之间的关系呢?

  在开始建模之前,我们需要思考一个问题,什么叫做很好地表示?我们需要将这个好坏量化一下。通常我们以范数作为量化的标准。在这里表示的就是,对于真实的输入 x 1 x_{1} x1,我的预测输出 y p r e y_{pre} ypre与真实输出 y 1 y_{1} y1之间的误差。在这里我们以均方差作为度量标准。

  因此这个问题就转变为了,我们需要找一组参数 w w w b b b,能够使得这些样本在当前模型下的均方误差最小,用数学形式表达如下所示:

( w ∗ , b ∗ ) = a r g m i n w , b ∑ i = 1 m ( y i − w x i − b ) (w^{*},b^{*})=argmin_{w,b} \sum_{i=1}^{m}(y_{i}-wx_{i}-b) (w,b)=argminw,bi=1m(yiwxib)

   w ∗ , b ∗ w^{*},b^{*} w,b表示 w w w b b b的解。

  基于均方差最小化来进行模型求解的方法称为最小二乘法(least square method)。在线性回归问题中,最小二乘法试图寻找到一条直线,使所有样本到直线的欧式距离之和最小。

  求解 w w w b b b使 E ( w , b ) = E_{(w,b)}= E(w,b)= ∑ i = 1 m ( y i − w x i − b ) 2 \sum_{i=1}^{m}(y_{i}-wx_{i}-b)^{2} i=1m(yiwxib)2最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation)。

  由于 E ( w , b ) E_{(w,b)} E(w,b)是关于 w w w b b b的凸函数,所以对其求偏导数,令其偏导数等于0,所求出来的解即为最优解。其偏导数求解如下所示:

∂ E ( w , b ) ∂ w = 2 ( w ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) \frac{\partial E_{(w,b)}}{\partial w} = 2(w\sum_{i=1}^{m}x_{i}^{2}-\sum_{i=1}^{m}(y_{i}-b)x_{i}) wE(w,b)=2(wi=1mxi2i=1m(yib)xi)

∂ E ( w , b ) ∂ b = 2 ( m b − ∑ i = 1 m ( y i − w x i ) ) \frac{\partial E_{(w,b)}}{\partial b} = 2(mb - \sum_{i=1}^{m}(y_{i}-wx_{i})) bE(w,b)=2(mbi=1m(yiwxi))

  再令其偏导数为0,可得到 w w w b b b最优解的闭式(closed-from)解

w = ∑ i = 1 m y i ( x i − x ‾ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 w=\frac{\sum_{i=1}^{m}y_{i}(x_{i}-\overline{x})}{\sum_{i=1}^{m}x_{i}^{2}-\frac{1}{m}(\sum_{i=1}^{m}x_{i})^{2}} w=i=1mxi2m1(i=1mxi)2i=1myi(xix)

  其中 x ‾ = 1 m ∑ i = 1 m x i \overline{x}=\frac{1}{m}\sum_{i=1}^{m}x_{i} x=m1i=1mxi x x x的均值。

b = 1 m ∑ i = 1 m ( y i − w x i ) b = \frac{1}{m}\sum_{i=1}^{m}(y_{i}-wx_{i}) b=m1i=1m(yiwxi)

  至此,求解完毕。

多元线性回归

  在一元回归问题中,样本只有一个属性。假设样本具有 n n n个属性,此时期望找到一组模型参数 w w w b b b,使得 f ( x i ) = w T x i + b f(x_{i})=w^{T}x_{i}+b f(xi)=wTxi+b,使得函数输出 f ( x i ) f(x_{i}) f(xi)与真实标签 y i y_{i} yi越接近越好。我们将这类问题称为多元线性回归问题(multivariate linear regression),或者叫做多变量线性回归问题。

  为了便于讨论,我们把 w w w b b b组合称为一个向量的形式 w ^ = ( w ; b ) \hat{w}=(w;b) w^=(w;b)。与之对应,样本集可表示为一个 m × ( d + 1 ) m \times (d+1) m×(d+1)大小的矩阵 X X X。那么每一行都对应一个样本。每一行的前 d d d个元素都表示为当前这个样本的 d d d个属性值。最后这个元素恒为1,是方便与参数 w ^ \hat{w} w^中的 b b b相乘,形成偏置项。样本输入的数学表达形式可表示为如下形式:

X = ( x 11 x 12 ⋯ x 1 d 1 x 21 x 22 ⋯ x 2 d 1 ⋮ ⋮ ⋱ ⋮ ⋮ x m 1 x m 2 ⋯ x m d 1 ) = ( x 1 T 1 x 2 T 1 ⋮ ⋮ x m T 1 ) X=\left(\begin{array}{cccc} {x_{11}} & {x_{12}} & {\cdots} & {x_{1d}} & {1}\\ {x_{21}} & {x_{22}} & {\cdots} & {x_{2d}} & {1}\\ {\vdots} & {\vdots} & {\ddots} & {\vdots} & {\vdots} \\ {x_{m1}} & {x_{m2}} & {\cdots} & {x_{md}}& {1} \end{array}\right)= \left(\begin{array}{cccc} {x_{1}^{T}} & {1} \\ {x_{2}^{T}} & {1} \\ {\vdots} & {\vdots} \\ {x_{m}^{T}} & {1} \end{array}\right) X=x11x21xm1x12x22xm2x1dx2dxmd111=x1Tx2TxmT111

  将标签以同样的方式写成向量的形式有 y = ( y 1 ; y 2 ; ⋯   ; y m ) y=(y_{1};y_{2};\cdots;y_{m}) y=(y1;y2;;ym),令均方误差最小化,求其最优解:

w ^ ∗ = a r g m i n w ^ ( y − X w ^ ) T ( y − X w ^ ) \hat{w}^{*}=argmin_{\hat{w}}(y-X\hat{w})^{T}(y-X\hat{w}) w^=argminw^(yXw^)T(yXw^)

  令 E w ^ = ( y − X w ^ ) T ( y − X w ^ ) E_{\hat{w}}=(y-X\hat{w})^{T}(y-X\hat{w}) Ew^=(yXw^)T(yXw^),对 w ^ \hat{w} w^求偏导得到如下方程:

∂ E w ^ ∂ w ^ = 2 X T ( X w ^ − y ) \frac{\partial E_{\hat{w}}}{\partial \hat{w}}=2X^{T}(X\hat{w}-y) w^Ew^=2XT(Xw^y)

X T X X^{T}X XTX可逆

  与一元回归类似,令上式等于0即可求解上述方程。通过观察不难发现,上式存在矩阵求逆的情况,对于 X T X X^{T}X XTX满秩矩阵(full-rank matrix)或正定矩阵(positive definite matrix)时,可求出:

w ^ ∗ = ( X T X ) − 1 X T y \hat{w}^{*}=(X^{T}X)^{-1}X^{T}y w^=(XTX)1XTy

  令 x i ^ = ( x i ; 1 ) \hat{x_{i}}=(x_{i};1) xi^=(xi;1),则最终的线性回归模型可表示为:

f ( x i ^ ) = x ^ i ( X T X ) − 1 X T y f(\hat{x_{i}})=\hat{x}_{i}(X^{T}X)^{-1}X^{T}y f(xi^)=x^i(XTX)1XTy

X T X X^{T}X XTX不可逆情况

  如果 X T X X^{T}X XTX不可逆,那么此时可解出多个 w ^ \hat{w} w^,他们都能使得均方误差最小化。选择哪一个解作为输出,将由算法的归纳偏好决定,常见的做法是引入正则化(regularization)项。

广义线性模型

  通常我们把线性回归模型简写为:

f ( x ) = w T x + b f(x)=w^{T}x+b f(x)=wTx+b

  那我们能否将模型预测值逼近真实标签 y y y的衍生物?例如将样本标签 y y y的对数模型作为线性模型逼近的目标,即:

l n y = w T x + b lny=w^{T}x+b lny=wTx+b

  这就是对数线性回归(log-linear regression),它实际上是在试图让 e w T x + b e^{w^{T}x+b} ewTx+b逼近 y y y。上式形式上是线性回归,但实际上已是在求输入空间到输出空间的非线性函数映射

  更一般的,考虑单调可微函数 g ( ⋅ ) g(·) g(),令:

y = g − 1 ( w T x + b ) y=g^{-1}(w^{T}x+b) y=g1(wTx+b)

  这样得到的模型称为广义线性模型(generalized linear model)。我们把函数 g ( ⋅ ) g(·) g()称为联系函数。广义线性模型的参数估计通常通过加权最小二乘法或极大似然法进行。

线性模型之logit回归

  如何用线性模型做分类?其实我们自需要找一个单调可微函数,将分类任务的真实标记 y y y与线性回归模型的预测值联系起来。就可以达到这一点。你也许会想到单位阶跃函数,将连续值变换为离散量。但是单位阶跃函数不连续,因此希望找到一个函数来替代它。对数几率函数(logistic function),是一种Sigmoid函数能做到这一点。其函数表达形式如下所示:

y = 1 1 − e − z y=\frac{1}{1-e^{-z}} y=1ez1

  对其两边取倒数,再取对数化简,得如下变换形式:

l n y 1 − y = w T x + b ln\frac{y}{1-y}=w^{T}x+b ln1yy=wTx+b

  如果将 y y y看作样本 x x x是正例的可能性,则 1 − y 1-y 1y表示的就是负例的可能性。两者的比值表示的就是为正例的相对可能性,再将其取对数得到对数几率(logit)

  上式用线性回归模型的预测结果去逼近真实标记的对数几率,因此,对应的模型称为对数几率回归。但实际上它是一种分类学习方法。在其他地方你可能会听到逻辑回归,但周志华教授觉得中文“逻辑”与“logistic”和logit的含义想去甚远,称其为“对数几率回归”简称“对率回归”。具有如下优点:

  1. 无需像贝叶斯那样假设数据分布,直接对分类可能性进行建模,避免假设不准带来的偏差。
  2. 得到的是一个概率,比单纯的正例或者反例所含的信息量要大。
  3. 对率回归求解的目标函数是任意阶可导的凸函数,具有很好的性质,现有的许多数值优化算法都可以直接用于求解。

  利用Logistic 回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的 “回归”一词源于佳拟合,表示要找到佳拟合参数集。

极大似然求解logit回归参数

  在这一小节,用最大似然法求解logit回归参数 w w w b b b。极大似然法可在公众号历史文章贝叶斯这节找到。

  将样本 x x x是正例的可能性 y y y看作类后验概率估计 p ( y = 1 ∣ x ) p(y=1|x) p(y=1x),则对数几率回归可表示为:

l n p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = w T x + b ln\frac{p(y=1|x)}{p(y=0|x)}=w^{T}x+b lnp(y=0x)p(y=1x)=wTx+b

  有:

p ( y = 1 ∣ x ) = e w T x + b 1 + e w T x + b p(y=1|x)=\frac{e^{w^{T}x+b}}{1+e^{w^{T}x+b}} p(y=1x)=1+ewTx+bewTx+b

p ( y = 0 ∣ x ) = 1 1 + e w T x + b p(y=0|x)=\frac{1}{1+e^{w^{T}x+b}} p(y=0x)=1+ewTx+b1

  给定数据集 { ( x i , y i ) } i = 1 m \{(x_{i},y_{i})\}_{i=1}^{m} {(xi,yi)}i=1m,对率回归模型最大化“对数似然”(log-likehood):

L ( w , b ) = ∑ i = 1 m l n p ( y i ∣ x i ; w , b ) L(w,b)=\sum_{i=1}^{m}lnp(y_{i}|x_{i};w,b) L(w,b)=i=1mlnp(yixi;w,b)

  令 β = ( w ; b ) \beta=(w;b) β=(w;b) x ^ = ( x ; 1 ) \hat{x}=(x;1) x^=(x;1),则可得到 w T x + b w^{T}x+b wTx+b的简写 β T x ^ \beta^{T}\hat{x} βTx^

  令 p 1 ( x ^ ; β ) p_{1}(\hat{x};\beta) p1(x^;β) = p ( y = 1 ∣ x ^ ; β ) =p(y=1|\hat{x};\beta) =p(y=1x^;β) p 0 ( x ^ ; β ) = p ( y = 0 ∣ x ^ ; β ) p_{0}(\hat{x};\beta)=p(y=0|\hat{x};\beta) p0(x^;β)=p(y=0x^;β)则似然项可写为:

p ( y i ∣ x i ; w , b ) = y i p 1 ( x ^ ; β ) + ( 1 − y i ) p 0 ( x ^ ; β ) p(y_{i}|x_{i};w,b)=y_{i}p_{1}(\hat{x};\beta)+(1-y_{i})p_{0}(\hat{x};\beta) p(yixi;w,b)=yip1(x^;β)+(1yi)p0(x^;β)

  最大化 L ( w , b ) L(w,b) L(w,b)等价于最小化:

L ( β ) = ∑ i = 1 m ( − y i β T x ^ i + l n ( 1 + e β T x ^ i ) ) L(\beta)=\sum_{i=1}^{m}(-y_{i}\beta^{T}\hat{x}_{i}+ln(1+e^{\beta^{T} \hat{x}_{i}})) L(β)=i=1m(yiβTx^i+ln(1+eβTx^i))

  上式是关于 β \beta β的高阶可导连续凸函数,可使用牛顿法(凸优化中的内容)对其求解。更加详细的推导可参考周志华的西瓜书对数几率回归。

Python中使用Logistic回归算法

  在Scikit-Learn机器学习库中,线性模型算法族都在linear_model类库下,当前版本一共有39个类,是Scikit-Learn机器学习库中最庞大的模型算法族类库之一。典型的有如下几个:

  1. LinearRegression

  对应线性回归算法,也称为普通最小二乘法(Ordinary Least Square, OLS),用于预测回归问题,其损失函数的数学表达式如下:

L ( x ) = min ⁡ w ∥ X w − y ∥ 2 2 L(x)=\min _{w}\|X w-y\|_{2}^{2} L(x)=wminXwy22

  LinearRegression会调用fit方法来拟合数组Xy,并且将线性模型的系数存储在其成员变量coef_中。

  1. Ridge

  对应Ridge回归算法,又称为岭回归,用于预测回归问题,是在线性回归的基础上添加了L2正则项,使得权重weight的分布更为平均,其损失函数的数学表达式如下:

L ( x ) = min ⁡ w ∥ X w − y ∥ 2 2 + a ∥ w ∥ 2 2 L(x)=\min _{w}\|X w-y\|_{2}^{2}+a\|w\|_{2}^{2} L(x)=wminXwy22+aw22

  其中a是一个常数,根据经验设置。

  1. Lasso

  对应Lasso回归算法。我们知道,常用的正则项有L1L2,用了L2正则项的线性回归是Ridge回归,用了L1正则项的线性回归是Lasso回归,同样是用于预测回归问题。其随时函数的数学表达式如下:

L ( x ) = min ⁡ w 1 2 n ∥ X w − y ∥ 2 2 + a ∥ w ∥ 1 L(x)=\min _{w} \frac{1}{2 n}\|X w-y\|_{2}^{2}+a\|w\|_{1} L(x)=wmin2n1Xwy22+aw1

  表达式的左侧与Ridge回归算法的损失函数基本一致,只是将右侧的L2正则表达式替换成了L1正则表达式。你可能关注到左侧式子相比线性回归,多了一个 1 2 n \frac{1}{2 n} 2n1,其中 n n n是样本数量,在优化过程的运算中不会发生变化,是一个常量,并不会对权重 w w w的调整产生影响。

# 导入线性模型中的Logistic回归算法
from sklearn.linear_model import LogisticRegression
# 导入鸢尾花分类数据集
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
# 训练模型
clf = LogisticRegression().fit(X, y)
print(clf.predict(X)) ## 使用模型进行分类预测
print(clf.score(X,y)) ## 使用模型自带性能评估器

参考

  • 周志华 《机器学习》
  • 机器学习算法的数学解析与Python实现

我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!

相关推荐
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页