二分类问题是监督学习中最基本的问题之一,本文旨在从评分值、损失函数的角度,对解决二分类问题的诸多机器学习算法做一个梳理。相关算法的详细介绍可以参考相关教材[1][2]

给定一个数据集 ,其中为d维向量 。注意有些资料中二分类比较喜欢用表示,使用什么数字表示二分类从原理上讲没有区别,但在数学表达上会有一些细微差异。

评分值不是一个机器学习算法中的一个正式名词,但是我们不妨建立这样一个认识角度。我们希望建立关于样本的一个评分函数,它的基本性质很简单,就是要求和目标值同号,即正样本评分为正数,负样本评分为负数,这样最终的二分类函数为

那么我们要如何建立评分函数呢?直观的想法是,对样本的个属性进行加权求和,这样能体现每个属性在评分中的重要性,如此建立的评分不一定在0值处有区分作用,因此再加上一个偏置项,所以评分函数为,这个基本的评分函数可以衍生出很多算法。

评价二分类问题的基本标准是分类错误率,针对每一个样本,如果去计算它的损失函数,就是分类正确损失为0,分类错误损失为1,这种损失函数一般叫做0-1损失函数,可记为

如果我们统一考虑正、负样本,令 ,那么分类正确时,必然始终为正值,不妨称其为绝对评分值,是对分类是否正确的一个度量。则,故是关于的分段函数。从最优化理论的角度来看,这个函数无法求梯度或次梯度,因此需要找它的近似来优化。这个近似的基本标准是:始终为非负值;当它很小时,很小。

评分值是属性的线性组合,从另一个角度看,评分值也是关于权值的线性组合。一般的,我们将变换到新的特征空间得到。则评分值为。上述分析基本不变,只是模型的复杂度更高了。以下分析如无特别说明仍在原空间进行。

1 线性回归

要求评分值与目标值同号,如果目标定得更加狭隘一些,可以令评分值直接为,这是线性回归问题,损失函数使用误差平方(可以做直观的理解,也可以认为样本的误差符合正态分布,从极大似然的角度推导出,这不是本文的重点。)。注意到,故误差函数是关于绝对评分值的二次函数。从图中可以看出是始终大于的,而且当比较小时,也比较小,所以可以作为的近似。

线性回归有封闭解,所以使用线性回归做二分类非常简单,但是效果一般不太好,为什么呢?从的曲线可以看出,当绝对评分值很大时,应该为0,直观来说,绝对评分值很大应该是区分度高的一件好事情,但是却给与了更高的惩罚,这是不合理的。线性回归可以给出一个还不错的值,可以用作其他算法的初始值。

2 感知机学习

感知机学习可以用如下的直观想法来理解:针对绝对评分值,当它为正数时,分类正确,我们认为误差为0,当它为负数时,我们认为离0值越远,误差越大,即,从的曲线来看,也是的一个近似,虽然它也是一个分段函数,但是是可以求次梯度的,时,认为梯度为0,当时,,使用随机梯度下降法,也就是说,只在出现评分错误时进行优化,这恰好就是感知机学习算法所做的工作。

3 支持向量机

对感知机学习的误差函数,我们可以进一步优化,我们希望绝对评分值要充分大,这样认为样本是正样本我们才更加放心,考虑到是关于可缩放的,不妨定义充分大为大于1。于是有,这个损失函数被称为hinge损失函数。考虑结构风险,我们的优化目标为


通过松弛变量法,就可以变为软间隔支持向量机,通过二次规划来求出模型。

从评分值的角度来理解,评分值充分大使得模型针对新的样本有较好的鲁棒性,这正是支持向量机比较优秀的地方。如果引入特征空间,则在支持向量机的求解过程中要大量计算内积,将特征空间的内积简化为原空间的核函数可以引入核方法。

4 Logistic回归

