机器学习数学基础-信息论

线代专栏:https://zhuanlan.zhihu.com/p/30191876

概率统计:https://zhuanlan.zhihu.com/p/30314229

优化(上):https://zhuanlan.zhihu.com/p/30383127

优化(下):https://zhuanlan.zhihu.com/p/30486793

信息论及其他:https://zhuanlan.zhihu.com/p/30383356

掌握机器学习数学基础之信息论及其他[完结篇](重点知识)

闲话后面说,下面开始分节讲述:

  1. 信息熵
  2. 条件熵
  3. 相对熵 (KL散度)
  4. 互信息
  5. 几种常用的距离度量
  6. 图论
  7. 树论

信息熵

信息熵:也叫香农熵(信息论之父——克劳德·香农,在 1948 年提出“ 信息熵解决了信息的度量问题),就是用来衡量信息量的大小。熵这个字出自与热力学,表示系统混乱的程度,在信息论中我们用信息熵来表示信息的大小。简单理解信息的不确定性越大,信息熵就越大,信息的不确定性越小,信息熵也就越小。

嗯,有点抽象,那就来结合例子来理解:–-以下例子(稍稍改动)来自《数学之美》(是本好书)。

假设我错过了某年的世界杯比赛,现在要去问一个知道比赛结果的朋友“哪支球队最终获得世界杯冠军”?他很不要脸的要求我猜,猜完会告诉我是对还是错,但我每猜一次就要给他一块钱。那么我需要付给他多少钱才能知道谁是冠军?我可以把球队编号,从1到32,然后问“冠军的球队在1-16号中吗?”。假如他告诉我对了,我就问“冠军的球队在1-8号中吗?”。如果他告诉我不对,我就自然就知道冠军队在9-16号中。这样我只需要猜5次就可以知道哪支球队是冠军了。所以,“谁是世界杯冠军”这个问题的答案的信息量只值5块钱。

而香农用“比特”(bit)来作为信息量的单位。像上边“谁是世界杯冠军”这个问题的答案的信息量是5比特。如果是64支球队,“谁是世界杯冠军”这个问题的答案的信息量就是6比特,因为我还要多猜一次。

对足球了解的朋友看到这有疑问了,他觉得他不需要5次来猜。因为他知道巴西,西班牙,德国等这些强队夺冠的可能性比日本,韩国等球队大的多。所以他可以先把强队分成一组,剩下的其它队伍一组。然后问冠军是否在夺冠热门组里边。重复这样的过程,根据夺冠的概率对剩下的候选球队分组,直至找到冠军队。这样也许三次或四此就猜出结果了。因此,当每支球队夺冠的可能性(概率)不一样时,“谁是世界杯冠军”这个问题的答案的信息量比5比特少。

而香农指出,“谁是世界杯冠军”这个问题的答案的信息量是:
H = -(p_1*log(p_1) + p_2 * log(p_2) + ... + p_3 * log(p_3)) , 其中log是以2为底数的对数,以下本文中的log都是以2为底的对数,下边不再特别说明。这就是衡量信息量多少的公式,它的单位是比特。之所以称为熵是因为它的定义形式和热力学的熵有很大的相似性。

如果一个随机变量X的可能取值为X=\left\{ x_{1},x_{2} ,.....,x_{n} \right\},其概率分布为P\left( X=x_{i} \right) =p_{i} ,i=1,2,.....,n,则随机变量 X 的熵定义为H(X)

H\left( X \right) =-\sum_{i=1}^{n}{P\left( x_{i} \right) logP\left( x_{i} \right) } =\sum_{i=1}^{n}{P\left( x_{i} \right) \frac{1}{logP\left( x_{i} \right) } }

扫描二维码关注公众号,回复: 4850894 查看本文章

给出二元信源信息熵图:

可以看到,在当 X 只有两个取值,且在 p_1=p_2=0.5 时(意味着在二元中概率事件发生概率相等的情况下)的时候熵值是最大的,也就是说这个时候是是确定性最低的,最混乱的。(延伸到在足球的例子中的意思就是每个队的获胜概率都相等的时候,那个时候信息量(熵)最大,你就越难猜那个队会赢)

条件熵

条件熵:表示在已知第二个随机变量 X 下第一个随机变量 Y 信息熵的大小。条件上用 H(Y|X)表示

