本系列是根据《pattern recognition and machine learning》一书写的,算是读书笔记?算是吧。因为是从自己角度出发,所以其实很大程度上自己看得懂,估计别人看不懂,还望见谅。

数学符号约定:

该书意在能够以最小的数学范围来解释整本书,不过在微积分、现代、概率论上还是不可避免的用到,为了方便概念的理解,所以本书在力求数学上的严谨的同时更多的是从不同的参考资料中将数学符号都能够统一起来。向量表示成小写黑体罗马字母例如,所有的变量默认是列向量,所以关于向量的转置才是行向量。大写黑体罗马字母表示矩阵,例如:表示一个有着M个元素的行向量,对应的列向量为其转置形式。大小的单位矩阵表示为,其中对角线位置上值为1,其他为0。表示为|f(x)/g(x)|,其中x趋于无穷大。例如g(x)=3*x*x+2,那么g(x)=O(x*x)。并且在后面中如果有N个D维的向量,那么将其组合成一个数据矩阵(数据集),在该矩阵中行表示样本(观察值),列表示特征。

一、引言

对于 机器学习来说,假设有个手写数字数据集:N个数字图,每个元素为784的向量(参考MNIST数据集),每个图对应着一个标签。在训练阶段,我们想通过模型来对训练数据进行拟合。在模型训练好之后,能够判别一个在训练阶段未出现的新的样本的能力叫做泛化(generalization)。而且因为我们使用的训练数据相比较于所有可能的输入向量来说,都只是一小部分(即你在怎么增加训练集,都无法收集世上所有可能的数据),所以在模式识别中,泛化也是个中心目标。

对于大部分实际的应用中,元素的输入变量都会进行预处理,转化成变量的新空间,在该空间中,模式识别问题能够更容易的解决。该预处理的过程也叫做特征提取的过程。不过记得对于新的测试数据来说,需要使用与对训练数据一样的预处理过程。当训练数据中有样本的标签的时候,叫做有监督学习,当没有的时候叫做无监督学习。如果最后是想把样本划分成几个离散的类别,叫做分类问题。如果说最后得到的结果是有着一个或更多连续的变量,那么叫做回归问题。在无监督学习中,是为了发现相似样本的不同分组,这也叫做聚类,或者说决定输入空间中数据的分布情况,也叫做密度估计(density
estimation)。从一个高维空间中将数据投影到2或者3维空间中,这是为了可视化的目的。

增强学习(sutton barto,1998)是关于寻找合适的行为在后期能使得奖励最大化。也就是相对于有监督学习来说,这里给定的输出样本不是最优的(我们人为给定的数据样本就假设是在该任务上最优的样本),是需要通过一系列的测试和错误来修正的。典型的使用就是首先在基于一个状态序列和动作的情况下,需要与外界环境进行交互,从而改变学习过程。在许多情况下,当前所做的行为不止会影响当前的奖励,还会影响后续的所有行为。比如1994年tesauro的象棋(深蓝也该是吧),还有andrew ng 之前做的无人机就是个典型的例子。有兴趣的可以去看看ng之前的论文。

在本书的引言部分,将会介绍三个重要的工具:概率论、决策论、信息论。这三个将会影响到你对本书后续的理解,而且对于机器学习的理解来说,也是至关重要的。

1.1简单的例子:多项式曲线拟合

假设我们有N个变量x的观察值,为,对应的标签(该样本是通过函数生成,然后加上一些高斯噪音得到的)

我们的目标就是对于一个新的样本来判别它的标签。在1.2部分的概率论将会以一种严谨的方式来表示这种不确定性。在1.5部分的决策论可以利用概率表征来按照合适的标准决定预测的结果。

当前来说,我们想要使用多项式来拟合该数据

                     
             (1.1)

从该模型可以看出,对于输入x来说,其实一个非线性模型,而对于系数w(将系数表示成矩阵的形式)来说,却是个线性模型。为了能够拟合,我们需要对误差函数进行最小化,这里选择的误差函数为:

                                                                    (1.2)

我们可以通过在尽可能小的情况下选择的值来解决该曲线拟合的问题,因为该误差函数是一个关于系数矩阵二次函数,所以它的导数是线性的,所以误差函数的最小值是一个唯一解,表示成。接下来的问题就是选择多项式的阶数了,这被称之为模型比较,或者叫做模型选择问题。至于为什么选择这个误差函数是因为其平方根(root-mean-square,RMS):

这里除以N是为了让不同size的数据集能够在相同的范围内比较,而开平方是为了保证在和目标变量t一样的尺度一样的单位下进行比较。

(勘误:M=3)

上面是不同的阶数的多项式下的系数最优值,从书上的几个图(这里不贴了)看出,阶数越高,拟合的越好,不过在阶数过高的情况下会造成过拟合的现象,这里的一个解决方法就是增加数据集的数据量来减少过拟合问题(就是为了保证拟合准确度,阶数需要高点,这时候为了保证不过拟合,就需要增加样本),

一个粗略的标准是所需要的样本应该是参数个数的5或者10倍(所以总的来说,我们需要依据问题的复杂程度来决定使用的模型的复杂程度)。从上面的最小平方方法中寻找模型参数的方式可以表示成最大似然的一个特殊的情况。而过拟合问题可以理解成最大似然的一个通用的特性。通过使用贝叶斯方法,过拟合问题可以避免掉,而且从贝叶斯观点来说,可以使用远超样本量的参数数量的模型,而且没有什么难度,因为在贝叶斯模型中,参数数量可以有效的自动适应于数据集的size。这种技术叫做正则化,也就是在误差函数后面增加一项惩罚项来防止系数过大。最简单的惩罚项为:

这里,而且系数控制着正则化项相对于平方误差和之间的相关重要性。不过通常来说第一个系数是不放入这个正则化中的,因为它的引入会导致结果依赖于目标变量的原点的选择(hastie
et al 2001),所以要引入的话需要使用它自己的正则化系数。在统计学中这种正则化叫做收缩方法,因为它能减少系数的值。二次正则化这种特殊的情况叫做边缘回归(岭回归)(ridge regression)(hoerl kennard 1970),在神经网络中,这叫做权重衰减。

