数据蛙数据分析每周作业统计学统计算法

线性模型(线性回归、感知机和逻辑斯谛回归)

2018-12-30  本文已影响32人  怀柔小龙虾
线性模型.png

线性模型

根据周志华老师的定义来说,线性模型是指其通过属性的线性组合来进行预测的函数,即
f ( \boldsymbol { x } ) = w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 } + \ldots + w _ { d } x _ { d } + b
用一般向量形式,则写成
f ( x ) = w ^ { \mathrm { T } } x + b
其中,\omega = \left( \omega _ { 1 } ; \omega _ { 2 } ; \cdots ; \omega _ { d } \right),并且wb学到以后,模型也就确定了。因此,因此我们应该对线性模型有了一个初步的理解,那就是一定会用训练集去学习出一条线从而作为模型函数,而究竟这条线是用来拟合数据还是分类数据,那就要看模型是属性回归模型还是分类模型了

对于线性模型来说,它有很多种,比如回归模型中有线性回归,分类模型中有感知机、逻辑斯谛回归等,接下来我们主要展开讲解这三个模型


线性回归

线性回归是对给定的训练数据集进行线性拟合,从而找到一条能使得大多数样本点都尽可能被准确预测的拟合线,比如公式如下:
\mathrm { f } \left( x _ { i } \right) = \omega ^ { T } x _ { i } + b,使得f \left( x _ { i } \right) \approx y _ { i }

低维下的线性回归

当然,在高维的情况下肯定就不再是一条线了,比如在三维情况下这条线就将会是一个曲面,这里之所以称为线性回归,相信应该是诸多前辈们为了我们这些人能够直观地理解吧


高维下的线性回归

线性回归的学习策略

对于线性回归问题,我们最终的目的就是学习得到wb,建立起这个模型公式,而目前最首要的问题就是:如何确定wb是最优呢?

一般,对于线性回归问题,我们采用的是均方误差作为模型的性能度量,也就是我们会尽可能让均方误差最小化,而均方误差最小的时候,其参数w和b就是我们想要的最优参数了,即
\begin{aligned} \left( w ^ { * } , b ^ { * } \right) & = \underset { ( w , b ) } { \operatorname { argmin } } \sum _ { i = 1 } ^ { m } \left( f \left( x _ { i } \right) - y _ { i } \right) ^ { 2 } \\ & = \underset { ( w , b ) } { \operatorname { argmin } } \sum _ { i = 1 } ^ { m } \left( y _ { i } - w x _ { i } - b \right) ^ { 2 } \end{aligned}
说明:

  1. 均方误差的几何意义是对应的欧几里得距离;
  2. 基于均方误差最小化来进行模型求解的方法称为“最小二乘法”;
  3. 基于12,最小二乘法的几何意义也就是找到一条直线,使得所有样本到这条直线的欧氏距离之和最小
  4. 当然,也是可以用梯度下降法去做参数求解的,只是感知机部分会用到,这里就重复展开

我们现在知道,我们想要找到最好的拟合线需要用到最小二乘法求解代价函数最小时的wb,然而最小二乘法是如何找到最佳参数的呢?这里我们不需要深究,只需要了解最小二乘法的代数法的求解过程是通过代价函数\sum _ { i = 1 } ^ { m } \left( f \left( x _ { i } \right) - y _ { i } \right)对参数wb进行求偏导,并令每个偏导值为0,进而求解整个方程组;其他的求解方法自然还有,比如矩阵法求解,具体内容可以参考文章后面的博客(最小二乘法小结)

为更多地理解最小二乘法的求解方式,我们这里引入周志华老师的单变量线性回归求解(代数法)和多变量线性回归(矩阵法)求解

单变量线性回归

