百科狗-知识改变命运!
--

二分类和多分类的区别

梵高1年前 (2023-12-21)阅读数 6#综合百科
文章标签函数损失

二分类和多分类的区别

二分类、多分类与多标签的基本概念

二分类:表示分类任务中有两个类别,比如我们想识别一幅是不是猫。也就是说,训练一个分类器,输入一幅,用特征向量x表示,输出是不是猫,用y=0或1表示。二类分类是假设每个样本都被设置了一个且仅有一个标签 0 或者 1。

多类分类(Multiclass classification): 表示分类任务中有多个类别, 比如对一堆水果分类, 它们可能是橘子、苹果、梨等. 多类分类是假设每个样本都被设置了一个且仅有一个标签: 一个水果可以是苹果或者梨, 但是同时不可能是两者。

多标签分类(Multilabel classification): 给每个样本一系列的目标标签. 可以想象成一个数据点的各属性不是相互排斥的(一个水果既是苹果又是梨就是相互排斥的), 比如一个文档相关的话题. 一个文本可能被同时认为是宗教、政治、金融或者教育相关话题。

多分类问题与二分类问题关系

首先,两类问题是分类问题中最简单的一种。其次,很多多类问题可以被分解为多个两类问题进行求解(请看下文分解)。所以,历史上有很多算法都是针对两类问题提出的。下面我们来分析如何处理多分类问题:

直接分成多类

一对一的策略

给定数据集D这里有N个类别,这种情况下就是将这些类别两两配对,从而产生N(N?1)2个二分类任务,在测试的时候把样本交给这些分类器,然后进行投票。

一对其余策略

将每一次的一个类作为正例,其余作为反例,总共训练N个分类器。测试的时候若仅有一个分类器预测为正的类别则对应的类别标记作为最终分类结果,若有多个分类器预测为正类,则选择置信度最大的类别作为最终分类结果。

多标签问题与二分类问题关系

面临的问题:?的标签数目不是固定的,有的有一个标签,有的有两个标签,但标签的种类总数是固定的,比如为5类。

解决该问题:?采用了标签补齐的方法,即缺失的标签全部使用0标记,这意味着,不再使用one-hot编码。例如:标签为:-1,1,1,-1,1 ;-1表示该类标签没有,1表示该类标签存在,则这张的标签编码为:

0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1

2.如何衡量损失?

计算出一张各个标签的损失,然后取平均值。

3.如何计算精度

计算出一张各个标签的精度,然后取平均值。

该处理方法的本质:把一个多标签问题,转化为了在每个标签上的二分类问题。

损失函数的选择问题

基于逻辑回归的二分类问题

对于logistic回归,有:

逻辑回归有以下优点:

它的输入范围是?,而之于刚好为(0,1),正好满足概率分布为(0,1)的要求。我们用概率去描述分类器,自然比单纯的某个阈值要方便很多;

请点击输入描述

它是一个单调上升的函数,具有良好的连续性,不存在不连续点。

对数损失函数(logarithmic loss function) 或对数似然损失函数(log-likehood loss function) 。

逻辑回归中,采用的则是对数损失函数。根据上面的内容,我们可以得到逻辑回归的对数似然损失函数cost function:

将以上两个表达式合并为一个,则单个样本的损失函数可以描述为:

这就是逻辑回归最终的损失函数表达式。

基于 Softmax 的多分类问题

softmax层中的softmax 函数是logistic函数在多分类问题上的推广,它将一个N维的实数向量压缩成一个满足特定条件的N维实数向。压缩后的向量满足两个条件:

向量中的每个元素的大小都在[0,1]

向量所有元素的和为 1

因此,softmax适用于多分类问题中对每一个类别的概率判断,softmax的函数公式如下:

请点击输入描述

基于 Softmax 的多分类问题采用的是 log似然代价函数(log-likelihood cost function)来解决。

单个样本的 log似然代价函数的公式为:

其中,表示标签向量的第 i个分量。因为往往只有一个分量为 1 其余的分量都为 0,所以可以去掉损失函数中的求和符号,化简为,

请点击输入描述

请点击输入描述

其中,是向量 y 中取值为 1 对应的第 j个分量的值。

请点击输入描述

交叉熵损失函数与 log 似然代价函数关系 本质一样

有的文献中也称 log 似然代价函数为交叉熵损失函数,这两个都是交叉熵损失函数,但是看起来长的却有天壤之别。为什么同是交叉熵损失函数,长的却不一样呢?

请点击输入描述

因为这两个交叉熵损失函数对应不同的最后一层的输出。第一个对应的最后一层是 sigmoid,用于二分类问题,第二个对应的最后一层是 softmax,用于多分类问题。但是它们的本质是一样的,请看下面的分析。

首先来看信息论中交叉熵的定义:

请点击输入描述

交叉熵是用来描述两个分布的距离的,神经网络训练的目的就是使 g(x) 逼近 p(x)。

sigmoid + 交叉熵

先看看 sigmoid 作为神经网络最后一层的情况。sigmoid 作为最后一层输出的话,那就不能吧最后一层的输出看作成一个分布了,因为加起来不为 1。现在应该将最后一层的每个神经元看作一个分布,对应的 target 属于二项分布(target的值代表是这个类的概率),那么第 i 个神经元交叉熵为

其实这个式子可以用求和符号改写,

其中,

请点击输入描述

Softmax + 对数似然

现在来看 softmax 作为神经网络最后一层的情况。g(x)是什么呢?就是最后一层的输出 y 。p(x)是什么呢?就是我们的one-hot标签。我们带入交叉熵的定义中算一下,就会得到:

请点击输入描述

交叉熵损失函数与 log 似然损失函数的总结

注意到不管是交叉熵损失函数与 log 似然损失函数,交叉熵损失函数用于二分类问题, log 似然损失函数用于多分类,但是对于某一个样本只属于一个类别,只有一个标签。如果用 one-hot 编码样本的标签那么,对于标签向量只有一个分量的值为 1 其余的值都为 0。

所以不管是交叉熵损失函数与 log 似然损失函数,都可以化简为,

请点击输入描述

其中,是向量 y 中取值为 1 对应的第 j?个分量的值。这两个长的不一样的损失函数实际上是对应的不同的输出层。本质上是一样的。

我的建议是,采用?Kears?中的命名方法,对于二分类的交叉熵损失函数称之为?“二分类交叉熵损失函数(binary_crossentropy)”?,对于多分类的交叉熵损失函数称之为?“多类别交叉熵损失函数(categorical_crossentropy)”。

在 Kears 中也有提示(注意: 当使用categorical_crossentropy损失时,你的目标值应该是分类格式 (即,如果你有10个类,每个样本的目标值应该是一个10维的向量,这个向量除了表示类别的那个索引为1,其他均为0)。 为了将 整数目标值 转换为 分类目标值,你可以使用Keras实用函数to_categorical:)

多标签分类 + 二分类交叉熵损失函数

多标签问题与二分类问题关系在上文已经讨论过了,方法是计算一个样本各个标签的损失(输出层采用sigmoid函数),然后取平均值。把一个多标签问题,转化为了在每个标签上的二分类问题。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)