可以看出现在可以用来控制模型的复杂程度,所以可以用来影响过拟合的程度,上图中第一个是等于没有权重惩罚项,所以参数是很大的,容易过拟合。

在1.3部分中,会介绍模型复杂度问题,所以在实际实践中,如果我们想要通过使用最小化误差函数的方法,那我们需要找到一种合适的方法来决定模型复杂度的值(也就是参数),最简单的一种方法就是将训练集在分出一部分数据作为验证集(validation set,或者hold-out set),通过验证集来优化模型的复杂度(阶数和其超参数)。不过在很多情况下,这被证明是对训练数据的一种浪费,所以我们需要寻找更好的方法。

上图是在阶数为9的时候改变超参数的误差函数图,可以看出随着超参数的变大,在训练集上的误差在变大,可是在测试集上的误差在变小,当然最后都在变大(这是因为惩罚的太厉害,模型已经无法拟合任何一个数据集),所以当这两个开始趋于平稳的这个阶段的超参数才是我们所需要选择的超参数,即中间平行的那部分。

1.2 概率论

模式识别中一个关键的概念就是不确定性,它涉及到测量过程中的噪音,和数据集的有限size。概率论可以提供一个在量化和操作不确定性的统一框架。结合决策论,可以在信息不完全或者模糊的情况下做出最优的预测。对于贝叶斯来说,最重要的就是两个规则:

1.2.1概率密度

对于连续变量(离散的不说了)来说,如果实数变量x 落在区间,而且那么p(x)被称之为基于x的概率密度,所以x落在区间(a,b)上的概率就是:

而累积分布函数为:

其中

1.2.2期望与方差

在概率中一个最重要的操作就是对函数的加权平均。基于概率分布下的某个函数的均值被称之为该函数的期望。对于离散的变量来说,其期望为:

对于连续变量来说,其期望为:

另外,如果给定有限的N个从概率分布或者概率密度上抽取的样本,那么该期望为:

表示函数f(x,y)关于x的期望。注意这时候该期望是关于y的函数(因为求出了关于x的期望之后,它就成了常量了,而y还是变量)。所以关于一个条件分布的条件期望为:

1.2.3贝叶斯概率

之前的部分都是基于随机、可重复事件的频率的,所以这一类也叫做古典(classical)或者频率(frequentist)概率。现在使用贝叶斯观点,来量化不确定性事件的概率。不过使用概率来表示不确定性不是一个特意为之的选择,因为如果我们想要遵循常识的基础上进行理性的推理,这是不可避免的。1946年Cox表示如果用数值来表示置信度(degrees of beliefs),然后用一组简单的公理用来编码这样置信的常识性属性,这样的操作其实就相当于概率的加法规则和乘法规则。

根据前面的多项式曲线拟合的例子,我们先得到关于的假设,然后在观察数据,所以我们可以得到一个先验概率分布。观察到的数据的影响可以通过条件概率来表示。显式的表示成贝叶斯原理,形式为:

                                                                          (1.2.3-1)

也就是在基于观测到的数据的基础上评估中的不确定性,即得到了后验概率。其中公式中的是为了评估观测到的数据集的,可以被视为关于参数向量的函数,也被称之为似然函数。它表示为在不同的参数向量的集合下观测到的数据集的可能性是多少。注意这个似然不是基于的概率分布,所以它的关于的积分(必须)不等于1。

在基于似然的定义下,我们可以将贝叶斯理论写成如下形式:

所有的这些数值都可以认为是关于的函数。在公式(1.2.3-1)的分母是一个归一化常量,用来确保等号左边的后验分布是一个有效的概率密度而且积分结果为1.而且,因为公式(1.2.3-1)的两边的积分都是关于的,所以可以将贝叶斯理论中的分母写成先验分布和似然函数的形式:

在贝叶斯和频率(frequentist)两个学派中,似然函数都是占据着中心重要地位的。不过在这两种不同学派中使用的方式确是截然不同的。在frequentist中,被认为是一个固定的参数,它的值是通过某些“评估器(estimator)”来决定的,而误差是通过考虑可能的数据集的分布上通过评估获得的。相比之下,对于贝叶斯学派来说,只有一个单一的数据集(即真实观测到的那个),而且参数中的不确定性可以通过基于的一个概率分布来表示。

广泛使用的frequentist 评估器是最大似然方法。求得似然函数概率最大的时候的,也就是相当于选择某个值使得观测到的数据集合概率最大。在机器学习文献中,负的log似然函数被称之为误差函数,这是因为负的log似然函数严格递减的,所以最大该似然函数其实就相当于最小化这个误差。

在frfequentist中一个决定误差线的方法是bootstrap(efron,1979;hastie 2001),就是在给定数据集的情况下通过利用该数据集的不同子集(也被称为boostrap数据集)来观察不同预测结果的变化。

相比较于贝叶斯方法来说,是很自然的会包含先验知识的,不过这也导致贝叶斯的结果会受到先验的影响,相对来说,任何一个有着合理先验的贝叶斯方法导致的结果都是不那么极端的。不过虽然贝叶斯和frequentist之间都有各种驳斥,可是没有唯一的贝叶斯,也没有唯一的frequentist,都是相互使用的。例如大家认同的贝叶斯的一个弊端是贝叶斯方法的先验分布的选择是基于数学计算的方便而不是根据先验置信的反映得到的。所以主观上的选择会导致选择先验有些困难。减少先验的依赖也被称之为noninformative(非信息)先验。然而这会使得在对比不同模型的时候造成困难,而且正如上面说的,贝叶斯会受到先验的影响,即坏的先验导致的结果也不是很好。而frequentist评估方法会提供一些解决这类问题的方法,比如在模型对比的时候的交叉验证。

1.2.4高斯分布