首先,我们令E _ { ( w , b ) } = \sum _ { i = 1 } ^ { m } \left( y _ { i } - w x _ { i } - b \right) ^ { 2 }
然后,分别对wb进行求偏导,得
\begin{aligned} \frac { \partial E _ { ( w , b ) } } { \partial w } & = 2 \left( w \sum _ { i = 1 } ^ { m } x _ { i } ^ { 2 } - \sum _ { i = 1 } ^ { m } \left( y _ { i } - b \right) x _ { i } \right) \\ \frac { \partial E _ { ( w , b ) } } { \partial b } & = 2 \left( m b - \sum _ { i = 1 } ^ { m } \left( y _ { i } - w x _ { i } \right) \right) \end{aligned}
接着,令偏导式为0,解得
\begin{array} { c } { w = \frac { \sum _ { i = 1 } ^ { m } y _ { i } \left( x _ { i } - \overline { x } \right) } { \sum _ { i = 1 } ^ { m } x _ { i } ^ { 2 } - \frac { 1 } { m } \left( \sum _ { i = 1 } ^ { m } x _ { i } \right) ^ { 2 } } } \\ { b = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( y _ { i } - w x _ { i } \right) } \end{array}
注:单变量线性回归和多变量线性回归的区别仅在于样本点的特征数是一个还是多个,所以在单变量的时候,w的参数只有一个,公式是f \left( x _ { i } \right) = \omega x _ { i } + b,在多变量的时候w的参数就有多个,公式是f \left( x _ { i } \right) = \omega ^ { T } x _ { i } + b

多变量线性回归

为方便起见,我们将wb吸收入向量形式\widehat { \omega } = ( \omega ; b );这里的样本有d个属性,把数据集D表示为一个m*(d+1) 大小的矩阵X,其中每行对应一个样本,该行的前d个元素对应着样本的前d个属性值,如下
\mathbf { X } = \left( \begin{array} { c c c c c } { x _ { 11 } } & { x _ { 12 } } & { \dots } & { x _ { 1 d } } & { 1 } \\ { x _ { 21 } } & { x _ { 22 } } & { \dots } & { x _ { 2 d } } & { 1 } \\ { \vdots } & { \vdots } & { \ddots } & { \vdots } & { \vdots } \\ { x _ { m 1 } } & { x _ { m 2 } } & { \dots } & { x _ { m d } } & { 1 } \end{array} \right) = \left( \begin{array} { c c } { x _ { 1 } ^ { \mathrm { T } } } & { 1 } \\ { x _ { 2 } ^ { \mathrm { T } } } & { 1 } \\ { \vdots } & { \vdots } \\ { x _ { m } ^ { \mathrm { T } } } & { 1 } \end{array} \right)
另外,把输出的标记也写成向量形式y = \left( y _ { 1 } ; y _ { 2 } ; \cdots ; y _ { m } \right),于是,我们得到目标式如下:
\hat { \boldsymbol { w } } ^ { * } = \underset { \boldsymbol { \hat { w } } } { \arg \min } ( \boldsymbol { y } - \mathbf { X } \hat { \boldsymbol { w } } ) ^ { \mathbf { T } } ( \boldsymbol { y } - \mathbf { X } \hat { \boldsymbol { w } } )

现在,我们先令E _ { \hat { \boldsymbol { w } } } = ( \boldsymbol { y } - \mathbf { X } \hat { \boldsymbol { w } } ) ^ { \mathrm { T } } ( \boldsymbol { y } - \mathbf { X } \hat { \boldsymbol { w } } )

接着用E _ { \hat { \boldsymbol { w } } }\hat { \boldsymbol { w } }求导,得到
\frac { \partial E _ { \hat { \boldsymbol { w } } } } { \partial \hat { \boldsymbol { w } } } = 2 \mathbf { X } ^ { \mathrm { T } } ( \mathbf { X } \hat { \boldsymbol { w } } - \boldsymbol { y } )

得到偏导式后,一般来说我们令其为0即可得到\hat { \boldsymbol { w } }的解;但是,由于计算过程涉及到了矩阵的求逆运算,所以我们必须分为两种情况进行讨论:


感知机学习算法(Percetron Learning Algorithm)