咦,看到上面式子就想起条件概率,其实,条件熵可以类比条件概率,他表示:在随机变量 X 的基础上我们引入随机变量 Y,假设 Y 和 X 有一定的关系。那么 Y 的信息熵会相对减小。

条件熵还是很好理解的吧!不理解吗?还是结合足球的例子,比如你知道其中一个队是铁定不会赢的了,那你要现在要猜那个队会赢,那个难度就下降了是吧,因为信息熵下降了!

再讲下联合熵:两个随机变量X和Y的联合分布可以形成联合熵,定义为联合自信息的数学期望,它是二维随机变量XY的不确定性的度量,用H(X,Y)表示:

H\left( X,Y \right) =-\sum_{i=1}^{n}{\sum_{j=1}^{n}{P\left( x_{i} ,y_{j} \right)} logP\left( x_{i},y_{j} \right) }

为什么突然又说到联合熵?因为:实际上,熵、联合熵和条件熵之间存在关系:H\left( Y|X \right) =H\left( X,Y\right) -H\left( X \right)

而知道知道条件熵之后,信息增益就很简单了,信息增益:就是: g(X,Y) = H(X) – H(X|Y) ,表示的就是条件熵和原来熵的差值。(注意:信息增益也是相对熵的一个别称,指用来描述两个概率分布X和Y差别的非对称性的度量,下面讲相对熵)

上面是信息论的基础,而信息增益也是在机器学习中有很多的应用,比如在ID3算法中,衡量最佳特征的标准就是信息增益。

相对熵 (KL散度)

KL散度:是两个概率分布P和Q差别的非对称性的度量。 KL散度是用来 度量使用基于Q的编码来编码来自P的样本平均所需的额外的比特个数。这里肯定不易理解,没事,看下面例子, 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。

而KL散度的计算公式如下:

∑P(x)[log(1/Q(x))]表示使用原来的编码方式得到的比特数的期望 log(1/Q(x)) 表示使用原来的编码方式, x 出现1次的期望编码长度p(x)表示现在x出现的概率

注意KL-divergence始终是大于等于0的。当且仅当两分布相同时,KL-divergence等于0。

例子:举一个实际的例子吧:比如有四个类别,一个方法A得到四个类别的概率分别是
  0.1,0.2,0.3,0.4  。另一种方法B(或者说是事实情况)是得到四个类别的概率分别是  0.4,0.3,0.2,0.1  ,那么这两个分布的 相对熵为: KL-Distance(A,B)=0.1*log(0.1/0.4)+0.2*log(0.2/0.3)+0.3*log(0.3/0.2)+0.4*log(0.4/0.1)
其中  KL-Distance()>=0. 而且从上面可以看出, KL散度是不对称的。即KL-  Distance(A,B)!=KL-Distance(B,A) KL散度是不对称的。
注意:在神经网络中,很多时候需要衡量两个分布的差异,就将一个看成真实分布,一个表示模型输出分布,这样来训练模型,也就是下面的交叉熵:

交叉熵:用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。而交叉熵和相对熵的关系如下:

相对熵=交叉熵-信息熵:

注意:很多时候“相对熵”也就称为“交叉熵”,虽然公式上看 相对熵=交叉熵-信息熵,但由于真实分布p是固定的,D(p||q)由H(p,q)决定。当然也有特殊情况,彼时2者须区别对待。

相对熵和交叉熵也是一个非常重要的概念,比如机器学习中有个交叉熵损失函数,用了交叉熵的重要性质,比如在GAN模型中,KL散度也是解释GAN原理的重要基础。

互信息

测量训练数据中x与y的相关度。是度量两个事件集合之间的相关性(mutual dependence)的标准。意义就是:由于事件A发生与事件B发生相关联而提供的信息量。而在机器学习中,该算法可能会使得我们选择的都是与标签y强相关的特征值,从而进行特征选择,数学公式:

应该不难理解,但这里有一个问题:
问:《数学之美》 上面 互信息 的公式是: I(X;Y)=H(X)-H(X|Y) ;又看到 《统计学习方法》 上有一个 信息增益 的公式: G(D,A)=H(D)-H(D|A) 。这不是一样吗?难道互信息就是信息增益?
答:一般IG(信息增益)是指KL散度(相对熵) 但在Desicion Tree(决策树)的IG一般是指KL散度的期望,然后正好就是互信息了,其实我想就简单理解并记住计算互信息的公式,然后在机器学习中信息增益是一种特殊的情况,就是它是KL散度的期望。 先看p对q的相对熵为

