enter image description here

最近一直在研读Pattern Recognition and Machine Learning 这本书,因为今年九月份就要去台湾读书,但是感觉自己的数学水平实在是太糟糕,特别是我们在软件学院的,技术的学一大堆,但是对于数学方面则是一窍不通,这对于未来的研究生生涯实在是太不利,所以我挑选了Pattern Recognition and Machine Learning这本书来进行学习,一方面提高自己对于模式识别领域的认知,因为以后在研究生的时候会用到相关的内容(虽然不一定知道有没有用,但是看一下也是好的)。 模式识别对于新听到这个名词的人来说,好像是一个非常神秘的领域,但是每个人日常生活中都有了解,例如说,我们可以非常清楚的分辨出一个人是男人,还是女人,男人和女人就是模式,人从出生开始,逐渐地意识到性别的差异,从而在成长的过程中,逐渐知道哪些特征是男人的特征(例如胡须,喉结),哪些是女性的特征(例如长发,胸部等),当然,并不是每一个人都可以分辨清楚的,例如春哥,著姐等长的像其他性别其实是相反性别的。这个就导致了我们对于这些人的识别的困难。从某种意义上来说,这种故意混淆对自身识别的方法,却引领了一段时间的新的文化现象。 所以我们可以看见,模式识别不是一个十分新鲜的领域,他应用与每个人生活的方方面面,正因为人类有对模式进行识别的能力,我们才能够周围识别事物的本质(至少是表象)。 要了解模式识别的理论基础,我们必须对一下的几个数学领域进行综合应用和深入的探讨:

1、线性代数:模式识别中首先运用到的,就是大量的供机器进行学习的的样本,然后才能够让机器认知新的样本内容,因此,使用线性代数,能够表达所需要的数据。

2、概率论:概率论在模式识别中同样也是相当重要的,我们在判断一个事务时,通常很难给出某一个事物的性质是:“绝对的”,就像我们推测一个性别特征不明显的人一样,会给出一个结论说这个人"大概"是男的或者是女的,这个就是概率论在模式识别中的应用基础。

要了解模式识别的一个具体的应用,我们可以举一个简单的例子:

多项式曲线拟合:

我们已知有N组输入数据x,代表[x1,x2,x3...xN],和对应的结果t:[t1,t2,t3...tN],然后继续给出另外一个数据(x',t')判断它是否在测试数据的趋势之内,我们必须要对原先的数据进行拟合,得到一个曲线,然后用该曲线对新的数据进行匹配。

enter image description here

那么我们如何得到这个式子中的值呢,而且根据M(维度不同大小)我们可以得到不同的w的个数,而在M提前确定的情况下,我们需要有一个数量指标来确定w,这就是目标值到拟合曲线的误差之和: enter image description here

所以影响参数w的两个因素,一个是M,另外一个则是误差E(w),对于一般的对数学有概念的人来说,M越大,越能降低E(n)的值,因为拟合的参数越多,对这些数据的拟合程度越高,但是这里需要提出的是,如果我们过度地对参数进行拟合,则会导致对输入数据反应过度敏感,反而导致结果拟合效果下降。这里举一个例子:

enter image description here

由上图可见,我们通过对M设置不同的值进行拟合,蓝线为拟合的趋势图,红线为实际的趋势图,可以看见,虽然当M=9时,E(x)=0但是却违背了实际的数的趋势,相反,M=3时,趋势确是最为符合的。 但是,毫无疑问,这样会带来一个很大的问题,我们真正在应用的时候,如何才能够将M也作为一个考虑的对象,即究竟取一个怎样的M值才算是一个合理的量,这里我们引入另外一个公式,称作修正误差公式

enter image description here

这个公式将向量w的值也涵括在内,这样,在刚刚的例子中,如果M的值为9,虽然原来的E(n)为0,但是由于w的值增大导致修正的E(n)值增大,从而使得目标错误值增大。

2.概率论

概率论在模式识别领域的应用其实也并不复杂,主要有以下几点

  1. 概率密度(Probability densities)
  2. 期望值和方差值(Expectations and covariances)
  3. 贝叶斯概率(Bayesian probabilities)
  4. 高斯分布(Gaussian Distribution)

通过以上的两个作为模式识别的概率论和线性代数的理论基础,我们可以对其加以知识的整合来达到模式识别的方法,这里我们首先从贝叶斯公式开始: enter image description here

p(Ck)被成为先验概率,p(Ck|x)为后验概率,后验概率被应用于已知x而求出他所在的类Ck,这个明显就可以分析出来,在已知x的前提下,他分组在Ck的概率的可能性。

最小化分类错误的几率,要把分类错误的可能性降到最小,我们可以以从两个类开始C1,C2: enter image description here

但是,这个只是两个类的情况下,若是要表述为多个类,要使得分类合理化,则应当提高分类的正确率,即提高下面的值:

enter image description here

但是,我们必须了解,该参数指标p(correct)并非是在真正应用中所考虑的对象,我们可以考虑下列问题:

在对病人进行癌症体检时,我们如果能够真正地对病人和非病人进行正确的检测和分类,那么这个检测造成的后果为0(因为正确分类了),若将非病人诊断为病人,那么这个非病人最多可能也就紧张一下,最可能的想法就是:“这该不会是假的吧!”,于是又去检查一次,那么把非病人的后果为1,但是如果把病人诊断为非病人,所造成的结果就严重了,因为这个病人肯定非常高兴,再也不会去检查了,我们可以得到一个代价矩阵:

enter image description here

那么我们将这种问题扩展到N个类之后,可以得到代价矩阵L,那么误差会变为:

enter image description here

因此,以刚刚的癌症诊断为例,前一种方法误差指标和后一种误差指标的差别,会导致原来一部分本来被诊断为正常的人会被诊断为癌症(因为将癌症诊断为正常的导致的代价太大)。

那么,我们总结一下解决这种模式识别的三种方法: 1. 我们根据贝叶斯公式,首先决定对每一个Ck的类求出 p(x|Ck)同时分别根据已知的历史资料得到p(Ck),那么我们根据贝叶斯公式 enter image description here

再加上:

enter image description here

即可求出之前所提出的p(Ck|x)

2.首先解决决定后验概率p(Ck|x)的推理问题,然后应用决定理论(decision theory,上式)来将每一个新的x值分到对应的类中,这种方法被称作discriminative models.

3.找到一个discriminative function函数f(x),将每一个输入值x分配到一个类中,例如,在两个类的选择问题中,f()可能是非1即0,则当f=0代表分到C1类中,f=1代表分到C2类中。