机器学习中的熵
开篇
熵这个词在机器学习中出镜率颇高,机器学习中使用的熵基本是信息熵相关的一些熵,这边博客我会聊到决策树和逻辑回归,至于最大熵,后期我会在这篇博客上补上,当然,我复习到其他机器学习算法用到熵的概念的话,我也会在这篇博客上续上。
熵的定义
什么是熵呢,它为什么又要那么定义呢?熵,就感性的理解来说,它是描述混乱程度的量。什么叫混乱程度呢,我们可以联系到概率上,如果一件事件各个可能性都有,那么说明它就越是混乱,它的不确定性就是越大的。还有一种角度去理解,如果一个事件是确定发生的,那么说明它的熵很小,熵小往往代表着没什么信息量,不需要太多的消耗去处理它。信息论中的编码长度就是由熵来决定的。
不扯远了,讲到这里,大家应该会觉得熵应该是和概率存在某种联系的,而这种联系是成反比的,那么这样的呀,大家很容易想到,我们就干脆把熵定义成,那样我们不就成了反比嘛,概率越大,熵越小,包含的信息量越小。这样看似合理,但却存在一定的问题。当同时有两件事情发生的时候,假设它们是相互独立的,那么我们的熵就会表示成,很明显,这样是不合常理的,熵代表的混乱程度和信息量的大小,对于独立事件,它们的程度应该是相加的而不是相乘的。所以上面的定义是不合理的。为了满足相加和成反比的性质,我们首先考虑的应该是指数函数,于是有了我们熵的定义:
大家在看这个式子的时候,有没有发现和我们平时看到的熵的定义不要一样,总感觉少了点什么,没错,前面少概率,我们常见到的熵的定义是信息熵,为什么叫信息熵呢,字面上可以理解为它代表事件包含的信息量,回到我们信息论里面的熵,代表就是编码长度,也就是我们编码一些字符所需的最短长度。这里的信息熵你可以理解为各种发生可能性熵的期望(或者说均值,当然这样有点偏颇啦)。它其实就是一个概率分布的熵的期望值,数学表达形式如下:
决策树中的熵
下面讲一下熵在机器学习中最基本的应用,也就是周老师一直热衷着的决策树,决策树是解释性极强的机器学习算法,不像神经网络。这边我不会过多的贴出公式,希望大家有时间可以带着我的描述去看看决策树的公式,想想是不是那么一回事,以后我会具体的讲机器学习算法。
简单描述 一下决策树是什么?决策树本身是一个分类模型,给你一大堆数据,你需要将他们一一分类,这个分类任务可以是多分类也可以是二分类,那么我们要怎么分类呢。我们需要根据他们的属性来分类,也就是我们机器学习中讲的特征,一个特征有很多的取值,按照这些取值我们就可以将这些数据分成一些类别,当然我们根据特征值分出的类别可能跟真实的类别相差甚远,当然也有可能一下子就分得很好了,这事不能纯看运气,得看特征的好坏,好的特征分得准呀!举个简单的例子,我们判断一个人力气的大小,用性别判断就比用长相这种特征来判断靠谱的多。那么我们要怎么判断一个特征好坏呢,这时我们的熵就闪亮登场了。
回忆一下我们熵的概念,熵代表的是混乱程度,一个特征如果能够让一堆数据的熵大幅的减小,那么它就是好的特征,我们应该要优先去用这个特征去分类。这便是我们决策树的核心思想,而熵减的幅度就是我们书中描述的信息增益。但是使用信息增益去划分却不是最合适的,试想一下,如果一个特征有超级多的取值,那么它每一个取值可能对应的分类只有一个,那么问题就来了,我们总共10个数据,2个类,我们的某个特征一下子取了10个值,每个值对应一个一个数据,它的熵减很彻底呀,但是这样根本分不出我们想要的类别呀。信息增益是偏向于特征取值多的特征的,所以后来我们的科学家有引入了信息增益率,用来抑制取值多的特征。
交叉熵
OK,下面我们开始另外一个话题,交叉熵,交叉熵从字面上看,好像是有两个熵交叉在一起,确实如此,这边我又要扯一下信息论里面的知识了,比如说我们要用01存储字符:A、B、C、D这四个字符,我们不知道这四个字符真实的分布,那么我们只能假设它们出现的概率相对,也就是说我们假设了它的分布为q,那样我们就能算出它的一个编码长度,但是这显然是比真实的要大的,比如我们的C根本就不会出现,那么我们根本不需要这么大的编码长度。我们的交叉熵就是按照不真实分布q来编码样本所需的编码长度的期望为:
p是我们真实的分布,这时候大家或许心里就有疑惑了,既然是假设了分布,为什么去编码长度的时候还要用真实的分布呀。那是因为我们的样本还是来自于真实的样本数据的,这也是被称之为交叉熵的原因。那么交叉熵可以用来做什么呢?交叉熵作为损失函数可以衡量两个分布的相似性。
条件熵
这边补上最大熵模型的内容,最大熵模型其实就是让一个条件熵最大的一个模型,它主要的目的就是在一定的约束条件下求解一个条件概率分布,使得这个条件概率分布的熵最大。我们先来看看条件熵的具体定义。其实它和信息熵的基本定义是一致的。
当大家一开始看见这个公式的时候或许会有疑惑,为什么不是这样的式子,却要乘上一个,这和我们的信息熵的格式有点不太统一。一开始我也是有类似的疑惑的,但是你仔细看就会发现不过是某个取值下面的信息熵,而我们要求的是在所有变量下一个总体的信息熵,我们依旧可以把信息熵看作一个期望,而条件熵这么定义就再正常不过了。
下面我给出最大熵模型的的数学表现形式:
这边顺带扯一句,判别模型在求,而生成模型在求。