【周志华机器学习】三、线性模型

文章目录

  • 参考资料
  • 1. 线性回归
    • 1.1 概述
      • 应用举例
    • 1.2 分析
    • 1.3 对数线性回归
    • 1.4 过拟合、欠拟合如何解决
      • L2正则化(岭回归)
      • L1正则化(Lasso回归)
      • ElasticNet回归
    • 1.5 线性回归要求因变量服从正态分布?
  • 2. 对数几率回归(logistic 回归)
    • 2.1 概述
    • 2.2 优点
    • 2.3 求解
    • 2.4 用到的优化方法
      • 1. 一阶方法
      • 2. 二阶方法:牛顿法、拟牛顿法
  • 3 线性判别分析(LDA)
  • 4. 多分类学习
  • 5. 类别不平衡问题
  • 6. 关于logistic回归的后记
    • 6.1 logistic回归为什么要对特征进行离散化
    • 6.2 逻辑回归的目标函数中增大L1正则化会是什么结果。
  • 7. 回归应用步骤

参考资料

  1. Machine-learning-learning-notes
  2. LeeML-Notes
  3. ML-NLP

本博客为作者根据周志华的西瓜书和参考资料1、2、3所做的笔记,主要用于学习,非技术类博客,因此存在大量复制粘贴,请见谅。

线性回归和逻辑回归代码实现示例见github仓库

1. 线性回归

1.1 概述

线性
两个变量之间的关系是一次函数关系的——图象是直线,叫做线性。

非线性
两个变量之间的关系不是一次函数关系的——图象不是直线,叫做非线性。

回归
人们在测量事物的时候因为客观条件所限,求得的都是测量值,而不是事物真实的值,为了能够得到真实值,无限次的进行测量,最后通过这些测量数据计算回归到真实值,这就是回归的由来。

线性回归问题就是试图学到一个线性模型尽可能准确地预测新样本的输出值。解决的就是通过已知的数据得到未知的结果。例如:对房价的预测、判断信用评价、电影票房预估等。

应用举例

  • 股市预测(Stock market forecast)

    • 输入:过去10年股票的变动、新闻咨询、公司并购咨询等
    • 输出:预测股市明天的平均值
  • 自动驾驶(Self-driving Car)

    • 输入:无人车上的各个sensor的数据,例如路况、测出的车距等
    • 输出:方向盘的角度
  • 商品推荐(Recommendation)

    • 输入:商品A的特性,商品B的特性
    • 输出:购买商品B的可能性

1.2 分析

有时输入的属性值并不能直接被我们的学习模型所用,需要进行相应的处理。

对于连续值的属性,一般都可以被学习器所用,有时会根据具体的情形作相应的预处理,例如:归一化等;

对于离散值的属性,可作下面的处理:

  • 若属性值之间存在“序关系”,则可以将其转化为连续值,例如:身高属性分为“高”“中等”“矮”,可转化为数值:{1, 0.5, 0}。

  • 若属性值之间不存在“序关系”,则通常将其转化为向量的形式,例如:性别属性分为“男”“女”,可转化为二维向量:{(1,0),(0,1)}。

当输入属性只有一个的时候

当输入属性只有一个的时候,就是最简单的情形,也就是我们高中时最熟悉的“最小二乘法”(Euclidean distance),首先计算出每个样本预测值与真实值之间的误差并求和,通过最小化均方误差MSE,使用求偏导等于零的方法计算出拟合直线 y = w x + b y=wx+b y=wx+b的两个参数w和b,计算过程如下图所示:

【周志华机器学习】三、线性模型_第1张图片

当输入属性有多个的时候

当输入属性有多个的时候,例如对于一个样本有d个属性 ( x 1 , x 2... x d ) , y {(x1,x2...xd),y} x1,x2...xd,y,则 y = w x + b y=wx+b y=wx+b需要写成:
0.png

在这里插入图片描述

通常对于多元问题,常常使用矩阵的形式来表示数据。在本问题中,将具有m个样本的数据集表示成矩阵 X X X,将系数 w w w b b b合并成一个列向量,这样每个样本的预测值以及所有样本的均方误差最小化就可以写成下面的形式:
【周志华机器学习】三、线性模型_第2张图片