值的基础上,我们希望它能算出一个概率,衡量分类正确的概率或者说程度。即将的值域从映射到 ,那么sigmoid函数是个好的选择,它可求梯度而且在0处概率恰好为0.5。即


然后,我们再根据这个sigmoid函数,再来模拟损失函数,我们要求损失函数关于递减,而且始终为正数,考虑概率求对数后再取负号,故


由图可以看出,它也是的一种近似。以对数损失函数为优化目标。


这是带正则化的Logistic回归,由于处处可微,因此可以使用梯度下降法等最优化方法求解。

5 AdaBoost

指数函数同样可以满足近似的基本条件,即损失函数定义为

指数损失函数结合加性模型,可以推导出AdaBoost算法。

所谓加性模型,可以这样来理解:假设我们得到的特征空间中的d维向量对应的就是d个弱分类器,就是说比随机猜测50%的正确率高一点的分类器。所谓的Boost方法就是有效的组合这些弱分类器来构建强分类器。加性模型本质上依然是一个线性模型。依然有评分函数为。(考虑到弱分类器本身可以有偏置,因此取。)只不过这里的代表一个弱分类器,而不是一个简单的属性变换(本质上看,也是一种属性变换)。

AdaBoost是一个逐步迭代的过程,假设经过轮迭代已经得到评分函数,在第轮迭代后得到,则,AdaBoost的优化目标是使得每一步得到的评分函数关于指数损失函数最小,即


该式的进一步推导此处不再详述。

小结

以上介绍了6种损失函数,他们都是关于评分值的单调非增函数,其中后面5种是关于0-1损失函数的近似替代,通过求解替代函数能否得到原问题的解,有深入的研究,称为替代损失的“一致性”问题[3]

此外,如果我们要找出所有样本种的正例并排序,那么评分值应该在参与优化的时候就具备排序的特性,对数损失和指数损失是单调递减的,以它们为优化目标的模型计算出的评分值可以参与排序,其他几种损失函数不是单调递减的,因此相应的评分值不适合排序。


  1. 统计学习方法 李航 ↩︎

  2. 机器学习 周志华 ↩︎

  3. projecteuclid.org/download/pd… ↩︎

转载于:https://juejin.im/post/5ca0928851882567db2a2da9

