一、二元分类问题

接着上一节我们举得例子,我们说机器学习的流程是什么呢?首先我们要有一个学习的演算法,我们叫做A,这个演算法会看资料,然后会看我们的假设函数集合,从集合中选择一个假设函数做为我们的银行学到技能。这其实就是一个使用机器学习做是非题的问题。

  那么假设函数集合是什么样子呢?

我们把每一个使用者当做一个向量X(年龄,工作年限,年薪),每一维都当做一个特征,我们把然后我们根据这个向量计算出来一个分数,每一个维度根据其对结果的影响,其权重值就是正值,反之,就给负的权重。然后我们假设一个门限值,当我们计算的分数超过了门限值,我们就给他发信用卡,如果我们计算的分数没有超过门限值,然后我们就不发给他信用卡,其计算的方式如图所示:

那么以上的过程就可以划分为一个公式。

这个公式很简单,首先你要明白假设函数就是张这个样子,你给定一个输入X,它就会给你一个输出h(X),这个输出只有两种情况,-1 或则 +1,为什么呢?以为sign函数就是一个这样的函数,如果sign(X) 中的X为正,则sign(X)等于+1,如果X为负,则结果为-1,为什么要用sign函数呢?其实很好理解,以为我们后面是把计算的分数和门限值进行相减,然后对相减的结果进行取sign,其意思就是你给定的X所计算得到的分数超过门限值,那么h(X)就取+1,否则就取-1,二者分别代表着要不要发送给客户信用卡。其中的W表示的每一个维度的权重。

下面我们把公式进行简化,我们把threshold和前面的求和公式进行结合,因为前面的求和公式是从第一维开始,我们把threshold做为第0维。

则h(X) 可以表示如下:

此时,我们可以假设函数看成这样的,如果我们的向量只有二维的,,那么我们的W_0其实就是刚才所说的门限值,X_0就可以看做是+1,其余的就是真正的特征输入。仔细观察这个二维的假设函数,分析其几何意义,首先因为它是二维的,所以我们把其特征的两个维度分别作为一个二维平面的图,那么一个的输入点就是平面图中的一个点,那么再看h(X),当sign()内容的那个方程值为正的时候就是+1,内部的方程如果是负的就是-1,那么就是说内部如果等于0的时候才会把样本输入点划分为两类。那么sign()内部的方程等于0其实在二维的平面上就是一个直线,如下图所示

图中的这条直线就相当于我们的一个假设函数,该假设函数上面的点,它认为要分为蓝色的一类,它认为下面的点分为红色的一类,当然它只是我们假设函数中的一个,不一定是完全正确的,所以它的分类是有些错误的,我们下面再进行讨论,对于这样的假设函数h(X),我们把它称为“感知器“,其实我们也可以把它叫做一个线性的二元分类器,当然想象一下,如果X的维度为三位的话,那么我们的这个感知器就是一个平面而已。

其实我们已经找到了所有的可能的假设函数(如果你认为你的模型就是一个线性的话),你也许会有疑问,我们不是只知道了一个假设函数吗?仔细观察这个函数你会发现,如果我们不断的改版变W向量,对不同维度的X给定不同的W,那么其实就是不同的一个假设函数,也就是对应到二维平面中的一条直线,当然平面中的直线有无数条,也就对应着我们的假设函数有无数个。那么我们的目的就是要从这无数个假设函数中找出和目标函数F最为接近的一个。

那么,问题又来了,我们怎么去判定我们找到函数和目标函数接近呢,首先我们根本不知道目标函数怎么办呢?我们不知道目标函数,那么我们怎么判定我们的假设函数的好坏呢,自然而然的我们就想到了我们用给定的样本去判断假设函数的好坏,也就是说,如果我们找到假设函数如果把所有的样本都分类正确的话,我们就把这样的假设函数称为是好的,公式代表如下:,其中g(X)就是我们假设函数集合H中的一个,f(X)就是我们的目标函数,y就是我们样本的值,也就是其实际是哪一类。

二、PLA

那么,接下来,我们怎样找到这样的一个假设函数,试得我们其能对我们所有的样本值都分类正确,下面我们来介绍一个找到这样一个假设函数的算法,名字叫PLA(Percepreon Learning Algorithm)

注意,首先我们的算法的初始的假设函数怎么设定呢,PLA中给出的是把W设定为0,当然也可以设定为随机值。

下面我们来进行分析算法:首先这个算法就是找到如下的结果,对于找到的假设函数g对于所有的样本都是判断正确的,也就是算法中的no more mistakes

其次,它是怎么判定呢,观察算法中的步骤一,意思就是说,找到一个对于假设函数犯错的点,可以一个接着一个找,随机的寻找,但是一定要把所有的样本都遍历完。

那么,怎么判定假设函数把该点判定错误呢?很简单,就是假设函数的判定结果和真实的类别不正确。接下来,如果判定不正确,我们怎么修正呢,修正方法如图所示,