【周志华机器学习】三、线性模型_第3张图片

再把标记也写成向量形式 y = ( y 1 ; y 2 ; ⋯   ; y m ) y= (y_1; y_2; \cdots; y_m) y=(y1;y2;;ym),则有
5.png

同样地,我们使用最小二乘法对 ω ^ \hat{\omega} ω^进行估计,令均方误差的求导等于0,需要注意的是,当一个矩阵的行列式不等于0时,我们才可能对其求逆,因此对于下式,我们需要考虑矩阵( X T X X^TX XTX)的行列式是否为0,若不为0,则可以求出其解,若为0,即不满秩,此时可解出多个 ω ^ \hat{\omega} ω^最优解,他们都能使均方误差最小化,选择哪一个解作为输出,将有学习算法的归纳偏好决定,常见的做法是引入正则化项

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.3 对数线性回归

有时像上面这种原始的线性回归可能并不能满足需求,例如:y值并不是线性变化,而是在指数尺度上变化。这时我们可以采用线性模型来逼近y的衍生物,例如 ln ⁡ y \ln y lny,这时衍生的线性模型如下所示,实际上就是相当于将指数曲线投影在一条直线上,如下图所示:

【周志华机器学习】三、线性模型_第4张图片

更一般地,考虑单调可微函数 g ( . ) g(.) g(.) g ( . ) g(.) g(.)连续且充分光滑, 令
在这里插入图片描述

这样得到的模型称为“广义线性模型”(generalized linear model),其中函数 g ( . ) g(.) g(.)称为“联系函数” (link function).显然,对数线性回归是广义线性模型在 g ( . ) = ln ⁡ ( . ) g(.)=\ln (.) g(.)=ln(.) 时的特例。

1.4 过拟合、欠拟合如何解决

使用正则化项,也就是给loss function加上一个参数项,正则化项有L1正则化L2正则化ElasticNet。加入这个正则化项好处:

  1. 控制参数幅度,不让模型“无法无天”。
  2. 限制参数搜索空间
  3. 解决欠拟合与过拟合的问题。

L2正则化(岭回归)

在这里插入图片描述 J 0 J_0 J0表示上面的loss function,在loss function的基础上加入w参数的平方和乘以 λ \lambda λ
假设:
在这里插入图片描述回忆以前学过的单位圆的方程:

在这里插入图片描述
和L2正则化项一样,此时我们的任务变成在L约束下求出J取最小值的解。求解 J 0 J_0 J0的过程可以画出等值线。同时L2正则化的函数L也可以在w1、w2的二维平面上画出来。如下图:
【周志华机器学习】三、线性模型_第5张图片L表示为图中的黑色圆形,随着梯度下降法的不断逼近,与圆第一次产生交点,而这个交点很难出现在坐标轴上。这就说明了L2正则化不容易得到稀疏矩阵,同时为了求出损失函数的最小值,使得w1和w2无限接近于0,达到防止过拟合的问题。

什么场景下用L2正则化
只要数据线性相关,用LinearRegression拟合的不是很好,需要正则化,可以考虑使用岭回归(L2), ruguo输入特征的维度很高,而且是稀疏线性关系的话, 岭回归就不太合适,考虑使用L1正则化(Lasso回归)。

L1正则化(Lasso回归)

L1正则化与L2正则化的区别在于惩罚项的不同:
在这里插入图片描述
什么场景下使用L1正则化
L1正则化(Lasso回归)可以使得一些特征的系数变小,甚至还使一些绝对值较小的系数直接变为0,从而增强模型的泛化能力 。对于高的特征数据,尤其是线性关系是稀疏的,就采用L1正则化(Lasso回归),或者是要在一堆特征里面找出主要的特征,那么L1正则化(Lasso回归)更是首选了。

ElasticNet回归

ElasticNet综合了L1正则化项和L2正则化项,以下是它的公式:

在这里插入图片描述
ElasticNet回归的使用场景
ElasticNet在我们发现用Lasso回归太过(太多特征被稀疏为0),而岭回归也正则化的不够(回归系数衰减太慢)的时候,可以考虑使用ElasticNet回归来综合,得到比较好的结果。