二分类问题的评分值与损失函数相关推荐

  1. LESSON 10.110.210.3 SSE与二分类交叉熵损失函数二分类交叉熵损失函数的pytorch实现多分类交叉熵损失函数

    在之前的课程中,我们已经完成了从0建立深层神经网络,并完成正向传播的全过程.本节课开始,我们将以分类深层神经网络为例,为大家展示神经网络的学习和训练过程.在介绍PyTorch的基本工具AutoGrad ...

  2. 【机器学习基础】常见二分类损失函数、距离度量的Python实现

    本文用Python实现了常见的几种距离度量.二分类损失函数. 设和为两个向量,求它们之间的距离. 这里用Numpy实现,设和为ndarray <numpy.ndarray>,它们的shap ...

  3. 【机器学习基础】用Python画出几种常见机器学习二分类损失函数

    在二分类的监督学习中,支持向量机.逻辑斯谛回归与最大熵模型.提升方法各自使用合页损失函数.逻辑斯谛损失函数.指数损失函数,分别写为: 这 3 种损失函数都是 0-1 损失函数的上界,具有相似的形状.( ...

  4. 如何画出几种常见二分类损失函数(附代码)

    在二分类的监督学习中,支持向量机.逻辑斯谛回归与最大熵模型.提升方法各自使用合页损失函数.逻辑斯谛损失函数.指数损失函数,分别写为: 这 3 种损失函数都是 0-1 损失函数的上界,具有相似的形状.( ...

  5. 交叉熵损失函数分类_逻辑回归(Logistic Regression)二分类原理,交叉熵损失函数及python numpy实现...

    本文目录: 1. sigmoid function (logistic function) 2. 逻辑回归二分类模型 3. 神经网络做二分类问题 4. python实现神经网络做二分类问题 ----- ...

  6. 损失函数-交叉熵的推导和二分类交叉熵

    交叉熵 期望: 期望就是所有随机变量的均值. E(X)=X1*P(X1)+X2*P(X2)+X3*P(X3) 熵: 熵表示所有信息量的期望. 信息量如何计算呢? 概率值取Log,然后加个负号,就是信息 ...

  7. 二分类交叉熵损失函数python_【深度学习基础】第二课:softmax分类器和交叉熵损失函数...

    [深度学习基础]系列博客为学习Coursera上吴恩达深度学习课程所做的课程笔记. 本文为原创文章,未经本人允许,禁止转载.转载请注明出处. 1.线性分类 如果我们使用一个线性分类器去进行图像分类该怎 ...

  8. 二分类交叉熵损失函数python_二分类问题的交叉熵损失函数多分类的问题的函数交叉熵损失函数求解...

    二分类问题的交叉熵损失函数; 在二分类问题中,损失函数为交叉熵损失函数.对于样本(x,y)来讲,x为样本 y为对应的标签.在二分类问题中,其取值的集合可能为{0,1},我们假设某个样本的真实标签为yt ...

  9. R语言使用quantile函数计算评分值的分位数(20%、40%、60%、80%)、使用逻辑操作符将对应的分位区间(quantile)编码为分类值生成新的字段、strsplit函数将学生的名和姓拆分

    R语言使用quantile函数计算评分值的分位数(20%.40%.60%.80%).使用逻辑操作符将对应的分位区间(quantile)编码为分类值生成新的字段.使用strsplit函数将学生的名和姓拆 ...

  10. pytorch中的二分类及多分类交叉熵损失函数

    本文主要记录一下pytorch里面的二分类及多分类交叉熵损失函数的使用. import torch import torch.nn as nn import torch.nn.functional a ...

最新文章

  1. 目前计算机辅助数控编程的方法,数控编程试题(附自己整理的答案)
  2. 天天python爬虫,你不腻的吗?
  3. python去重复记录_Python列表去重复项的N种方法(实例代码)
  4. kvm连接服务器显示不全有重影,KVM延长器系列常见问题及解决方法
  5. ExecutorService – 10个提示和技巧
  6. 网管交换机和非网管交换机有什么区别?
  7. [vue]vue渲染模板时怎么保留模板中的HTML注释呢?
  8. Windows远程连接的用户名和密码怎么设置?
  9. java web 启动时执行_java Web 启动时自动执行代码的几种方式
  10. 角度控制_手机拍剪影,选择拍摄角度,还要控制画面亮度
  11. 《面向模式的软件体系结构1--模式系统》读书笔记(7)--- 通信
  12. 用Python画一颗心、小人发射爱心
  13. java容器输入_Java 容器初识篇
  14. BZOJ 2882 后缀数组的傻逼实现
  15. MyBatis之ResultMap简介,关联对象…
  16. Fedora16 安装相关
  17. MySql 语法(完整版)
  18. 英语不好、数学不好能自学编程吗?自学编程出路如何?老程告诉你
  19. CF685B Kay and Snowflake
  20. YIT-CTF—隐写术

热门文章

  1. 使用 classList API
  2. jbpm3.2中jbpm.jpdl.mysql.sql文件运行报错的问题
  3. 一个虚拟社交公司的融资历程
  4. Flex与.NET互操作:基于WebService的数据访问
  5. 关于M1芯片版Mac安装Photoshop后储存psd时出现程序错误提示的解决方法
  6. 视频剪辑软件Movie Studio安装教程
  7. iOS底层探索之多线程(十八)——锁篇章的完结篇(手把手两种方式带你实现一个读写锁!)
  8. React+Webpack+Antd+Babel 兼容低版本浏览器(下)
  9. Activity onSaveInstanceState(Bundle)
  10. centos 搭建nfs服务器