然后是KL散度的期望=互信息

互信息在特征选择时也有重要的作用,总之, 对于信息论,重要的是理解,区分和应用。

几种常用的距离度量

设有两个n维变量A=\left[ x_{11}, x_{12},...,x_{1n} \right]B=\left[ x_{21} ,x_{22} ,...,x_{2n} \right],则下面可以定义一些常用的距离公式:

曼哈顿距离:曼哈顿距离也称为城市街区距离,出租车距离,不好理解看下图,数学定义如下:

d_{12} =\sum_{k=1}^{n}{\left| x_{1k}-x_{2k} \right| }

欧氏距离:欧氏距离其实就是L2范数,或者说简单理解为直线距离,数学定义如下:

d_{12} =\sqrt{\sum_{k=1}^{n}{\left( x_{1k} -x_{2k} \right) ^{2} } }

如图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即 d(i,j)=|x_i-x_j|+|y_i-y_j| 。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距离。

闵可夫斯基距离:从严格意义上讲,闵可夫斯基距离不是一种距离,而是一组距离的定义,或者说,它是距离的推广:

d_{12} =\sqrt[p]{\sum_{k=1}^{n}{\left( x_{1k} -x_{2k} \right) ^{p} } }

当p=1时,就是曼哈顿距离;当p=2时,就是欧式距离。

切比雪夫距离:切比雪夫距离就是L_{\varpi},即无穷范数,数学表达式如下:

d_{12} =max\left( \left| x_{1k}-x_{2k} \right| \right)

夹角余弦:夹角余弦的取值范围为[-1,1],可以用来衡量两个向量方向的差异;夹角余弦越大,表示两个向量的夹角越小;当两个向量的方向重合时,夹角余弦取最大值1;当两个向量的方向完全相反时,夹角余弦取最小值-1。机器学习中用这一概念来衡量样本向量之间的差异,其数学表达式如下:

cos\theta =\frac{AB}{\left| A \right| \left|B \right| } =\frac{\sum_{k=1}^{n}{x_{1k}x_{2k} } }{\sqrt{\sum_{k=1}^{n}{x_{1k}^{2} } } \sqrt{\sum_{k=1}^{n}{x_{2k}^{2} } } }

上面常见的距离度量方式是有必要记住的,比如在机器学习中的聚类,在推荐系统,都起着其重要的作用。

图论

图论是数学的一个分支,而在计算机科学中,它是一种数据结构,它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。而图论是一种表示 "多对多" 的关系,下面主要讲述图的概念,表达和搜索方式:

一些概念:

  • 其中带箭头的称为有向图,否则称为无向图.
  • 如果一个图的任意两个结点之间有且只有一条边,则称此图为无向完全图,若任意两个结点之间有且只有方向相反的两条边,则称为有向完全图.
  • 是针对结点来说的, 又分为出度入度,对于有向图来说,出度就是指以这个结点为起始的边的条数(箭头向外),入度则是以这个点为终点的边的条数(箭头向内).
  • 是指一条边所附带的数据信息,比如说一个结点到另一个结点的距离,或者花费的时间等等都可以用权来表示。

图的表示:

  • 邻接矩阵 :如下图,对于N个点的图,需要N×N的矩阵表示点与点之间是否有边的存在。这种表示法的缺点是浪费空间,尤其是对于N×N的矩阵是稀疏矩阵,即边的数目远远小于N×N的时候,浪费了巨大的存储空间。

  • 邻接链表:如下图,对于任何一个node A,外挂一个邻接链表,如果存在 A->X这样的边,就将X链入链表。 这种表示方法的优点是节省空间,缺点是所有链表都存在的缺点,地址空间的不连续造成缓存命中降低,性能有不如临界矩阵这样的数组。

邻接矩阵和链表对比:

  1. 邻接矩阵由于没有相连的边也占有空间,因此存在浪费空间的问题,而邻接链表则比较合理地利用空间。
  2. 邻接链表比较耗时,牺牲很大的时间来查找,因此比较耗时,而邻接矩阵法相比邻接链表法来说,时间复杂度低。