1.5 线性回归要求因变量服从正态分布?

我们假设线性回归的噪声服从均值为0的正态分布。 当噪声符合正态分布 N ( 0 , δ 2 ) N(0,\delta^2) N(0,δ2)时,因变量则符合正态分布 N ( w x i + b , δ 2 ) N(wx_i+b,\delta^2) N(wxi+b,δ2),其中预测函数 y = w x i + b y=wx_i+b y=wxi+b。这个结论可以由正态分布的概率密度函数得到。也就是说当噪声符合正态分布时,其因变量必然也符合正态分布。

在用线性回归模型拟合数据之前,首先要求数据应符合或近似符合正态分布,否则得到的拟合函数不正确。

2. 对数几率回归(logistic 回归)

2.1 概述

回归就是通过输入的属性值得到一个预测值,利用上述广义线性模型的特征,是否可以通过一个联系函数,将预测值转化为离散值从而进行分类呢?线性几率回归正是研究这样的问题。

对数几率引入了一个对数几率函数(logistic function),将预测值投影到0-1之间,从而将线性回归问题转化为二分类问题。

考虑二分类任务,其输出标记 y ∈ 0 , 1 y\in {0,1} y0,1,而线性回归模型产生的预测值 z = w T x + b z= w^Tx +b z=wTx+b是实值,于是,我们需将实值 z z z转换为 0 / 1 0/1 0/1值,最理想的是“单位阶跃函数” (unit-step function)

在这里插入图片描述
即若预测值 z z z大于零就判为正例,小于零则判为反例,预测值为临界值零则可任意判别,如图3.2所示.
【周志华机器学习】三、线性模型_第6张图片
但从图3.2可看出,单位阶跃函数不连续,因此不能直接用作 g ( . ) g(.) g(.)。于是我们希望找到能在一定程度上近似单位阶跃函数的“替代函数”(surrogate function),并希望它单调可微。**对数几率函数(logistic function)**正是这样一个常用的替代函数:

在这里插入图片描述
从图3.2可看出,对数几率函数(简称:对率函数)是一种“Sigmoid函数”,它将 z z z值转化为一个接近0或1的y值,并且其输出值在z=0附近变化很陡,将对数几率函数作为 g ( . ) g(.) g(.)代入式(3.15),得到
在这里插入图片描述
在这里插入图片描述
若将 y y y视为样本 z z z作为正例的可能性,则 1 − y 1-y 1y是其反例可能性,两者的比值
在这里插入图片描述
称为“几率”(odds),反映了 x x x作为正例的相对可能性,对几率取对数则得到“对数几率” (log odds,亦称 logit)
在这里插入图片描述
由此可看出,式(3.18)实际上是在用线性回归模型的预测结果去逼近真实标记的对数几率,因此,其对应的模型称为“对数几率回归”(logistic regression,亦称 logit regression).特别需注意到,虽然它的名字是“回归”,但实际却是一种分类学习方法

2.2 优点

这种方法有很多优点,例如它是直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题;

  • 能以概率的形式输出结果,而非只是0,1判定。

  • 训练快,feature engineering之后效果赞。

  • 因为结果是概率,可以做ranking model

  • 它不是仅预测出“类别”,而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用;

  • 此外,对率函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解。

2.3 求解

下面使用极大似然估计的方法来计算出 w w w b b b两个参数的取值,下面只列出求解的思路,不列出具体的计算过程(具体过程可看西瓜书和配套的南瓜书)。

【周志华机器学习】三、线性模型_第7张图片
通过“极大似然法” (maximum likelihood method)来估计 w w w b b b。给定数据集 ( x i , y i ) i = 1 m {(x_i, y_i)}_{i=1}^m (xi,yi)i=1m,对率回归模型最大化“对数似然”(log-likelihood)
在这里插入图片描述
即令每个样本属于其真实标记的概率越大越好.

2.4 用到的优化方法

参考博客

1. 一阶方法

梯度下降、随机梯度下降、mini 随机梯度下降降法。随机梯度下降不但速度上比原始梯度下降要快,局部最优化问题时可以一定程度上抑制局部最优解的发生。

2. 二阶方法:牛顿法、拟牛顿法