下面来进行解释一下,如果说我们某一个样本点的分类是+1,而我们的假设函数把其分类成了-1类别,注意我们的假设函数是两个向量值的乘积结果然后求sign,在进行分析其实就是两个向量如果夹角超过90度的时候,乘积结果就是负的,那么PLA的修正方法是把W进行更新,更新成W+yX,此时y是+1,那么变更之后的W和X的夹角一定为向着小于90的方向变更。同理,如果我们的样本点的分类是-1,而我们的假设函数把其分类为了+1的类别,也就是说两个向量的夹角是小于90度的,而我们需要的是其夹角大于90度,此时我们队W进行更新,更新方法同上,W+yX,注意此时y为-1,也就是说把W更新到了偏离X的方向。
就这样一轮轮的进行下去,知道找到的假设函数g对于所有的样本都分类正确。

那么接下来考虑一个问题,如果说根本不存在一条线可以把样本集合完全的分开,怎么办呢,此时PLA根本不会停下来。那么我们假设,我们的样本集合存在一条线可以把其完全正确的分开,此时我们称这样的样本集合是线性可分的。那么如果样本集合是线性可分的话,PLA是否能够找到这样一条线吗,也就是PLA会停下来吗?下面我们来证明这件事情。

三、PLA证明

首先,假设我们最理想的线是W_f(W_f指的是线的权重向量):y_n = sign(W_f转置乘以X_n).由该式子我们能够推出:对于所有的y_n乘以W_f的转置再乘以X_n都是大于0的,原因很简单,自己稍微推导下就可以得到:,同样的对于我们在PLA中第t轮找到的那个错误的点满足这个式子,因为理想的线把所有的点都分类正确:,注意理解这个式子中,X_n(t)代表这个点是指的PLA中t轮中的那个分错的点,y_n(t)指的是理想的线对该点的分类结果。

下面我们再看一下PLA中对W的更新:

我们怎么判定我们这次更新的W是朝着更加接近完美的W_f 呢?我们判定两个向量接近的一个最直观的方法就是两个向量相乘,结果越大,表示夹角越小,也就是越接近。

那么我们比较更新完前后的W和完美的W_f的乘机的大小

等式的右边展开之后W_f的转置和后一项相乘就是我们上面的所说的,一定是大于0的,那么,我们就推出

也就是说我们的更新是朝着越来越接近完美的W_f的方向。

其实上面的推导有一个bug,评判两个向量夹角是否变小不能完全的凭借其二者的内积,向量的内积的大小的改变还可以凭借改变向量的长度,比如向量A和向量B相乘结果是10,你把向量A的长度变为原来的二倍,方向不变,那么和B相乘的结果同样变大了,但是其夹角没变。

下面我们把这个bug进行修正:

我们从第一轮开始,W_0原来是等于0向量, 其中A是常量,然后再推导下一轮,一直往下推导你会得出:

(公式1)

我们暂且把这个公式先放这,等会用得着。

下面我们再看一下每次更新完之后的W_t+1 的向量的长度有什么变化,首先我们知道,我们的PLA在找到错误的点的时候,此时:

那么,我们就推出:

其中指的是和完美的直线的最远的那个点的和直线的距离的平方,是一个常量值,我们把他称为B的平方。

同理我们根据这个式子进行一轮一轮的推导:

(公式2)

根据公式1和公式2可以得出

其中后一部分是常量,  也就是说我们更新的向量的和完美的向量的标准化之后的内积朝着越来越大的方向,这也表明着我们的W_t会越来越接近完美的W_f,直到和其重合,所以PLA一定会停止下来。

四、PLA的变形

以上是在假设我们的样本集合是线性可分的,也就是假设存在这样一条完美的直线W_f,那么关键是我们在实际应用中我们是不知道到底存在不存在这样的一条直线,换句话说,样本集合可能根本不能线性可分,有噪声等等这样的因素,这样的话PLA就不能应用了。

那么下面我们讲一个PLA的变形来解决这样的问题,先把算法列出来,然后再解释:

这个过程很简单,想象一下一个小孩想从一堆的苹果中找到最大的那个,怎么找呢?他随机拿一个在他目前的视野中最大的那个苹果,然后放进自己的口袋,然后继续找,当他找到下一个苹果的时候,再和自己口袋里的苹果比较,如果比自己口袋里的大,就把自己口袋里的苹果扔掉,把那个大的放进口袋,如果不如自己口袋的大,就直接扔到继续寻找。

我们的这个PLA的变形也是一样,我们要找到一个相对来说还不错的直线(直观的讲就是一个犯错很小的线,比如分错了两个点线是我们的能够容忍的),那么我们就先把W初始设为0或者随机,然后我们找到随机找到一个分错的点,然后根据PLA的更新策略进行更新W,然后和原来的W进行比较,看是不是分类错的数目变少了,变少了就保留新的W,没有变少就保留旧的W,然后进行下一轮。直到找到相对来说最好的线。

