zoukankan      html  css  js  c++  java
  • 西瓜书第三章--线性模型

    3.1 基本形式

    给定由d个属性描述的示例,其中 x是x在第i个属性上的取值,线性模型就是试图学得一个通过属性的线性组合来进行预测的函数即:

    向量形式:

    w和b学得之后,模型即可确定。其中w还可以表示为属性的权重,下面是一个例子:

    3.2线性回归

     线性回归的本质就是学得一个线性模型尽可能的预测未来输出,那么这个线性模型怎么来确定呢,我们在一堆数据点中,一般是寻找一根线使得其穿越尽可能多的点并且更好地分开数据,我们目的是均方误差最小化:

    基于最小二乘法的参数估计:

    求解w和b使得所有样本到直线的欧氏距离之和最小,也就是使得上式E最小,我们对其求偏导得:

    令上述两个偏导式子为零得到w,b的最优解的闭式解。具体推导如下(本人手推):

    多元线性回归:

    更一般的情形是样本由d个属性描述,此时我们试图学得:

     这样的就称为多元线性回归。类似的可以用最下二乘法来估计为便于讨论把w,b放置在一个矩阵中:

    下面是最小二乘法的步骤:

     下面是我手推证明的中间核心过程:

    我在手推过程中自认为把应该讲的知识点讲到位了,其中最后一步的公式运用到了最优化理论中对矩阵求梯度的理论运用,若是对相关的矩阵论不太熟悉的话推荐一个链接的博客写得很详细:https://blog.csdn.net/Willen_/article/details/87912967

    得到最优闭式解:

    最终学得的多元线性模型是:

     对数线性回归:

    假设我们认为示例所对应的输出标记实在指数尺度上变化,那么可将输出标记的对数作为线性模型逼近的目标,也就是:

    这就是对数线性回归,他实际上是试图让e的指数次方趋近于y,表示图如下:

    一般表示形式如下:

     g称为联系函数。

    3.3对数几率回归

    前面讲了利用线性模型进行回归学习,但是如何用于分类任务呢?答案在上面的广义联系函数模型上:只需找一个单调函数将分类任务的真实标记与预测值联系起来。 举个栗子,二分类中,我们可以利用阶跃函数进行理想分类:

    预测值大于零就判为正例,小于零就判为反例,预测值为临界值零则可任意判别;但是有个缺陷就是阶跃函数不连续,由此我们找到一个符合上述条件的替代函数:

    该函数也叫对数几率函数(logistic functin)具体图形如下:

     可以知道对数几率函数将z值转为接近 0或1 的 y 值,将对率函数带入联系函数中即 z = w'x + b 代入得:

    然后对 y 取对数得:

    其实这个式子的含义就是把 z 的表达式或者是说 y 的反函数求出来了。其中y/(1-y) 称为 几率,反映了正例的相对可能性。

    对数几率回归的优点

    无需事先假设数据分布

    可得到“类别”的近似概率预测

    可直接应用现有数值优化算法求取最优解 

    3.3.1 对数几率回归 - 极大似然法

    给定数据集{(X1, Y1),(X2,Y2).....},最大化样本属于其真实标记的概率。构造出最大似然函数:

    下面对函数进行处理:

    上面等价最小化如何推出 网上几乎搜不到,这里划重点,下面是手推过程:

    利用凸优化理论、梯度下降法、牛顿法等计算:

    下面是牛顿法的求解步骤;

    3.4 线性判别分析LDA

    线性判别分析是经典的二分类方法,最早由Fisher提出,所以也叫Fisher判别,在模式识别中称为后者的较多。

    LDA思想要点:

    1. 欲使同类样例的投影点尽可能接近,可以让同类样例投影点的协方差尽可能小

    2. 欲使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大

    规定了投影规则后,我们可以来考虑相关的参数决定,首先给出一部分变量的示意:

    最大化目标为以下式子:分子是类间距,分母是类内的离散度,所以越大越好

    对以上式子单纯的看待是理解不了的,所以就需要我下面的手推:

    进一步将J的表达式简化为以下,对应关系很明显就不赘述了:

    上面这个式子称之为瑞利商,接下来如何确定 w 呢,注意到分子分母都是关于w的二次项,也就是J与w的大小无关,只与方向有关,这里介绍两种方法求w:

    值得一提的是,LDA可以从贝叶斯决策论的角度来阐释:两类数据同先验、满足高斯分布且协方差相等时,LDA达到最优分类

    3.4.1 LDA推广到多分类

     假设有N个类,且第i类事例数为 mi 

     有关Sb的推导可以看下面:

     接下来就是对w的目标值进行优化,目标优化函数是:

    看到这里可能很多人疑惑为什么会是这个优化函数,其实和前面的二分类是一样的,具体写在下图:

    这里偷了张图,更好的体现关系式子之间的关系,显然,多分类LDA有多种实现方法:使用三者中的任意两个即可。常见一种实现是采用优化目标:

    优化方法此书选择的是牛顿法:

    多分类LDA将样本投影到N-1维空间,N-1通常远小于数据原有的属性数,因此LDA也被视为一种监督降维技术

     3.5多分类学习

    现实中常遇到多分类任务,有些二分类方法也可推广到多分类。考虑N个类别C1,C2,…,CN,多分类学习的基本思路是拆解法,将多分类任务拆为若干个二分类任务求解。具体来说,先对问题进行拆分,为拆出的每个二分类任务训练一个分类器,测试时,对这些分类器的预测结果进行集成获得最终分类结果。

    一般的,拆分策略有三种

    一对一OVO:
    将N个类别两两配对,产生N(N-1)/2个二分类任务。为区分类别Ci和Cj训练一个分类器,将Ci类作为正例,Cj类作为反例,测试阶段,新样本同时提交给所有分类器,最终结果通过投票产生,预测得到的最多的结果作为最终分类结果。

    一对多OvR:
    将一个类的样例作为正例,其他所有类的样例作为反例,训练N个分类器,在测试时若只有一个分类器预测为正类,则对应的类别标记为最终结果。若有多个分类器预测结果为正类,考虑各个分类器的预测置信度,选择置信度最大的类别标记作为分类结果。投票产生最终分类结果 被预测最多的类别为最终类别。
    下图是一对一和一对多的示意图:

    下面是两种策略比较的结果:

    多对多MvM:

    每次将若干个类作为正例,若干个其他类作为反例,OvO和OvR是MvM的特例。正反类的构造有特殊的设计,一种常用的方法:纠错输出码(ECOC),将编码的思想引入类别拆分,尽可能在解码过程中具有容错性,主要分为两步:

    编码:对N个类做M次划分,每次划分将一部分类作为正类,一部分类作为反类,形成一个二分类训练集;一共产生M个训练集,可训练出M个分类器。
    解码:M个分类器分别对测试样本进行预测,这些预测标记组成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。具体流程如下图:

    类别划分通过编码矩阵指定,编码矩阵常见的有二元码和三元码,前者将每个类分为正反两类,后者加了个停用类。如上面的矩阵图+1指的是f分类器判别为正。

    ECOC编码对分类器的错误有一定的容忍和修正能力。一般来说,对同一个学习任务,ECOC编码越长,纠错能力越强。但是对有限类别数,可能的组合数有限,码长超过一定范围就失去了意义。对同等长度的编码,理论上来说,任意两个类别之间的编码距离越远,纠错能力越强。

     3.6类别不平衡问题

    类别不平衡问题主要是因为正反类的样例不同导致的。

    比如下面的正例预测:

    这样的就是 y > 0.5即预测为正值。当正反例数目不同时,令m+表示正例数目,m-表示反例数目,则观测几率是m+/m- :

     因此上面这个决策就容易出问题,由于分类器是基于上上个式子即 y/(1-y) > 1进行的决策,需要对其阈值进行调整,表现如下:

    总的来说对于正反类数目不均我们有以下方法来尽量修正这些错误:

    欠采样:去除一些反例使得二者数目接近。但是若随机丢弃,可能丢失一些重要信息,代表性算法EasyEnsemble是利用集成学习机制,将反例划分为若干个集合供不同学习器使用,这样对每个学习器来看都进行了欠采样,在全局来看不会丢失重要的信息。

    过采样:增加正例使得二者数目接近。简单对正例进行重复采样,会导致严重的过拟合,代表性算法SMOTE通过对训练集里的正例进行插值产生额外的正例。

    阈值移动法:也称再缩放,是指上个式子对阈值乘以一个系数对阈值调整

    再缩放也是代价敏感学习的基础,在代价敏感学习中将m-/m+用cost+/cost-代替即可,cost+是将正例误分为反例的代价,cost-是将反例误分为正例的代价。

    3.7总结

    第三章写了大概两个多星期,这凸显了线性模型的重要性,老师上课也是上了两个星期,我多花了一点时间来进行修稿,后面的内容我也不会拖拉的。

  • 相关阅读:
    [转] Optimizely:在线网站A/B测试平台
    批处理命令——choice
    批处理命令——%0
    批处理命令——call 和 start
    批处理命令——rem 和 pause
    批处理命令——goto 和 :
    PHPCMS V9 学习总结
    PHPCMS V9 环境搭建
    批处理命令——echo 和 @
    利用Qt Assistant 定制帮助文档
  • 原文地址:https://www.cnblogs.com/icetree/p/12418775.html
Copyright © 2011-2022 走看看