牛顿法
牛顿法其实就是通过切线与x轴的交点不断更新切线的位置,直到达到曲线与x轴的交点得到方程解。在实际应用中我们因为常常要求解凸优化问题,也就是要求解函数一阶导数为0的位置,而牛顿法恰好可以给这种问题提供解决方法。

实际应用中牛顿法首先选择一个点作为起始点,并进行一次二阶泰勒展开得到导数为0的点进行一个更新,直到达到要求,这时牛顿法也就成了二阶求解问题,比一阶方法更快。我们常常看到的x通常为一个多维向量,这也就引出了Hessian矩阵的概念(就是x的二阶导数矩阵)。

缺点:牛顿法是定长迭代,没有步长因子,所以不能保证函数值稳定的下降,严重时甚至会失败。还有就是牛顿法要求函数一定是二阶可导的。而且计算Hessian矩阵的逆复杂度很大。

拟牛顿法
不用二阶偏导而是构造出Hessian矩阵的近似正定对称矩阵的方法称为拟牛顿法。拟牛顿法的思路就是用一个特别的表达形式来模拟Hessian矩阵或者是他的逆使得表达式满足拟牛顿条件。主要有DFP法(逼近Hession的逆)、BFGS(直接逼近Hession矩阵)、 L-BFGS(可以减少BFGS所需的存储空间)。

3 线性判别分析(LDA)

线性判别分析(Linear Discriminant Analysis,简称LDA),其基本思想是:将训练样本投影到一条直线上,使得同类的样例尽可能近,不同类的样例尽可能远。如图所示:
【周志华机器学习】三、线性模型_第8张图片【周志华机器学习】三、线性模型_第9张图片
想让同类样本点的投影点尽可能接近,不同类样本点投影之间尽可能远,即:让各类的协方差之和尽可能小,不同类之间中心的距离尽可能大。基于这样的考虑,LDA定义了两个散度矩阵。

  • 类内散度矩阵(within-class scatter matrix)

    【周志华机器学习】三、线性模型_第10张图片

  • 类间散度矩阵(between-class scaltter matrix)

    16.png
    因此得到了LDA的最大化目标:“广义瑞利商”(generalized Rayleigh quotient)。

17.png从而分类问题转化为最优化求解 w w w的问题,当求解出 w w w后,对新的样本进行分类时,只需将该样本点投影到这条直线上,根据与各个类别的中心值进行比较,从而判定出新样本与哪个类别距离最近。求解 w w w的方法如下所示,使用的方法为拉格朗日乘子法
【周志华机器学习】三、线性模型_第11张图片

若将 w w w看做一个投影矩阵,则LDA可将样本投影到 N − 1 N-1 N1维空间(N为类簇数), N − 1 N-1 N1通常远小于数据原有的属性数。

投影的过程使用了类别信息(标记信息),因此LDA也常被视为一种经典的监督降维技术

4. 多分类学习

现实中我们经常遇到不只两个类别的分类问题,即多分类问题,在这种情形下,我们常常运用“拆分”的策略,通过多个二分类学习器来解决多分类问题,即将多分类问题拆解为多个二分类问题,训练出多个二分类学习器,最后将多个分类结果进行集成得出结论。

最经典的拆分策略有三种: “一对一” (One vs. One,简称OvO)、“一对其余” (One vs. Rest, 简称 OvR)和“多对多” (Many vs. Many, 简称 MvM).

【周志华机器学习】三、线性模型_第12张图片

  • OvO:给定数据集D,假定其中有N个真实类别,将这N个类别进行两两配对(一个正类/一个反类),从而产生 N ( N − 1 ) / 2 N(N-1)/2 N(N1)/2个二分类学习器,在测试阶段,将新样本放入所有的二分类学习器中测试,得出 N ( N − 1 ) / 2 N(N-1)/2 N(N1)/2个结果,最终通过投票产生最终的分类结果。

  • OvR:给定数据集D,假定其中有N个真实类别,每次取出一个类作为正类,剩余的所有类别作为一个新的反类,从而产生N个二分类学习器,在测试阶段,得出N个结果,若仅有一个学习器预测为正类,则对应的类别标记作为最终分类结果。若有多个分类器预测为正类,则通常考虑各分类器的预测置信度,选择置信度最大的类别标记作为分类结果。

  • MvM:给定数据集D,假定其中有N个真实类别,每次取若干个类作为正类,若干个类作为反类(通过ECOC码给出,编码),若进行了M次划分,则生成了M个二分类学习器,在测试阶段(解码),得出M个结果组成一个新的码,最终通过计算海明/欧式距离选择距离最小的类别作为最终分类结果。
    【周志华机器学习】三、线性模型_第13张图片

