zoukankan      html  css  js  c++  java
  • 感知机算法

    1. 感知机模型的引入

    由信用卡发放问题引入感知机模型。假设现在有历史的信用卡发放数据,需要学习一个模型来,用来评判是否发放给一个新用户信用卡。

    用户具有不同的特征,对这些特征加权得到一个分数,如果最终分数大于某个值,就发放,否则不发放。抽象为数学模型如下:

    那么,我们就需要使用数学模型来学习这些加权系数w。

    为了分析方便,现在考察维度为2的线性可分问题。

    那么,我们接下来要做的工作就是利用数据集D,从所有的分割超平面的集合中找出最接近真是的f的那个分割超平面g。

    2. 感知机的学习算法PLA

    我们想要g 近似于 f,这这么办?我们稍微放宽一点,让g在D上接近于f,但这也是很难办到的,因为g的可能性是非常多的,所有我们引入PLA来解决。

    基本思想就是:从某个g0 开始,修正分类错误的那些结点,更新g0得到g1,再修正,循环往复。

    如图所示,如果一个本来为+1的点分类错误,那么就代表w和x的夹角太大了,使用w + x来进行修正。

         如果一个本来为-1的点分类错误,那么就代表w和x的夹角太小了,使用w - x来进行修正。

    3.规范化使用数学语言描述

    我们之前由信用卡发放问题引入解决二分类问题的感知机模型,并从几何角度提出了感知机的求解方法。现在我们应入损失函数,并使用随机梯度下降算法来求解感知机。其实最后的到的结果和之前的直观分析是一样的。

    感知机的学习:

    假设数据时线性可分的,那么我们需要寻找某个分割超平面使得数据都能够被正确分类。现在我们需要来定义一个损失函数,并将损失函数极小化。

    一个直观的思路是误分类点的个数作为损失函数,但是这样的损失函数不是参数w b的可导函数,不易优化,所以这里我们定义损失函数为误分类点到超平面的总距离。

    ,其中集合M表示误分类点的集合。

    现在忽略前边的损失函数,那么我们就得到感知机的损失函数,具体描述如下:

    好了,接下来我们的目标就是需要最小化损失函数,由于损失函数关于w b是可导的,这里可以使用随机梯度下降算法,一次随机选取一个误分类点使得其梯度下降。

    4. 算法收敛性分析

    思考这样一个问题,对于线性可分的数据,PLA算法一定会停下来吗?答案是一定的。

    可知,每次迭代之后,wf与wt的内积是在增大的,似乎就表明这两个向量越来越接近,但实际上还有问题,因为可能是由于模的增大而导致了越来越大。接下来说明模值的增大速度是有限制的。

    所以,内积是在不断增大的,模的增大速度是有限制的,可以得到(不理解怎么得到)

    今天看了统计学习方法,理解了这部分内容。

    内积的增大速度快于wt的模的增大速度,所以wf和wt是在不断靠近的。

    这个算法的优点就是实现简单,但缺点是事先不确定是线性可分的,而且即使确定是线性可分的,也不确定它多久能够停下来。

    好了,上述证明得到,如果数据集线性可分,那么感知机学习算法的原始形式迭代是收敛的。即经过有限步的迭代能够停下类。但是感知机的算法存在许多解,这些解依赖于初始值的选择,也依赖与迭代过程中误分类点的选择顺序,为了得到唯一的分离超平面,需要对分离超平面增加约束条件,这也就是线性SVM的想法。当训练集线性不可分时,感知机学习算法不收敛,迭代结果会发生震荡。

    5. 感知机学习算法的对偶形式

    这里与SVM的原始形式和对偶形式相对应。

    基本思想是:将 w 和 b 转化为训练数据 x 和 y 的线性组合,通过求解其系数而求得 w b

     

    6. 考虑噪声 Pocked算法

  • 相关阅读:
    注释
    Servlet原理和开发
    什么是Servlet
    Java基础目录
    实现第一个Servlet
    Servlet的体系
    习题3
    利用ResultFilter实现asp.net mvc3 页面静态化
    oracle欲出纯托管代码的ODP.NET,现接受小范围预览版本使用申请
    http请求头中包含未编码中文时webapi self host崩溃
  • 原文地址:https://www.cnblogs.com/futurehau/p/6225990.html
Copyright © 2011-2022 走看看