常见的高斯分布,细节就不说了,其中方差的倒数,也被称为精确度。(个人:上面的x表示的是变量,而“|” 后面的两个表示的是参数,也就是这是求变量x的概率, )其中:

而对于变量为D维向量(即一个样本为D维)的连续值时,其密度函数为:

其中是一个D*D的矩阵,是对应的行列式。

假设有观测到的N个样本的数据集,其中每个样本是标量变量;这里不同于上面的单个观测数据:向量变量,用来表示。这里假设这N个样本都是基于高斯分布上的互相独立的,即独立同分布(independent
and identically distributed ,i.i.d)。所以他们的联合概率就是边缘概率的乘积:

这可以被认为是关于的函数,也是高斯分布的似然函数。常用的决定概率分布中参数的标准是通过使用观测到的数据集并最大化似然函数的方法。也许这会很奇怪,因为从我们关于概率论的讨论,应该是在给定数据的基础上最大化参数的概率,而不是在给定参数的基础上最大化数据的概率。不过其实,这两种标准都是相互联系的,在1.2.5小节会说道。所以对于未知的参数的值的选取是通过最大化上面这个似然函数得到的,而且使用的是最大化log似然函数,因为log函数是关于参数严格递增的,最大化log函数也就是最大化参数本身。使用log函数不只是为了简化后续的数学分析,而且有助于数值计算,因为大量的小概率的乘积会很容易在计算机上下溢出。所以可以通过转换成log概率的求和方式,所以如下形式:

得到的结果为:

,       

不过可以看出最大似然方法的局限性在于得到的分布的方差是有偏的,而且这和上面多项式曲线拟合中遇到的过拟合问题也有关系。首先最大似然的解是关于数据集的值的函数,通过求取这两个解的期望,得到的就是其无偏估计值:

方差的无偏估计也就是:

如果对于大数来说,前面的N/(N-1)是不需要的,因为数据量够多,不过对于小数据来说,还是需要的。

1.2.5 再看曲线拟合

这小节通过将前面的多项式曲线拟合问题表示成错误最小化的形式。以概率的角度出发朝着全贝叶斯方向来解释错误函数和正则化。上面那个曲线拟合问题的目的就是基于给定的N个输入样本和标签的基础上对新的样本的标签进行预测。可以将标签值的不确定性表示成一个概率分布的形式。在给定新的样本的基础上,假设标签值服从高斯分布,而且该高斯分布的均值等于最上面公式(1.1)的值,所以得到:

                                                                       (1.2.5.1)

这里为了方便和后续章节的统一,定义一个精确度参数来表示分布方差的逆。

上图为给定的基础上标签的高斯条件分布。现在我们使用训练集,并通过最大似然来决定未知的参数。当数据都是从公式(1.2.5.1)中抽样得到的独立同分布,那么似然函数即为:

                                               (1.2.5.2)

和之前的高斯分布一样,通过使用log函数,将上面的转化成:

                     (1.2.5.3)

(个人:每个样本的预测标签作为变量,而真实标签作为其期望值)。因为考虑到多项式的最大似然解,就是其系数,也就是,而且是关于的,所以上面式子右边第二和第三项可以省略。而且对log似然函数进行正数常量的缩放不会影响到关于的最大值的解,所以我们通过将系数替换成。而且最大化log似然函数,就等于最小化负的log似然函数。也就是说最大似然就相当于最小化公式(1.2)的那个平方误差函数的和。所以该平方误差函数的和可以作为基于假设高斯噪音分布的最大似然的结果。

通过使用最大似然来决定高斯条件分布的精确度参数。上面那个式子中关于的最大化为:

                                                (1.2.5.4)

在得到关于的解之后,就可以进行新的样本的标签预测了。因为这是一个概率模型,所以可以表示成关于的概率分布的预测分布形式,而不是简单的点估计,并且可以通过将最大似然参数放入公式(1.2.5.1)中,得到:

                                             (1.2.5.5)

现在往贝叶斯方法更迈进一步,通过引入关于多项式系数的先验分布。为了简化,先来考虑这种形式的高斯分布:

                    (1.2.5.6)

这里是该分布的精确度,而M+1是在基于M阶的多项式的向量中元素的个数。例如这样用来控制模型参数分布的参数,叫做超参数。通过使用贝叶斯理论,关于的后验分布是与先验分布和似然函数的乘积成比例的:

                                              (1.2.5.7)

现在可以通过在给定数据下的最可能的值来作为的值,换句话说也就是最大化这个后验分布就行。这种方法叫做最大化后验(maximum posterior ,MAP),通过对上面这个式子采用log对数,并结合(1.2.5.3)和(1.2.5.6),可以将后验的最大值解释成下面式子的最小值:

(个人:上面这个式子就是先验和似然函数的的高斯分布相乘之后的指数部分,而且因为alpha和beta都是人为给定的超参数,这里的变量是权重,所以指数前面的系数可以省略掉,就得到了这样的一个目的)也就是说最大化后验分布就相当于最小化正则化后的平方误差函数的和,这里正则化参数为

1.2.6贝叶斯曲线拟合

虽然前面引入了一个先验分布,到目前为止仍然是关于的点估计,而不是通过贝叶斯方式处理。在全贝叶斯方法中,使用的就只是概率的加法和乘法规则,也就是需要对所有的的值进行积分。这也就是模式识别中贝叶斯的中心所在。

在前面的曲线拟合问题中,是在给定训练数据和对应目标(标签)以及一个新的测试样本的基础上为了得到测试样本的标签。所以是为了评估预测分布的。这里假设参数都是固定而且提前已知的。那么可以以贝叶斯的方式写成:

                                              (1.2.6.1)

这里是由(1.2.5.2)给出的,而且我们这里忽略了在上的依赖关系。是基于参数的后验分布,可以通过对(1.2.5.7)的右边进行归一化得到。在第3章第3节中可以看到这个后验分布其实就是一个高斯分布。同样的,(1.2.6.1)的积分得到的预测结果其实就是下面的这种形式的高斯:

                                                                 (1.2.6.2)