“纠错输出码” (Error Correcting Output Codes, 简称 ECOC)是将编码的思想引入类别拆分,并尽可能在解码过程中具有容错性,ECOC工作过程主要分为两步

  • 编码:对N个类别做M次划分,每次划分将一部分类别划为正类,一部分划为反类,从而形成一个二分类训练集;这样一共产生M个训练集,可训练出M个分类器.

  • 解码: M个分类器分别对测试样本进行预测,这些预测标记组成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果.

5. 类别不平衡问题

类别不平衡(class-imbanlance)就是指分类问题中不同类别的训练样本相差悬殊的情况,例如正例有900个,而反例只有100个,这个时候我们就需要进行相应的处理来平衡这个问题。常见的做法有三种:

  1. 在训练样本较多的类别中进行“欠采样”(undersampling),比如从正例中采出100个,常见的算法有:EasyEnsemble

  2. 在训练样本较少的类别中进行“过采样”(oversampling),例如通过对反例中的数据进行插值,来产生额外的反例,常见的算法有SMOTE

  3. 直接基于原数据集进行学习,对预测值进行“再缩放”处理。其中再缩放也是代价敏感学习的基础。

    从线性分类器的角度讨论容易理解,在我们用 y = w T x + b y=w^Tx+b y=wTx+b对新样本 x x x进行分类时,事实上是在用预测出的 y y y值与一个阈值进行比较,例如通常在 y > 0.5 y>0.5 y>0.5时判别为正例,否则为反例, y y y实际上表达了正例的可能性,几率则反映了正例可能性与反例可能性之比值,阅值设置为0.5恰表明分类器认为真实正、反例可能性相同,即分类器决策规则为
    在这里插入图片描述

    然而,当训练集中正、反例的数目不同时,令 m + m^+ m+表示正例数目, m − m^- m表示反例数目,则观测几率是 m + m − \frac{m^+}{m^-} mm+,由于我们通常假设训练集是真实样本总体的无偏采样,因此观测几率就代表了真实几率,于是只要分类器的预测几率高于观测几率就应判定为正例,即
    在这里插入图片描述但是,我们的分类器是基于式(3.46)进行决策,因此,需对其预测值进行调整,使其在基于式(3.46)决策时,实际是在执行式(3.47).要做到这一点很容易,只需令
    在这里插入图片描述
    这就是类别不平衡学习的一个基本策略——“再缩放” (rescaling).

    值得一提的是, “再缩放”也是“代价敏感学习” (cost-sensitive learning)的基础,在代价敏感学习中将式(3.48)中的 m − m + \frac{m^-}{m^+} m+m c o s t + c o s t − \frac{cost^+}{cost^-} costcost+代替即可,其中 c o s t + cost^+ cost+是将正例误分为反例的代价, c o s t − cost^- cost是将反例误分为正例的代价。

6. 关于logistic回归的后记

6.1 logistic回归为什么要对特征进行离散化

  1. 非线性!逻辑回归属于广义线性模型,表达能力受限;当变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合; 离散特征的增加和减少都很容易,易于模型的快速迭代;

  2. 速度快!稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

  3. 鲁棒性!离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;

  4. 方便交叉与特征组合:离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;

  5. 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;

  6. 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

6.2 逻辑回归的目标函数中增大L1正则化会是什么结果。

所有的w参数都会变成0。

7. 回归应用步骤

  • step1:模型假设,选择模型框架(线性模型)
  • step2:模型评估,如何判断众多模型的好坏(损失函数)
  • step3:模型优化,如何筛选最优的模型(梯度下降)

你可能感兴趣的:(机器学习,机器学习,人工智能)