图的遍历

  • 1. 深度优先遍历:(Depth First Search, DFS),基本思路:深度优先遍历图的方法是,从图中某顶点 v 出发
  • 访问顶点 v
  1. 从 v 的未被访问的邻接点中选取一个顶点 w,从 w 出发进行深度优先遍历
  2. 重复上述两步,直至图中所有和v有路径相通的顶点都被访问到

2. 广度优先搜索:(Breadth First Search, BFS)

广度优先搜索,可以被形象地描述为 "浅尝辄止",它也需要一个队列以保持遍历过的顶点顺序,以便按出队的顺序再去访问这些顶点的邻接顶点。

实现思路:

  1. 顶点 v 入队列
  2. 当队列非空时则继续执行,否则算法结束
  3. 出队列取得队头顶点 v;访问顶点 v 并标记顶点 v 已被访问
  4. 查找顶点 v 的第一个邻接顶点 col
  5. 若 v 的邻接顶点 col 未被访问过的,则 col 继续
  6. 查找顶点 v 的另一个新的邻接顶点 col,转到步骤 5 入队列,直到顶点 v 的所有未被访问过的邻接点处理完。转到步骤 2

深度及广度优先算法的总结:

  • 深度优先就是,从初始点出发,不断向前走,如果碰到死路了,就往回走一步,尝试另一条路,直到发现了目标位置。这种不撞南墙不回头的方法,即使成功也不一定找到一条好路,但好处是需要记住的位置比较少。
  • 广度优先就是,从初始点出发,把所有可能的路径都走一遍,如果里面没有目标位置,则尝试把所有两步能够到的位置都走一遍,看有没有目标位置;如果还不行,则尝试所有三步可以到的位置。这种方法,一定可以找到一条最短路径,但需要记忆的内容实在很多,要量力而行。
  • 但总之,两种算法都是盲目搜索的方式,在机器学习中,也有其他很多带先验的更智能的查询方式,可了解。
以上的知识是数据结构的基础,其实人工神经网络就是一种图,我们要理解其搜索方式和一些概念

树论

树状图是另一种数据结构,它是由 n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树,而在数据结构中的特点,也是表示一对多(链表是一对一,图是多对多)的关系

最上面;树根;中间:树枝;最下:树叶

二叉树:树的一种。其特征是,除了叶以外的结点,都有两个子。(叶就是在它和根的路径上,没有比他更远的结点了,也可以理解为,只有一个结点和它相连,并且它不是根,那么他就是叶),简单来说,就是在有根树的基础上,一个结点,往更深的地方延伸时,最多只能延伸出来零个,或者两个结点(只能是0个或者2个,不能是1个。如果是0个就是叶,否则就是结点),那么他就是二叉树。(注意:二叉树是一种比较重要的树,在机器学习中有广泛的应用)

例如:图中延伸出0个结点(叶)有:E,G,H,I,J,K,而延伸出2个结点的有:A,B,C,D,F

二叉树的遍历方法主要有三种:

①前序遍历;(先访问根结点,再访问子结点)

②后序遍历;(先访问子结点,再访问根结点)

③中序遍历(只适用于二叉树)

完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树,具体可以看下图:

树论在决策树,随机森林等和树有关的模型中都有应用,特别地,最近周志华教授发表的深度森林也是应用了树的结构,在当下神经网络过热的情况下给出了另一种选择,意义重大!

关于这个系列的总结:

  • 首先是我能力有限,写的内容可能不够全面,若之后发现有其他缺漏,会立即添加。
  • 然后是文章写的方式,技术文,我觉得要讲究通俗,生动,有深度,受启发。可能这个系列写下来,有很多问题,我也在学习怎么写好可以达到以上要求的文章。
  • 最后是刚开始写文章,感谢越来越多的你们的支持,当然写完这个系列会有下一个系列,虽主要任务是是发论文,但我也会把我知道机器学习知识的慢慢写下来,有什么建议和意见,真诚邀请你们提出(比如你们觉得下一个系列有什么要写的?比如我的文章那些地方可以改进?)。

最后的最后,喜欢就点个赞吧~\(≧▽≦)/~,让更多的人受益,让我有更大的动力更新文章。

猜你喜欢

转载自blog.csdn.net/u012968002/article/details/84402470