这里均值和方差为:

                                                                 (1.2.6.3)

其中矩阵S为:

(该公式第二个x应该是xn的,在本书勘误表里面有注明)

这里 I 是一个单元矩阵,向量的定义为:。注意到(1.2.6.2)的预测分布的方差和均值都是依赖于的,并且(1.2.6.3)中第二个式子的第一项表示的是预测值
t 的不确定性,这是因为在目标(标签)变量上有噪音,这一项其实就是在(1.2.5.5)中的最大似然预测分布上的。然而第二项是参数中的不确定性,也是使用贝叶斯处理得到的结果。

上图就是用贝叶斯方式处理的多项式曲线拟合的预测分布结果,这里的M=9,而且固定的参数11.1(也就是一直的噪音方差),上图中红曲线为预测分布的均值,红色区域为均值的标准偏差。

1.3模型选择

之前的例子中使用的是最小平方方法,通过一个最优的多项式阶数能得到最好的泛化。多项式的阶数控制着模型中的自由参数的数量,因而也控制着模型的复杂度。加上正则化后的最小平方,正则化项的系数同样控制着模型的有效程度的复杂度。所以在实际操作中,我们需要选取不同的这些超参数来试验哪个组合带来的模型最好。从上面看出在训练集上使用最大似然方法对于未预见的数据的预测效果来说不是一个好的方法,因为会遇到过拟合的问题。当数据很多的时候,我们就可以在一部分训练数据上训练,然后在另一部分独立的数据上进行比较,这部分数据也叫做验证集,然后从中选择最好的预测结果。如果在一个很小的数据集上迭代许多回,那么在验证数据上就会出现过拟合的问题,所以需要第三个集合测试集,这个集合不参与训练,直到最后选取了最好的模型之后才会用到。

不过在许多应用中,训练和测试数据都是不够大的,所以为了构建个好模型,需要尽可能的用到能利用的数据,而且如果验证集很小的话,对于预测的结果来说也是噪音化的评估。一个解决方法就是交叉验证,这可以让(S-1)/S的数据用来训练,而在所有的数据上进行评估。

上图就是一个4-折交叉验证,在白框数据上训练,然后在红框数据上测试,最后将这4次的结果进行平均作为总的效果。而且当数据集太小的时候,有可能会S=N,即一个样本一组,这也就是leave-one-out 方法。交叉验证的一个主要缺点就是随着S的增大,模型训练的代价会变得高昂(毕竟这相当于传统训练的S倍时间),而且另一个问题就是在一个独立的模型上,很有可能会有很多超参数,这样测试下来的结果就更可想而知了。所以需要找到更好的方法来只在训练数据上训练,而且不会受到过拟合带来的有偏估计的问题。

历史上来说,有各种“信息化标准”用来修正最大似然的有偏问题,比如通过在模型上增加惩罚项来防止过拟合。力度Akaike information criterion 或者AIC(Akaike,1974),选择当下面这个值最大时候的模型:

这里是最好拟合的log似然,M是模型中可调整的参数的个数。这种方法的一个变种为Bayesian information criterion 或者BIC,在第4章4.1节介绍。这些标准都没考虑到模型参数中的不确定性,而且在实际中,他们在很简单的模型上效果比复杂模型要好。

1.4维数灾难

维数灾难即当在处理模式识别问题的时候遇到的。书上列举了三个例子,第一个说的是如何将一个新的样本归为3类中哪一类,通过使用小区域划分的形式,在测试样本所在的小区域中哪种类多,那么就将测试样本划分成那一类。在二维图像上结果还是能够猜测的,而如果在三维或者多维上,那么所需要采取的划分机制就没法进行了,因为区域太多了。第二个就是相对于之前的多项式曲线拟合的问题:

如上面式子所说的,当数据的维度越高的时候,前面的系数呈现的增长形式是幂级的(D为输入数据的维度,M为多项式的阶数),虽然不是指数级的;第三个例子说的是求在不同维度空间中的球体在半径为之间的体积,随着维数的增加,最后该体积几乎就成了该球体的表面积,而且一直持续不变。

不过在低维下的模式识别还是有意义的。因为,真实数据通常会受到某个空间区域的限制,而且在这个空间上目标变量变化较大,(其实就是不是所有的维度都起作用,比如pca就是很好的例子),所以可以通过寻找局部性变化较大的方式来进行目标变量的预测。

1.5决策论

在1.2小节中介绍了概率论是如何使用通用的数学框架来量化和操作不确定性的。这部分来介绍下当将决策论与概率论结合起来的时候,如何解决模式识别中出现的涉及不确定性的最优决策。一般来说,联合概率分布提供了涉及这些变量完备的不确定性描述。而来自训练数据的值的确定其实也是推理(inference)的一个例子,求解该过程也是本书大部分的主题所在。

假设一个医学诊断问题,通过对病理图像进行处理,并得出该人是否得了癌症。表示得癌症,对应着目标变量,而表示健康,对应目标变量(这里介绍了决策论的主要想法,更详细的查看Berger(1985)和Bather(2000))。使用贝叶斯理论,这些概率可以表示成:

注意到任何贝叶斯理论中的概率值都可以通过对联合分布进行边缘或者条件分布得到,这里表示类的先验概率,而表示对应的后验概率。

1.5.1最小化错误分类率

正如上面那个例子所说,我们在使用概率论的时候,是将最大概率作为当前类,可是总会有错误分类的,比如本来属于第一类的,分成了第二类,本来属于第二类的分成了第一类。这里假设为第k 类的决策区域。而介于不同区域之间的边界叫做决策边界或者决策面。将上面那个癌症例子采用概率表示其错误分类为:

其中表示x原本属于R1空间,而被划分成类的概率。为了让上面的概率最小,所以需要选择一个合适的决策规则来让错误分类率最小。如下图:

当在给定x的值的基础上,那么x就属于类。因为,而且对于两类后验概率来说,都是相同的。我们要做的就是将上图中原本位于的决策面移动到上,这时候原本的蓝色和绿色的误分类区域没变,可是红色区域消失了,此时的错误分类率是最小的。

将类数扩大成K类,那么正确分类的概率为:

(还是省略了先验)当每个x 指派为对应的类的概率最大的时候,即所占据的区域区域最大,那么这时候上面这个公式的值最大。

1.5.2 最小化期望损失

还是基于上面那个癌症的例子,错误的情况有两种,就是没得癌症,误判你得了;你得了癌症,误判你没得。这两种都是误判,可是相比较来说后者更可怕,前者还能提醒你复诊,后者就会让你错过最佳治疗时间。这里可以通过引入一个损失函数(loss function)或者叫做误差函数(cost function)用来测量发生的误差,从而将该问题形式化,目标就是最小化发生的总的损失值。不过有些作者通过使用效用函数(utility function)来代替的,他们的目标是最大化,其实就是加不加负号的问题。

首先建立损失矩阵,其中表示第k 个类别(行)被认定为第 j 类(列)的时候的惩罚值(损失值,个人觉得这里叫惩罚值更贴切)。如图:

上图就是当癌症被误诊为健康的时候惩罚值为1000,而正常被误诊为癌症的时候惩罚值为1。最优解就是最小化这个损失函数。但是损失函数是依赖于真实的分类的,然而我们并不知道,所以在一个给定的向量基础上,真实分类中的不确定性就是通过联合概率分布来计算的,所以能做到的就是最小化平均损失了,:

                                                           (1.5.2.1)

每个都是独立的赋值给某个决策区域的。我们的目的就是选择某个区域使得能够最小化上面这个期望损失,这个公式同时也说明对于每个我们需要最小化(也就是在某个区域上计算该样本被误分类的所有可能概率的惩罚和),和之前一样,通过使用乘法规则来消除。所以最小化期望损失的决策规则就是让每个新的样本指派给类J
的时候损失值最小:

                                                                                       (1.5.2.2)

当知道后验分类概率之后,上面这个式子是很好求的。

1.5.3 拒绝选择

如上图,分类错误来自于在输入中不同类别在相同空间区域上有重叠,这时候可以采取拒绝分类的方法,即reject option,比如上面那个癌症的例子,可以通过分析,当样本落在这个区域的时候,就有疑惑的结果留待人类专家来判定。所以这时候,我们需要引入一个阈值然后将那些最大后验概率小于或者等于该阈值的输入样本拒绝预测(上图中小于阈值的部分即为拒绝选择区域)。上图为2个类,将阈值设置为1的时候,就会拒绝所有的样本,对于有着K类的样本集来说,如果设置阈值小于1/K
的话,那么就不会拒绝任何样本。所以拒绝区域是由该阈值确定的。

1.5.4推理和决策

这里将分类问题拆分成2个独立的阶段,首先推理阶段(inference stage),通过训练数据来训练的模型,然后在后面的决策阶段(decision stage)用这些后验概率来做最优分类决策。有一种另外的形式是将这两个阶段放在一起解决,也就是直接将输入映射到决策。这种函数称之为判别函数(discriminant
function)。实际应用中,是有三种不同的方法来解决决策问题的。这里简单的介绍下:

a)首先分别计算每个类的类-条件密度来解决推理问题。同样的需要分别推理先验类概率。然后使用贝叶斯理论计算:

                                                                     (1.5.4.1)

得到后验分类概率。和之前一样,在贝叶斯理论中,分母的计算可以以分子的求和形式计算得到:

                                                                     (1.5.4.2)

也就是可以直接对联合分布进行建模,然后归一化来获得后验概率。在得到后验概率之后,就可以对新的输入使用决策论来计算类别归属。这种显式或者隐式的对输入和输出的分布进行建模的方法叫做生成式模型(generative models),因为这是通过对它们进行采样来生成输入空间中的数据点。

b)首先解决决定后验分类概率的推理问题,然后接着使用决策论来决定新的样本的类别,这种直接对后验概率进行建模的方法叫做判决式模式(discriminative models)。

c)先找到一个函数,也被称之为判决函数,即将输入映射到一个类别标签上。这种情况下,概率没发挥作用。

这里总结下三个备选方案相对的优点。方法(a)是最有要求的,因为它涉及到计算的联合分布。对于许多应用来说,通常是高维度的,所以我们需要大量的训练样本来保证分类-条件密度达到了我们所需要的精度。注意到类别先验通常可以简单的从每个类中的训练集数据点上评估得到。方法(a)的一个优点就是可以如(1.5.4.2)一样得到数据的边缘密度。这对于检测那些在模型的基础上概率很低的新的数据样本,而且预测的精度却很低的情况是很有优势的,比如离群点检测或者新颖检测(outlier
detection or novelty detection)(bishop,1994;tarassenko,1995)。

然而,如果只想要计算分类决策,那么这对于计算资源和过分要求得到的数据来说是很浪费的,因为在计算联合概率的时候,我们却只需要后验概率,这时候可以采用方法(b)。如下图所示,分类-条件密度会包含很多对于后验概率来说几乎没用的结构:

图1.5.4.1 :基于单一的输入变量x 基础上。(左图)二分类的分类-条件密度;(右图)对应的后验概率。可以看到左图中蓝色的的分类-条件密度的模型对于后验概率来说没任何影响(个人:也就是这时候你怎么建模无所谓)。右图中的垂直绿线就是最小错误分类率的决策边界。

所以相对来说,兴趣点在于寻找生产式和决策式方法的相对有点,然后结合起来用在机器学习中(jebara,2004;lasserre et al,2006)。

相对来说,更简单的方法就是(c),使用训练数据来决定一个判决式函数,然后将映射到类别标签上,吟哦日可以将推理和决策结合到一个简单的学习问题中,对应到上面图1.5.4.1中,就是为了找到那条垂直的绿线,也就是最小错误分类的决策面。而且在方法(c)中,不再需要用到后验概率。不过仍然有很多理由需要计算后验概率,
后续还可以用来做决策。这些理由有:

a)最小化风险。比如前面的损失矩阵是主观的随着时间而变化的(在金融领域中)。如果我们知道后验概率,那么我们可以通过适当的修改(1.5.2.2)来最小化风险决策标准。如果我们只有一个判决式函数,那么任何有关损失矩阵的改变都需要返回到训练数据然后重新来解决分类问题。

b)拒绝选择。后验概率可以让我们决定拒绝标准来最小化误分类率或者期望损失。

c)类先验的补偿。针对之前的那个癌症例子,假设从检测机上得到的许多图片都用来训练,不难知道有可能在1k张图片中只有1张是癌症的,对于这样的数据来说,是严重偏移的。一个平衡的数据集可以让模型的准确度更高。所以我们需要修改训练数据来补偿这个英雄,假设现在已经对数据集进行了修改而且通过模型得到了后验概率。按照(1.5.4.1)的贝叶斯理论,我们可以知道后验概率是与先验概率成比例的,这可以解释成每个类别所占据的比例。我们可以简单的从我们人为平衡的数据集中获得后验概率,然后除以数据集中类别的比例,然后将乘以我们希望使用这个模型的类别比例(就是先人为修改数据,然后在修改后数据上得到后验,然后除以修改后这个类的比例,然后乘以修改前类的比例)。最后还需要归一化使得后验概率的和为1。当我们直接学习一个判决式函数而不是先决定后验概率的方式时是没法用的。

d)模型组合。对于复杂的应用来说,希望将问题划分成许多可以独立处理的子小问题。比如我们可以用x光得到病理图片,然后进行血液检测得到另一个系统模型,然后想要将这两个模型的结果组合起来,假设x光得到的分布为,而血液检测得到的分布为,他们俩是独立的,所以得到下面的式子:

                                                               (1.5.4.3)

这是条件独立属性的一个例子,因为它们的分布是分别基于类条件独立的。其后验概率为:

所以我们需要类先验概率,这可以很容易从每个类中不同类数据占据的比例得到。然后需要归一化生成的后验概率使得总和为1。条件独立假设(1,5,4,3)是朴素贝叶斯模型的一个例子。而且联合边缘分布通常不会在该模型下分解处理。后面会介绍如何在不需要条件独立假设的情况下结合数据来构建模型。

1.5.5回归问题上的损失函数

现在来说说回归上的问题。还是之前那个曲线拟合的问题,在其决策阶段需要基于输入得到一个函数来预测目标变量t  。这期间会遇到损失。该平均或者期望损失为:

                                                                       (1.5.5.1)

在回归问题中经常选择的损失函数是平方损失,即。相对的期望损失为:

                                                                  (1.5.5.2)

我们的目的就是选择使得能够最小。如果我们假设这是一个完备的灵活的函数,那么可以对其进行微积分处理:

                                                           (1.5.5.3)

通过使用概率的加法和乘法规则,得到的解为:

                                             (1.5.5.4)

(个人:上面式子是将(1.5.5.3)拆分开,然后就得到,然后左边求得积分就可以了)。

这就是在上条件化的 t 的条件平均,被称之为回归函数。如下图所示:

图1.5.5.1 期望平方损失最小化的时候的回归函数,通过计算条件分布的均值获得。

它可以通过向量扩展到多目标变量的情况。这时候最优解就是条件均值

我们可以通过另一个方法来得到这个结果。通过利用最优解其实是条件期望这个事实,可以将平方项扩展成:

为了不致引起符号混乱,这里使用来表示。通过带入到损失函数中,然后对其关于 t 的积分,可以发现交叉项消失了,而且可以将损失函数表示成:

(上面式子的勘误:)

在第一项中当其等于的时候整个式子最小,而且这时候这一项会消失掉,这其实也就是之前通过条件均值得到的最优最小平方预测值得到的解。第二项是(基于 平均得到的)
t  的分布的方差,是目标数据的内部变化性,可以被认为是噪音项。因为它独立于,它表示损失函数不可归约的最小值。

正如之前的分类问题,我们可以通过找到合适的概率,然后用来得到最优决策,或者建立模型来直接做决策。这里介绍三种不同的方法来解决给定的回归问题,为了减小复杂度:

a)首先解决决定联合密度的推理问题,然后归一化求得条件密度,最后计算(1,5,5,4)形式的条件均值。

b)首先解决决定条件密度的推理问题,然后计算基于(1.5.5.4)形式的条件均值。

c)直接从训练数据中求得回归函数

这三个方法相对的优势和前面的分类问题一样。

对于回归问题来说平方损失不是唯一的选择,而且在一些情况下平方损失生成的结果还很差,所以我们需要更好的方法。比如在条件分布是多模态的情况下,就经常有各种不同的问题出现。这里介绍一个基于平方损失的变种,叫做Minkowski损失,它的期望是:

当q =2 的时候,就是普通的平方损失。函数对于不同的q 的值来说呈现的函数图不一样。当q等于不同的值时,差不多都是中间部分的的最小:

1.6信息论

概率论和决策论的理解对本书来说至关重要,这里介绍下信息论,记得只要关注关键概念就行,不需要什么都懂,更详细的可以看看(viterbi and omura 1979;cover and thomas 1991; mackay 2003).

这里先考虑离散随机变量,当观察到该变量的具体值的时候接收端接收到的信息有多少。测量信息内容的多少是依赖于概率先验的,并且使用一个关于该概率单调的函数来表示信息的内容。当两个事件之间相互独立时,那么。因为两个无关事件统计独立,所以。介于上面这两个关系式,可以得到如下的式子:

                                                                                      (1.6.1)

负号是为了确保信息是正的或者为0。低概率事件对应着高信息内容。log的基的选择是任意的,这里选择2用来对应到计算机的二进制。现在假设一个发送端将随机变量的值发送给接收端,在这个过程中信息的平均值的计算可以通过对(1.6.1)求关于分布期望:

这也被称之为随机变量的熵(entropy)。而且(勘误:ln改成log_2),所以此时(勘误:ln改成log_2)。

举个例子,假设有个随机变量,有8个同等概率的状态,那么该变量的熵就是

而当这8个状态的概率分别为0.5、0.25、以此类推,那么这时候这个变量的熵就是:

可以发现越是平均分布的熵越大,越是非平均的熵越小。详细的参考noiseless coding theorem(shannon,1948),其中就说明了熵是需要将一个随机变量的状态传输时所需的位数的下限值。现在,接着使用log对数形式。这里,上通过“nats”单元来测量而不是位数,不同于ln2因子。

最开始,熵是用在热力学中的,后面才引入到统计学中 。接下来以另一个观点来解释熵。假设我们有N 个相同的对象(比如球),想要将它们放到许多个不同的箱子里面(个人:这里是N>n,即球很多,箱子少,且每个箱子的球数有限制,更准确的说,应该是将N个球划分成不同的堆)。即第个箱子里面有个球。那么对于第一个球的选择来说就有N种,第二个就有(N-1)种,总的就有种。并且我们不关心每个箱子中的排序,那么对于第个箱子来说,其排序有种,所以总的分配这N个球到箱子中的方式有:

这被称之为multiplicity。熵可以被定义成multiplicity的log函数,并加上一个合适的缩放常量:

假设N趋向于无穷大,并且是固定的,通过使用stirling的逼近式子:

得到结果:

这里使用了是某个球放入第个箱子的概率(个人:从球的角度考虑)。在物理的热力学来说,关于箱内的球的排序叫做微观状态,而对于第几个箱子的概率,叫做宏观状态。这里的multiplicity
W 就是宏观状态的权重了。我们可以将箱子解释成离散随机变量的状态。随机变量的熵为:

分布在一些数值上达到了高峰,这时候会有个相对低的熵,不过随着更多的值说表现的更高的熵。如下图所示:

因为,熵是非负的,所以它在pi = 1的时候,得到最小值为0,并且。最大值熵的状态为用拉格朗日乘子在概率上强制执行归一化约束(即让总的概率加起来为1)。也就是在最大化:

的时候,会发现都是相等的,并且,这里M为状态的总数。熵的对应的值为。该结果同样可以通过Jensen不等式推导得到。为了验证在驻点上的确是最大值,可以通过对熵求取二阶导数,:

(勘误:左边分子应该是2,书写错误)

这里是单元矩阵的元素。

我们可以通过将熵的定义扩展到基于连续变量x 的分布上。首先将x 划分成宽度为的条形矩阵。然后假设是连续的,均值理论(weisstein,1999)告诉我们,对于每个条矩阵来说,都存在一个值,使得:

                                                                        (1.6.12)

将连续值离散化,对于观测到的值的概率为。这样得到的熵可以通过下面的形式计算:

这里默认,现在我们忽略上面式子的第二项,并且考虑。上面右边第一项将会有积分。使得:

(勘误:左边少了个负号)

该式子右边的项叫做微分熵。可以发现熵的离散和连续的形式不同在于的大小,当的时候会发散。这说明了一个连续的变量要非常准确的表示的话,需要大量的位(bit)。对于一个基于多连续变量的密度来说,表示成向量X,那么微分熵为:

在之前的离散分布中,我们知道熵最大的时候,也就是变量的状态的概率都相等的时候。现在来看看在连续变量上的情况。为了得到一个良好定义的最大值,需要将的第一和第二个进行约束,使之保留归一化常量。所以最大化微分熵的时候,会有如下三个约束:

受约束的最大值可以通过使用拉格朗日乘子来实现:

使用变量微积分,求得当函数导数等于0的时候:

将该结果带入到之前的三个约束中,得到如下结果:

所以最大化微分熵得到的其实就是高斯。注意到我们没有限制分布是非负的,因为得到的结果的确是非负的,所以就不需要增加这条限制了。

如果我们计算高斯的微分熵,那么得到:

                                                                       (1.6.20)

所以我们可以发现熵会随着分布变宽(方差变大)而增加,这结果同样显示了不同于离散熵,微分上可以是负的,因为在式子(1.6.20中)当。假设我们有个联合分布。如果X的值已知了,那么就需要通过额外的信息来得到Y的值。所以一般需要得到值的额外的信息为:

这叫做在给定的条件熵。正如之前所说的,使用惩罚规则,条件熵有着关系:

这里的微分熵,是边缘分布的微分熵。所以描述所需要的信息,等于需要描述的信息加上给定的信息相加。(个人:因为用了ln,所以相乘变相加了)。

1.6.1 相对熵和互信息

之前介绍了信息论的一些概念,并且着重介绍了熵的一些理解,现在是时候将其与模式识别联系到一起了,假设我们有个未知的分布,然后想要通过一个分布去逼近它,并且假设我们使用作为对X的值的编码,然后将此传送给接收端,那么就需要额外的信息来指定值X的确是所表示的,也就是要足够接近:

上面这个式子被称之为相对熵或者说叫做Kullback-Leibler 散度,是Kullback和Leibler在1951年提出的。介于分布之间。注意到该公式并没有对称性,所以

,并且我们注意到Kl散度满足,并且有且仅当的时候它才等于0。不过为了方便介绍,这里需要引入凸函数的概念:一个函数被称之为凸函数,只有当它的每个弦(chord)都位于函数的上面或超过函数,正如下图:

任何介于x=a和x=b之间的值可以写成形式,并且。对应的弦上面的点可以写成,并且该点对应到函数上的值为。凸也就是说:

                                                (1.6.1.2)

这相当于该函数的二阶导数在任何地方都是正的。凸函数的例子有。当函数只有在时才相等的函数叫做严格凸函数。如果一个函数有着完全相反的特性,也就是每条弦都位于函数上或者函数下面,那么这被称之为凹函数,当然也有对应的严格凹的情况。如果一个函数是凸函数,那么其反函数就是凹函数。