感知机是基于数据集线性可分的前提下的一种二分类线性模型,即把数据集中的所有实例用一个超平面进行分离,其超平面的一侧为正例(即+1),另一侧为负例(-1)。因此,这个模型就是相当于把整个特征空间进行二分化,然后对每一个测试样例进行分类进而得到测试样例的标签。比如,公式如下:
f ( x ) = \operatorname { sign } ( w \cdot x + b )
说明:

  1. 数据集线性可分是指:对于给定的一个数据集T = \left\{ \left( x _ { 1 } , y _ { 1 } \right) , \left( x _ { 2 } , y _ { 2 } \right) , \cdots , \left( x _ { N } , y _ { N } \right) \right\},其中x _ { i } \in \mathcal { X } = R ^ { n }y _ { i } \in y = \{ + 1 , - 1 \}\mathrm { i } = 1,2 , \cdots , \mathrm { N },如果存在一个超平面S可以使得正实例点和负实例点完全正确地划分到超平面的两侧,则称数据集T为线性可分数据集
  2. sign是符号函数,即
    \operatorname { sign } ( x ) = \left\{ \begin{array} { l l } { + 1 , } & { x \geqslant 0 } \\ { - 1 , } & { x < 0 } \end{array} \right.
  3. 感知机模型属于判别模型;
  4. 感知机的几何解释:
    • 线性方程wx+b对应于特征空间R^n中的一个超平面SS被称为分离超平面
    • w是超平面的法向量
    • b是超平面的截距
    • 图示如下:


      感知机

感知机的学习策略

因为感知机算法的本身就是要通过训练集去找到一个分离超平面,而想要找到这样的超平面就需要确定参数wb,和线性回归的问题一样,我们怎样才能确定参数wb呢?因此,大佬们制定了策略,即定义一个损失函数,我们的目标就是让损失函数极小化,从而在极小化的基础上找到参数wb,所以,我们现在分两步走,第一步是找到我们需要的损失函数,第二步就是我们如何让这个损失函数最小化

第一步:如何找到损失函数?

第二步:如何让损失函数最小化?

感知机学习算法的两种形式

接下来我们讲解的感知机学习算法一共有两种,即原始形式和对偶形式

原始形式的算法:

对偶形式的引入

原始形式写完,我们再来从几个问题中着手展开讲解感知机的对偶形式!

对偶形式的算法:

感知机的问题

根据我们先前的定义可以知道,感知机是基于数据集线性可分的前提下的可以寻找到一个超平面对数据进行分类的模型,如下图所示:


线性可分的情况

但是,我们可以想一下,如果数据不可分怎么办呢?

根据这个问题,我们首先来看如果发生线性不可分究竟是什么样的一种情况:

现在,我们知道这个问题引发的结果是什么了,我们就需要考虑另一个问题,怎么解决?


逻辑斯谛回归(Logistics Regression)

逻辑斯谛回归是一个二分类的模型,简称LR,它是在线性回归的基础上使用了sigmoid函数,将线性模型\omega ^ { T } x + b的结果压缩到了[0,1]之间,从而实现了将回归问题转化为了分类问题。

线性回归和逻辑斯谛回归

下面我们先借用吴恩达视频中的一个例子来讲解一下线性回归解决不了的分类问题

逻辑斯谛回归模型

鉴于上面的例子,我们可以发现,线性回归对于分类问题是具有很差的预测效果的,因此,我们在原先的线性回归的问题上引入sigmoid函数,也就是将原先的预测值\omega ^ { T } x + b作为自变量填充到了sigmoid函数在,如下图黑色曲线:

单位阶跃函数与对数几率函数
说明:
  1. 图源自周志华老师的《机器学习》,其中红色线部分是单位阶跃函数,公式是图上红色字体部分,黑色曲线是sigmoid函数,借用这个图的原因是想说明我们不选用单位阶跃函数的原因是因为其不连续,相对的sigmoid函数是极好的,连续可导的
  2. 我们刚才说LR模型是在线性回归的基础上加了sigmoid函数,也就是将原先的预测值\omega ^ { T } x + b作为自变量z填充到了sigmoid函数里,所以我们得到了如下公式
    y = \frac { 1 } { 1 + e ^ { - \left( \boldsymbol { w } ^ { \mathrm { T } } \boldsymbol { x } + b \right) } }

此时,我们需要引入一些新的概念:我们把一个事件的几率(odds)指代为该事件发生的概率与该事件不发生的概率比值;如果事件发生的概率是p,那么该事件的几率是\frac { p } { 1 - p },该事件的对数几率(log odds)是
\operatorname { logit } ( p ) = \log \frac { p } { 1 - p }

为了建立起上面两个式子的联系,我们将y视为样本x作为正例的可能性,也就是p1-y视为样本x作为反例的可能性,也就是1-p,所以我们可以通过y = \frac { 1 } { 1 + e ^ { - \left( \omega ^ { T } x + b \right) } }变化为如下形式:
\ln \frac { y } { 1 - y } = w ^ { \mathrm { T } } x + b
此时,为了方便,我们再把权值向量w和输入向量x进行扩充,即\widehat { \omega } = \left( \omega _ { 1 } ; \omega _ { 2 } ; \cdots ; \omega _ { n } ; b \right) ^ { T }X=\left( x _ { 1 } ; x _ { 2 } ; \cdots ; x _ { d } ; 1 \right) ^ { T },这时,上式又可以变化为如下形式
\log \frac { y } { 1 - y } = \widehat { w } \cdot X

接下来,我们y视为后验概率估计p ( y = 1 | x ),则得到
\log \frac { P ( y = 1 | x ) } { 1 - P ( y = 1 | x ) } = \widehat { w } \cdot X

由上式,再加上\mathrm { p } ( y = 1 | x ) + \mathrm { p } ( y = 0 | x ) = 1,我们终于可以得到逻辑斯谛回归模型的公式了,即:
\begin{aligned} P ( y = 1 | x ) & = \frac { e ^ { ( \hat { w } \cdot X ) } } { 1 + e ^ { ( \hat { w } \cdot X ) } } \\ P ( y = 0 | x ) & = \frac { 1 } { 1 + e ^ { ( \hat { w } \cdot X ) } } \end{aligned}

参数估计

对于逻辑斯谛回归模型,我们一般采用极大似然估计去对参数进行估计,接下来,我们开始进行极大似然估计对我们的参数进行估计

根据极大似然估计的常规步骤,我们需要写出似然函数,因此,我们先设
P ( Y = 1 | x ) = \pi ( x ) , \quad P ( Y = 0 | x ) = 1 - \pi ( x )

则,似然函数为
\prod _ { i = 1 } ^ { N } \left[ \pi \left( x _ { i } \right) \right] ^ { y _ { i } } \left[ 1 - \pi \left( x _ { i } \right) \right] ^ { 1 - y _ { i } }
进而,其对数似然函数为
\begin{aligned} L ( \widehat { w } ) & = \sum _ { i = 1 } ^ { N } \left[ y _ { i } \log \pi \left( x _ { i } \right) + \left( 1 - y _ { i } \right) \log \left( 1 - \pi \left( x _ { i } \right) \right) \right] \\ & = \sum _ { i = 1 } ^ { N } \left[ y _ { i } \log \frac { \pi \left( x _ { i } \right) } { 1 - \pi \left( x _ { i } \right) } + \log \left( 1 - \pi \left( x _ { i } \right) \right) \right] \\ & = \sum _ { i = 1 } ^ { N } \left[ y _ { i } \left( \widehat { w } \cdot x _ { i } \right) - \log \left( 1 + e ^ { \left( \widehat { w } \cdot x _ { i } \right) } \right] \right. \end{aligned}
最后,我们令L ( \widehat { w } )为0,求极大值,进而就可以得到\widehat { w }的估计值

说明:

  1. 可能我们对似然函数感觉很奇怪,但学过《概率论与数理统计》的同学应该都是了解的,而需要指出的是,这个似然函数就是我们的损失函数
  2. 当然,对于LR模型的参数估计并非只有极大似然估计一种方法,在吴恩达的视频中就是用梯度下降的方法去对似然函数进行参数估计的,但鉴于感知机部分里梯度下降已经讲了许多,我们这里不再过多展开。

我们假设极大似然估计得到的估计值是\widehat { \omega } ^ { * },则学习到的逻辑斯谛回归模型为
\begin{aligned}P ( y = 1 | x ) = \frac { \exp \left( \hat { w } ^ { * } \cdot x \right) } { 1 + \exp \left( \hat { w } ^ { * } \cdot x \right) }\\P ( y = 0 | x ) = \frac { 1 } { 1 + \exp \left( \hat { w } ^ { * } \cdot x \right) }\end{aligned}

逻辑斯谛回归这部分总体来说总结得还是太过简单,主要目前是在不想花太多精力在这个模型上面,毕竟时间和精力都是有限的,所以希望自己以后在第二个阶段模型实现的过程中能够为这些坑慢慢填上吧!

参考资料:
[1]:最小二乘法小结
[2]:机器学习中的矩阵求导的一点总结(三种方法求线性回归最佳参数)
[3]:感知机中损失函数1/||w||为什么可以不考虑(或直接忽略)?
[4]:梯度下降的三种形式BGD、SGD以及MBGD
[5]:随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
[6]:PLA算法(感知机)
[7]:《机器学习》周志华
[8]:《统计学习方法》李航
[9]:《机器学习》(视频)吴恩达

上一篇下一篇

猜你喜欢

热点阅读