五、总结

在这一节我们主要讲了一个很简单的算法PLA,在假设样本集合是可以先行可分的情况下我们直接用PLA找到一条直线,在不知道是否可以先行可分或者有噪声的样本集合的情况下,我们用PLA的一种变形来找到一条相对较好的直线。

机器学习做二元分类问题(二)相关推荐

  1. 厉害了!使用Elastic的有监督机器学习进行二元分类

    7.6版本的Elastic Stack提供了端到端机器学习管道所需的最后一块拼图.此前,机器学习专注于无监督技术与异常检测.然而,在7.x版本中,已经发布了几个功能.在7.2中,Elasticsear ...

  2. keras提取模型中的某一层_Keras做图片分类(四):迁移学习--猫狗大战实战

    本项目数据集来自kaggle竞赛,地址: https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data 数据的训练集放在train文 ...

  3. 机器学习之多元分类(机器学习基石)

    一个案例 如上图所示我们要使用一些线性模型来分割这四种不同的图案,利用以前学过的二元分类我们可以将某一个种类分别从整体中分离出来.比如将图通是方块和不是方块的做二元分类,是三角形的和不是三角形的进行分 ...

  4. 机器学习基础之模型篇-----二元分类和多元分类

    机器学习是一个比较广阔的知识领域,涉及到很多数学统计和计算机的相关知识. 要想深入了解,需要系统学习和大量的时间. 但是如果我们很清楚地知道机器学习如果用一句话来概括就是:通过大量的训练,使得机器把输 ...

  5. 如何用Python和BERT做中文文本二元分类?| 程序员硬核评测

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑ 作者 | 王树义 来源 | 王树芝兰(ID:nkwangshuyi) 兴奋 去年, Google 的 B ...

  6. tf第十二讲:TextCNN做文本分类的实战代码

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  7. 【机器学习】scikitLearn分类任务以mnist为例,训练二分类器并衡量性能指标:ROC及PR曲线

    分类相关导航: [机器学习]分类任务以mnist为例,数据集准备及预处理 [机器学习]scikitLearn分类任务以mnist为例,训练二分类器并衡量性能指标:ROC及PR曲线 [机器学习]scik ...

  8. 机器学习中的数学原理——二分类问题

    今天是2022年的最后一天,提前祝大家新年快乐!这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言!这一篇就更新一下<白 ...

  9. NLP(三十)利用ALBERT和机器学习来做文本分类

      本文的灵感来自于A Visual Guide to Using BERT for the First Time,其作者为Jay Alammar,访问网址为:http://jalammar.gith ...

最新文章

  1. 构建从目标到研发过程的全生命周期体验
  2. let's encrypt部署免费泛域名证书
  3. C#协变和逆变 - 译
  4. 2020-11-23(“花式扫雷” 辅助制作)
  5. boost::locale::generator用法的测试程序
  6. 【python数据挖掘课程】二十五.Matplotlib绘制带主题及聚类类标的散点图
  7. Microsoft Ajax Beta1 - 边学边用边补充 (Part 2 - DragDropList)
  8. 特征工程 - 机器学习
  9. goldengate for mysql_GoldenGate for mysql to mysql:单向同步
  10. 50套3dmax家具建模详细教程 3dmax床建模教程丨3Dmax基础教程3dmax教学3dmax室内设计教程
  11. lnmp 一键安装后 MySQL密码
  12. Flameshot——最好用的ubuntu截图工具
  13. 微信开放平台接入支付后不显示头像
  14. 【TK精灵】一款界面友好的桌面程序(exe)进程守护管理软件
  15. DESC查看表的结构
  16. OpenCV-Python实现有参照物条件下的长方形物体尺寸推算(可实时、附源码)
  17. 43.248.189.18 Steam游戏服务器搭建教程
  18. 新站如何使用好百度站长平台工具
  19. pcl计算点云法向量
  20. 原码,反码,补码的深入理解与原理

热门文章

  1. 苹果手机app试玩是真的能赚钱吗?有风险吗 ?
  2. KONICA MINOLTA 423SeriesPS-8打印机驱动
  3. php 半角全角,php字符串处理之全角半角转换
  4. STM32驱动_cc2420
  5. Flink开发利器StreamX
  6. CCF ChinaSoft 2022预告丨形式化方法工业应用前沿分论坛 暨中科国创高可信联合上海控安新品发布...
  7. linux系统发送短信,使用Linux发送短信
  8. 2. 一元函数微分学
  9. 前端更新需要清空浏览器缓存_js清除浏览器缓存的几种方法
  10. CSS小游戏2048—简单小游戏编程有手就行~会玩?你会写吗?