使用该凸函数理论,我们可以通过式子(1.6.1.2)中发现一个凸函数满足:

                                                                     (1.6.1.3)

这里对于任何点集来说,都满足并且。式子(1.6.1.3)也被称之为Jensen不等式。如果我们将解释成基于离散变量取值的概率分布,那么式子(1.6.1.3)可以写成:

这里表示期望。对于连续变量来说,Jensen不等式的形式为:

我们可以将上面式子的Jensen不等式用在KL散度里面得到:

这里使用到了是一个凸函数和归一化约束。事实上,是一个严格凸函数,所以不等式有且仅当对于所有,都有才是相等的。所以我们将KL散度解释成对两个分布相似性的测量方法。

我们可以发现在数据压缩和密度估计之间是有紧密联系的(即如何对一个未知概率分布进行建模),因为最有效率的压缩当我们知道真正的分布的时候就可以知道。如果使用一个不同于真实分布的分布,那么我们的编码肯定是低效的,而且平均所需的额外信息至少是等于这两个分布之间的KL散度的。

假设数据是来自于某个未知的分布,我们可以通过使用一些参数化的分布来逼近该未知分布,通过调节这些可调节的参数,例如多元高斯。一种决定参数的方法就是最小化之间的KL散度。不过我们不能直接这么做,因为这还是需要知道是什么。不过,我们可以假设我们有了一个有限的观测的数据点,其中,这些点都来自于的采样。然后关于的期望可以通过这些点的有限累加来逼近,使用式子:

这样就得到了:

(勘误:右边少乘了1/N)

上面式子中右边第二项是独立于的,第一项基于分布下的负log似然函数。所以我们可以发现最小化这个KL散度其实就相当于最大化该似然函数。

现在考虑基于变量形成的两个集合的联合分布。如果这两个变量是独立的,那么联合分布就等于两个边缘分布的乘积。如果变量是非独立的,那么可以通过计算边缘分布的乘积和联合分布之间的KL散度来计算它们是否足够独立:

这被称之为变量之间的互信息。从KL散度的属性可以得知,有且仅当是独立的时候,(勘误:这里应该是
[ ] 而不是())不等式的等号才会成立。使用概率的求和和乘积规则,可以发现互信息与条件熵是相关的:

所以,我们可以将互信息看成是在给定的值下,关于的不确定的约间(reduction)(反之亦然)。从一个贝叶斯角度来说,我们可以将看成是的先验分布,而看成是观测到新的数据的后验分布。所以互信息就可以表示在给定新的观测值下得到的的不确定性的减少(reduction)。

2015年08月28日,第0次修改!

PRML1-引言的更多相关文章

  1. 【翻译】MongoDB指南/引言

    [原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...

  2. Kafka 文档引言

    原文地址:https://kafka.apache.org/documentation.html#semantics 1.开始 1.1 引言 Kafka是一个分布式,分区队列,冗余备份的消息存储服务. ...

  3. HMM 自学教程(一)引言

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...

  4. 引言:Canvas绘图API快速入门

    引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...

  5. SQL Server 性能调优培训引言

    原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...

  6. Java反射——引言

    Java反射——引言 原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它 ...

  7. 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma

    第一章 引言 本章主要是让我们大致明白设计模式是干嘛用的,模式分类,设计模式如何解决设计问题以及几种常见的面向对象设计中软件的复用方法. 1.什么是设计模式? 个人理解概括,设计模式是对一类问题的抽象 ...

  8. Stanford机器学习课程之一——引言

    Andrew Ng的Machine Learning课程,在网易公开课上有中文版视频http://v.163.com/special/opencourse/machinelearning.html,六 ...

  9. 【译】1. Java反射——引言

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它可以在运行时检查类.接 ...

  10. 小妖精的完美游戏教室——人工智能,A*算法,引言

    今天也要直播魔法,求科学的! 欢迎来到小妖精Balous的完美游戏教室! 经过前两周的学习,相信米娜桑已经对状态机有所了解了呢~虽然状态机能够实现几乎所有的人工智能,但是,在实践中,你们有没有发现,自 ...

随机推荐

  1. web自动化开发环境配置详解

    1.安装 nodejs Grunt和所有grunt插件都是基于nodejs来运行的, https://nodejs.org/ 安装完成之后在终端 node -v 查看安装版本 2.安装 grunt-C ...

  2. Python 初识网络

    一. C/S架构:客户端(client)/服务端(server)架构 B/S架构:浏览器(browser) / 服务端(server)架构 软件cs架构: 浏览器,qq,微信等等 硬件cs架构:打印机 ...

  3. JS 正则截取字符串

    1.js截取两个字符串之间的内容: varstr = "aaabbbcccdddeeefff"; str = str.match(/aaa(\S*)fff/)[1]; alert( ...

  4. 【代码笔记】iOS-键盘自适应弹出

    一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIVie ...

  5. Vue入门系列(三)之Vue列表渲染及条件渲染实战

    Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一)  http://www.cnblogs.com/gdsblog/p/78 ...

  6. Problem1-Project Euler

    Problem1-Project Euler Multiples of 3 and 5   If we list all the natural numbers below 10 that are m ...

  7. oracle--ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

    SELECT sid, serial#, username, osuser FROM v$session where sid in(select session_id from v$locked_ob ...

  8. 树莓派上启动nfs server

    1. nfs 是什么 (略)http://vbird.dic.ksu.edu.tw/linux_server/linux_redhat9/0330nfs.php 2. 安装 nfs-kernel-se ...

  9. python基础学习20----线程

    什么是线程 线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中 ...

  10. Asp.net core 2.0.1 Razor 的使用学习笔记(六)

    Asp.net core 2.0.1 Razor 的使用学习笔记——基本页面的建立 VS这版(vs版本:15.5.6  .net版本:4.7.02558)的Razor页面自动生成就是坑爹货,它自动生成 ...