Java heap space问题的的解决方法

1、设置环境变量:
set JAVA_OPTS= -Xms32m -Xmx512m
可以根据自己机器的内存进行更改,但本人测试这种方法并没有解决问题。可能是还有哪里需要设置。

2、java -Xms32m -Xmx800m className:
就是在执行JAVA类文件时加上这个参数,其中className是需要执行的确类名。(包括包名)
这个解决问题了。而且执行的速度比没有设置的时候快很多。

如果在测试的时候可能会用Eclispe 这时候就需要在Eclipse ->run -arguments 中的VM arguments 中输入-Xms32m -Xmx800m这个参数就可以了。

2012年5月20日 | 归档于 Java
标签:

[转]生成式和判别式分类器:朴素贝叶斯与逻辑回归

discriminative model generative model 的理解

这几个词看了很久了,可以这样理解,对于generative model 这个模型是说对于新来的数据,可以根据以往对模型参数的估计做出判断,可以这么说,像是利用这些模型特性来产生样本。

discriminative model 的理解就是直接利用参数估计结果,即discriminative。

第五部分的 You should know重点看一下。

Tom M.Mitchell (译pku_goldenlock at qq.com)

Abstract

GENERATIVE AND DISCRIMINATIVE CLASSIFIERS:NAIVE BAYES AND LOGISTIC REGRESSION文章简单翻译(不完整to be finished or not:)请参考原文(很经典),错误难免仅供自己记录。

1 基于贝叶斯规则的分类学习

这里我们会考虑有监督学习(supervised learning),方程拟合(function approximation),以及贝叶斯推理的关系。

考虑一个有监督学习问题,我们想逼近一个方程f:X− > Y或者说P(Y|X)(外:最小二乘法和概率意义上的使得训练数据出现的概率最大化))。为了简单我们假设Y是一个布尔取值的随机变量,而X是一个有着n个布尔属性的向量,如 < 0,1,1,0 > ,可以表示成X= < X1,X2...,Xn > ,其中Xi表示X的第i个布尔取值的随机变量。

利用贝叶斯法则,我们可以看出P(Y=yi|X)可以表示成为

P(Y=yi|X=xk)= P(X=xk|Y=yi)P(Y=yi)



j
P(X=xk|Y=yj)P(Y=yj)

这里ym表示y的第m个可能取值,xk表示X的第k个可能的向量值。注意k的取值范围[1,2n]。

(外:贝叶斯公式其实涉及两个概率中最重要的法则,乘法法则P(AB)=P(B|A)P(A)和加法法则(公式右侧分母=P(X=xk)。)

一个学习P(Y|X)的方法是用训练数据来估计P(X|Y)以及P(Y)。利用上面的贝叶斯公式可以得到对于任何新实例Xk所对应的P(Y|Xk)。

1.1 无偏差的贝叶斯分类器是不现实的

如果我们通过估计P(X|Y)以及P(Y)来训练贝叶斯分类器,那么有理由问需要多少的训练数据支持才能得到对于相应概率分布的可靠估计呢?我们假设训练数据是这样产生的,通过绘制随机的实例其内在的分布是P(X),允许一个老师来标记其对应的Y值。

当Y取布尔值的时候,100个随机的互不相关的训练数据一般来说足够获得一个最大似然估计(maximum likelihood)P(Y),估算值相对准确值会有可接受范围的一定误差。然而精确估算P(X|Y)需要多的多的训练数据!我们需要估算下面的参数:

θij ≡ P(X=xi|Y=yj)

这里注意i可以取2n的值,而j可以取2个值,我们大约需要估计2n+1个参数,精确的话,因为对于固定的某个j对应的x的各种取值概率之和为1,

因此我们需要估算2(2n−1)个θi,j参数,不幸的是这对应的是X域的每个实例都有2个不同的参数,更糟的是为了能得到可靠的估算我们需要对于所有不同的实例观察多次!例如X是一个30维的变量,那么需要估算30亿的参数!

2 朴素贝叶斯算法

我们如何来简化这个复杂性呢,朴素贝叶斯作了条件无关性(conditional independence)假设从而大大简化了复杂性。

2.1 条件无关性

定义:给定随机变量X,Y,Z,我们说给定Z的前提下,X与Y条件无关(conditional independent),当且仅当如果给定Z,X的概率分布独立与Y的取值无关。

(∀i,j,k)P(X=xi|Y=yj,Z=zk)=P(X=xi|Z=zk)

一个例子,下雨,雷,闪电,我们可以说给定闪电的情况,下雨和打雷是无关的,因为闪电必然带来了打雷,当然一般情况下打雷和下雨是相关的,但是给定闪电的情况下,它们是无关的。

2.2 朴素贝叶斯(naive bayes)算法的推导

朴素贝叶斯算法是一个基于贝叶斯法则的分类算法,它假设X的各个属性X1,X2...,Xn 在给定Y的前提下是条件无关的,这将问题的的复杂性参数估计数目从2(2n−1)降低到了2n,从指数到线性。我们考虑n=2的情形,X= < X1,X2 >

P(X|Y)=P(X1,X2|Y)=P(X1|X2,Y)P(X2|Y)=P(X1|Y)P(X2|Y)

好了当我们P(X1|Y)P(X2|Y),后我们就得到了P(X|Y),这意味者给定Y后,我们只需要估算2个参数(外:如果n=3就是3)就可以估算出P(X|Y),而如果不做条件相关假设,我们需要估算4个参数(外:如果n=3就是23=8)。推广到一般情况有:

P(X1...Xn|Y)= n

i=1
P(Xi|Y)
(1)

我们现在来推导朴素贝叶斯算法,我们假设Y是可以取任意离散的数值,X可以取任意离散或者连续数值。我们的目的是对于任意一个新的实例X,训练一个分类器输出对于Y的所有可能取值的一个概率分布。可以表示Y取它的第k个可能值的概率如下:

P(Y=yk|X1...Xn)= P(Y=yk)P(X1...Xn|Y=yk)



j
P(Y=yj)P(X1...Xn|Y=yj)
P(Y=yk|X1...Xn)=
P(Y=yk)
i
P(Xi|Y=yk)


j
P(Y=yj)
i
P(Xi|Y=yj)
(2)

上面第二个公式就是朴素贝叶斯分类器的重要公式。因此当有一个新的X的实例,Xnew= < X1,X2...,Xn > 我们可以利用从训练数据中通过估算得到P(Y),P(Xi|Y),从而得到Y取其可能的各个离散值的概率,更进一步我们可能对于对应概率最大的那个值感兴趣(外:分类结果),于是我们有下面的朴素贝叶斯分类法则:

Y←argmaxyk
P(Y=yk)
i
P(Xi|Y=yk)


j
P(Y=yj)
i
P(Xi|Y=yj)

可以进一步简化如下,因为分母与yk取值无关

Y←argmaxykP(Y=yk)
i
P(Xi|Y=yk)
(3)
2.3 对应离散输入的朴素贝叶斯

作为总结,这里精确的定义朴素贝叶斯学习算法需要估算的参数以及我们如何估算它们。

当n个输入属性Xi可以取J个可能的离散的数值,Y可能取K个可能的离散值,我们的任务是估算两类的参数,第一类:

θijk ≡ P(Xi=xij|Y=yk)
(4)

对于所有的属性Xi,对应每一个可能的取值xij,以及对应的所有可能的Y的取值yk。所以有nJK个参数,注意其中不相关的参数只有n(J−1)K个(外:如果没有条件不相关假设呢,个人认为参数个数是(Jn−1)K),因为1=∑jθijk对于所有的i,k组合值。

除此之外我们需要估计定义了对应Y的先验概率(prior probability):

πk ≡ P(Y=yk)
(5)

这对应K个参数,其中最大独立参数个数为K−1。

对应给定的训练集合D,参数θijk的最大似然估计值为:

^

θ

ijk = ^

P

(Xi=xij|Y=yk)= #D{Xi=xijΛ Y=yk}


#D{Y=yk}

(6)

#D{x}表示返回集合D中符合条件x的所有元素个数。

最大似然估计的一个危险在于有很多时候可能会把θ的值估计为0,因为可能测试数据且好不包含任何符合条件的元素,所以上式子分子为0。为了避免这种情况,一种常用做法是使用“光滑”(smoothed)的估计,加入一些额外的“虚拟”的数据,原则是对于Xi的所有取值这些虚拟的数据均匀分布

^

θ

ijk = ^

P

(Xi=xij|Y=yk)= #D{Xi=xijΛ Y=yk}+l


#D{Y=yk}+lJ

(7)

J是Xi的可能取值数目,l参数决定光滑的程度大小。这个表达式对应θijk的MAP(max a posterior最大后验)估计如果我们假定一个其符合先验的狄利克雷分布(?外:TODO understand Dirichlet 分布),有着equal-valued参数。如果l设置为1,就是拉普拉斯光顺.

对应πk的最大似然估计如下:

^

π

k = ^

P

(Y=yk)= #D(Y=yk)


|D|

(8)

类似的可以对其光滑得到:

^

π

k = ^

P

(Y=yk)= #D(Y=yk)+l


|D|+lK

(9)
2.4 对应连续输入的朴素贝叶斯

对于输入Xi是连续取值的情况,我们也可以应用公式(2),(3)作为基础来设计朴素贝叶斯分类器。但是当Xi是连续取值的时候我们需要考虑其它的方式来描述P(Xi|Y)的分布,一个常用的策略是我们假定对于任意的Y的值yk,所有的连续的Xi是符合高斯分布的,其均值和方差由特定对应的Xi,yk决定。由此为了训练这样的朴素贝叶斯分类器,我们的任务就变成了估计这些高斯分布的均值和方差:

μik=E[Xi|Y=yk]
(10)
σik2=E[(Xi−μik)|Y=yk]
(11)

注意我们需要估计所有2nK个对应这样的参数。

当然我们也需要估算Y上的先验参数:

πk ≡ P(Y=yk)
(12)

上面给出了高斯朴素贝叶斯分类器的一个总结,这里X是由一系列类别相关(class-conditional)的(取决于Y)的高斯分布生成,更进一步朴素贝叶斯指出Xi之间相对给定的Y条件无关。对于特定的场景,我们也许能做进一步的限制,比如如果我们有理由认为被观测的Xi的值的噪声来源相同,我们可以进一步的认为所有的σik2的值是相同的与i以及类别k的值无关。

同样的我们可以利用最大似然概率(MLE P(Y|X)估算使得Y出现可能最大P(Y)最大的对应参数X)或者最大后验概率(MAP P(X|Y) ∝ P(Y|X)P(X) 从给定的测试数据Y估算参数X,依据最大似然和X的先验假设)来估计这些参数。对μik的估算如下:

^

μ

ik = 1



j
δ(Yj=yk)

j
Xijδ(Yj=yk)
(13)

这里δ取0,1表示如果内部满足条件是1否则为0,Yj表示对应第j个训练数据。

类似的对应σik2的估算:

^

σ

2
ik
= 1



j
δ(Yj=yk)

j
(Xij ^

μ

ik )2δ(Yj=yk)
(14)

由于该估计是有偏差的(biased,因E(∧σik2)!=E(σik2))所以最小无偏差估计通常用于取代它:

^

σ

2
ik
= 1



j
δ(Yj=yk)−1

j
(Xij ^

μ

ik )2δ(Yj=yk)
(15)

3 逻辑回归(logistic regression)

逻辑回归是一个学习f:X− > Y 方程或者P(Y|X)的方法,这里Y是离散取值的,X= < X1,X2...,Xn > 是任意一个向量其中每个变量离散或者连续取值。我们首先主要考虑Y取布尔值的情况,最后一小节会推广到Y取有限个离散值的情形。

逻辑回归对于分布P(Y|X)假定一个参数形式,然后从训练数据中直接估计这些参数值。当Y取布尔值的时候这个参数模型如下:

P(Y=1|X)=\frac{1}{1+exp(\omega_{0}+\sum_{i=1}^{n}\omega_{i}X_{i})} (16)

P(Y=0| X)=\frac{exp(\omega_{0}+\sum_{i=1}^{n}\omega_{i})}{1+exp(\omega_{0}+\sum_{i=1}^{n}\omega_{i}X_{i})} (17)

其中第2个方程可以由第一个直接按照概率和为1推导出来。

通过P(Y|X)我们可以有一个关于分类的线性表达形式。对于任意的一个X确定其类别的方法一般就是给其一个分类值yk使得P(Y=yk|X)最大化。因此如果我们给其标明类别是Y=0那么意味着:

1 < P(Y=0|X)


P(Y=1|X)

通过上面的方程求解得到:

1 < exp(ω0+ n

i=1
ωi)
0 < ω0+ n

i=1
ωi
(18)

也就是如果X满足上式条件那么标记类别Y=0,否则标记Y=1。

有意思的是这里逻辑回归P(Y|X)所用到的参数形式恰好是可以由前面提到的高斯平凡贝叶斯分类器推导出来。

3.1 高斯朴素贝叶斯分类器的P(Y|X)形式

考虑符合如下条件的高斯平凡贝叶斯:

  • Y取布尔值,符合泊努利分布,参数π = P(Y=1)
  • X= < X1,X2...,Xn > 其中每个属性Xi取连续的值。
  • 对于每一个Xi,P(Xi|Y=yk)符合N(μiki)的高斯分布。
  • 各个不同的Xi对于给定的Y条件无关。

根据以上的假设我们来点推导P(Y|X):

P(Y=1|X)= P(Y=1)P(X|Y=1)


P(Y=1)P(X|Y=1)+P(Y=0)P(X|Y=0)

P(Y=1|X)= 1


1+ P(Y=0)P(X|Y=0)


P(Y=1)P(X|Y=1)

P(Y=1|X)= 1


1+exp(ln( P(Y=0)P(X|Y=0)


P(Y=1)P(X|Y=1)

))
P(Y
=
1|X)= 1


1+exp(ln( P(Y=0)


P(Y=1)

)+ln( P(X|Y=0)


P(X|Y=1)

))
= 1


1+exp(ln 1−π


π

+
i
ln P(Xi|Y=0)


P(Xi|Y=1)

)

i
ln P(Xi|Y=0)


P(Xi|Y=1)

=
i
ln P(Xi|Y=0)


P(Xi|Y=1)

=
i
ln
1



σi
exp(− (Xi−μi0)2


i2

)

1



σi
exp(− (Xi−μi1)2


i2

)
=
i
ln(exp( (Xi−μi1)2−(Xi−μi0)2


i2

))=
i
2(μi0−μi1)Xi+(μi12−μi02)


i2

=
i
  μi0−μi1


σi2

Xi+ μi12−μi02


i2

 

由此我们得到:

w0=ln 1−π


π

+
i
μi12−μi02


i2

wi= μi0−μi1


σi2

3.2 逻辑回归的参数估计

上面的推导表示假设朴素贝叶斯的情况下可以推导出逻辑回归的参数形式并且得到相应的参数值,但是这里我们希望能有一个更加一般化的方法得出参数的估计,有些时候也许我们并不能认为完全符合朴素贝叶斯情况,这时候我们希望能从训练数据中直接得出估计的参数而不依赖朴素贝叶斯的条件限制假定。

一个可行的方案是选择使得条件概率最大化的参数,这里的条件概率即是在训练集合中观测到的Y的值,条件依赖于X的值。我们选择参数W满足:

W\leftarrow\arg\max_{W}\prod_{l}P\left(Y^{l}|X^{l},W\right)

Y^{l},X^{l}分别是对应第l个观测到训练数据的相应结果。

演算过程见原文,通过对w_{i}分别求偏导数即可,利用standard gradient ascent 来进行优化。w_{i}=w_{i}+\frac{\partial l\left(w\right)}{\partial w_{i}}*\mu。TODO 利用conjugate gradient ascent能收敛速度更快。

3.3 逻辑回归的正规化

过渡拟合问题(overfitting),即存在其它的情况虽然对于训练集误差大但是对于整个数据域误差小,这种问题在逻辑回归中容易产生,尤其是当数据是高维度的而训练数据是稀疏的情况下。一个解决方法是正规化(regularization),我们对优化的目标方程加入 "penalized log likelyhood function"来避免较大值的W。

3.4 对应有多个离散值的方程的逻辑回归

4 朴素贝叶斯和逻辑回归的联系

作为总结,逻辑回归直接估计P(Y|X)的参数,而朴素贝叶斯则通过估计参数P(Y)P(X|Y)。我们经常把前者称为判别式(discriminative)后者称为生成式(generative)分类器

如果GNB的前提满足,那么理论上(随着训练数据数目增大到无限)逻辑回归和朴素贝叶斯其实是相同的分类器。两种算法的不同之处是:

  • 如果GNB前提不满足。那么理论上他们是不同的分类学习functions,逻辑回归要比假定GNB的朴素贝叶斯更精确。尽管逻辑回归与朴素贝叶斯一样假定输入的特征X_{i}满足相对Y的条件无关性,但是当数据不满足的时候,CLM(conditional likelihood maximization)算法会调整参数来适应数据,即使结果参数与朴素贝叶斯假设不一致。
  • 两种算法收敛速度不一样。假设X的维度是n,那么GNB收敛复杂度是\log(n)个examples,而逻辑回归需要n 个examples。在训练数据较多的时候逻辑回归取得更好的效果,而当训练数据较少时朴素贝叶斯可能效果更好。

5 你所应该知道的

  • 我们可以运用贝叶斯法则来设计学习算法。f:X->Y或者等价的P(Y|X)。我们利用训练数据来学习P(X|Y),P(Y)(考虑下朴素贝叶斯文本分类器的应用,<<信息检索导论>>)。对于新的X,它的分类可以利用概率分布+贝叶斯法则得到。
  • 学习贝叶斯分类器一般需要太多的不可能得到的unrealistic训练数据,因为我们有太多的参数需要估计。于是我们需要做条件无关性假设来减少需要估计的参数,即我们需要朴素贝叶斯。
  • X是离散取值的向量时,朴素贝叶斯学习可以看做是线性分类器。同样的结论对于GNB分类器也成立,如果每个特征的方差是与类别无关的(ie,if \sigma_{ik}=\sigma_{i})(注意我的关于PRML第一章总结,PRML中其实是设定都是相同的方差)。
  • 逻辑回归从训练数据中直接估计P(Y|X)
  • 逻辑回归是X上面的线性分类器。如果GNB条件满足逻辑回归等价于朴素贝叶斯。如果不满足,那么逻辑回归更精确一些,可以认为相比逻辑回归,朴素贝叶斯方法有更大的bias,更小的variance。如果该bias是我们可以接受的可以选择朴素贝叶斯,否则逻辑回归更好。
  • 我们可以从概率的角度(conditional distributions)来看待方程逼近问题。

 

 

 

 

 

 

 

 

6 PRML 1.5.4的相关解释

We have broken the classification problem down into two separate stages, the inference stage in which we use training data to learn a model for p(Ck|x), and the subsequent decision stage in which we use these posterior probabilities to make optimal class assignments. An alternative possibility would be to solve both problems together and simply learn a function that maps inputs x directly into decisions. Such a function is called a discriminant function.

按照复杂程度降序有以下3种决策方法:

  1. First solve the inference problem of determining the class-conditional densities p(x|Ck) for each class Ck individually. Also separately infer the prior class probabilities p(Ck). Then use Bayes’ theorem in the form
    p(Ck|x) = p(x|Ck)p(Ck)/P(X) to find the posterior class probabilities p(Ck|x). As usual, the denominator in Bayes’ theorem can be found in terms of the quantities appearing in the numerator, because P(x)= sum(P(x|Ck)P(Ck)  ).
    Equivalently, we can model the joint distribution p(x, Ck) directly and then normalize to obtain the posterior probabilities(p(x,Ck)/P(x)考虑贝叶斯文本分类正向估算P(x,Ck)不容易). Having found the posterior
    probabilities, we use decision theory to determine class membership for each new input x. Approaches that explicitly or implicitly model the distribution of inputs as well as outputs are known as generative models, because by sampling from them it is possible to generate synthetic data points in the input space.
  2. First solve the inference problem of determining the posterior class probabilities p(Ck|x), and then subsequently use decision theory to assign each new x to one of the classes. Approaches that model the posterior probabilities directly are called discriminative models.
  3. Find a function f(x), called a discriminant function, which maps each input x directly onto a class label. For instance, in the case of two-class problems, f(·) might be binary valued and such that f = 0 represents class C1 and f = 1represents class C2. In this case, probabilities play no role. (逻辑回归?)
2012年4月7日 | 归档于 数据挖掘

[读书笔记] PRML Ch1 Introduction

最近的PRML,发现这篇总结的非常好

参考:http://burgeon.blog.35.cn/2008/09/28/dushubijiprmlch1introduction/

主题1: 模式识别与机器学习的简介

模式识别与机器学习的关系

模式识别源自工程,是一类问题(problem);机器学习源自数学,是一类方法(methodology)。对于一个具体的模式识别问题,可以用handcrafted rule-based的方法去求解,但是更复杂的PR问题往往采用机器学习的方法。

机器学习的分类

按照学习模式的不同,machine learning一般可以分成4类:

Supervised Learning

training set中全部输入都带有target value的称为supervised learning。这类学习的目标是发现input变量和target变量之间的关系。按照target value,supervised learning又可以分成两类问题:如果target value是离散变量,称为classification;如果是连续变量,称为regression。

Unsupervised Learning

输 入变量全不带target value的称为unsupervised learning。这类学习的目标是发现输入变量间的内部联系。按照具体的内部联系类型,unsupervised learing又可以分成多种问题,如,clustering,density estimation,visualization。

Semi-supervised Learning

输入变量有的带target value,有的不带的称为semi-supervised learning。其实书中并没有直接提到semi-supervised learning...

Reinforcement learning

这类学习是在supervised learning的基础上,允许机器自行选择training data;同时,training在获取信息的同时也会带来cost或loss,从而引发一个tradeoff。

机器学习的基本流程

最基本的machine learning过程是:

1. 确定模型类型

2. 确定模型复杂度(即自由参数个数)

3. 确定每个模型的所有参数值,也称trainning

4. 最后在模型间比较选择一个最好的,也称model selection

supervised类机器学习就是推测输入变量和输出变量的关系。为了确定到底这种关系是什么,通常要做某些假设,从而得到一个参数化 的输入变量-输出变量关系函数,这个参数化的关系函数称为trainning model,而第1、2两步就是决定使用哪个training model和确定其具体形式的过程。Neural Network、SVM、HMM等等都是不同的training model,它们各有优缺点,适合不同场合。

由于模型结构不同,不同training model拥有各自不同的training算法,但通常只基于有限的几种training“准则”,如非概率观点的Least RMS准则、frequentist派的MLE准则、和bysian派的bysian准则。

Overfitting 与 Model Selection

overfitting的具体含义书中描述的并不清晰,大体是指这么一种现象:有的时候模型在training set上误差很小,但是在非training set上误差却很大。这个现象导致不能通过传统的解析优化手段去做model selection,而不得不通过某种computational算法去基于另一组独立于training set的数据去枚举和比较,即validation。

Validation是从原始training data中选择一个子集(称为validation set或hold-out set),并基于validation set去做model selection。

validation data和test data的区别在于:前者可以是在另一次run中的training data的一部分,不同run对于同一组data采取不同的training-validation划分;而后者根本不用于training的过程,通常 是用于最终的实验。

validation的缺点有二:

1.validation占用了额外的training数据,这对数据稀少的application影响尤为严重。cross-validation技术用于缓解这一缺陷。它轮流从training set中选择小部分数据做validation set,并最终把多轮结果combine起来。但cross-validation引入多轮validation,增加了计算量。

2.由于validation的存在,training model无法根据training data解析地进行模型比较。当需要枚举比较的模型复杂度参数变多时,validation的计算复杂度指数上升。

一 种“消除”overfitting现象的方法是向training model中加入information criterion。理想情况下,由于不存在overfitting从而可以避免validation过程;现实中,加入IC的model结果往往比 validation出来的要好。但是,多数Information Criterion缺少理论解释的支持。

Regularization (shrinkage)是另一类“控制”overfitting现象的方法。它也向trainning model加入一个compensation term,然后通过一个complexity parameter来调整regularization的程度,从而控制overfitting的程度。从客观上,regularization可以避免 由于模型过于flexible而train出来的参数过大的“畸形模型”,但另一方面过量的regularization会降低模型的effective complexity,这同样无法得到好的model。因此,为了选择一个最优的regularization度,仍然需要validation的过程。 但complexity parameter往往是连续变量,因此可以表达出用离散个数个模型参数所无法表达的模型,因此增加模型的泛化能力。另一方面,带 regularization的validation是对同一套解析式内的不同参数进行比较,相比于不同解析式间的比较,计算量较小。

多维困境

主题2: 概率论支持

概率论提供了对随机事件进行描述和分析的框架。数理统计则通过“随机采样”来构造一系列随机变量,进而通过概率论提供的理论框架去反推总体的特征

基本概念:随机事件概率、随机变量、离散变量的概率分布、连续变量的概率密度函数、条件概率(及分布、密度函数)、边缘概率(及分布、密度函数)、互斥、独立、线性相关、期望、方差、协方差

运算法则:条件概率公式、全概率公式、随机变量的函数的概率密度函数计算(Jacobi factor使非线性函数的概率计算不同于simple function)

概率模型:概率模型好比初等函数,其意义在于,做为具有良好解析性质的基本组成单位合成更一般化更复杂的概率分布。本章只简单介绍了最基本的高斯分布,更多的模型用整个第二章来详细介绍

最大似然估计(Maximum Likelyhood Estimation):frequentist学派的经典参数估计准则,假设合理,计算方便。但其对高斯分布总体的方差估计的期望值偏小,这是由于需要用总体期望的估计量回代求解导致的。

Bayesian理论:bayesian 理论把一切未知量都看作随机变量,并通过概率法则去求其后验分布。它的本质是把概率解释为主观上的不确定性,从而扩展了其应用范围。bayesian理论 的优点是无需借助额外的“准则”,局限在于计算复杂。近些年Monte Carlo等sampling类方法和近似推导方法使得bayesian理论的应用变得广泛。

主题3: 决策论支持

判别函数(discriminant function):y(\bold{x}), 代表最终“决策”与输入变量的关系的函数,是决策论计算的基本目标。其中y是对输出变量t的估计,因此和t定义在同一个代数空间上。

损失函数(loss function):L(y, t),代表了用y去估计t所带来的损失。损失函数定义清楚之后,决策论计算的基本准则就明确了,即minimize loss expectation,其中E(L)=ssL(y,t)p(x,t)dxdt

三类决策方法:

discriminant function based :直接通过优化手段去最小化loss expectation,从而得到判别函数。

discriminitive model based :对于分类问题,最小化loss expectation可以转化为每个输入x找一个t,使得\sum{Lkjp(Ck|x)}最小;而对于回归问题,如果使用RMS做loss function,则E(t|x)一定使loss expectation最小。总而言之,一旦p(t|x)得到了,判别函数也就随之得到了。因此,第二类决策方法是通过概率统计方法推测出p(t|x),然后再得到判别函数。

generative model based :由于p(t|x)=p(t,x)p(x),因此存在第三类决策方法,是通过概率统计方法分别推测出p(t,x)和p(x),然后再得到p(t|x),再得到判别函数。

主题4: 信息论支持

entropy的数学性质:运算法则、differential entropy、conditional entropy、relative entropy、mutual information

entropy的信息量意义上的性质:Shannon证明了,在对一个变量的不同状态进行编码时,最小平均编码长度等于该变量的entropy

entropy的统计学意义上的性质:对于一个随即变量,期望和方差均固定的情况下,呈高斯分布时entropy最大;反过来,对于高斯分布而言,方差越大则entropy越大。

从entropy的定义可以推导出,relative entropy (即KL-divergency) 一定大于等于0。这意味着,在对某变量进行编码时基于任何一个不同于真实分布的分布函数去求得的编码方案都会比基于真实分布得到的方案平均长度要更长。同时,依据relative entropy进行参数估计时,同MLE方法在形式上是一致的。

主题5: Case Study - 一元多项式回归

如果忽略变量关系的uncertainty,一元多项式回归等价于数值计算领域的多项式曲线拟合问题,此时通常采用Root-Mean-Square为loss准则来优化参数。

如果假设目标变量在每个点处都服从独立同方差的正态分布,而其期望值是输入变量的多项式函数,那么多项式拟合便又等价于概率论中的参数估计问题,而RMS准则恰好和frequentist学派的极大似然准则(Maximum Likelihood)一致。

然而,这个数学模型存在overfitting问题,这是由于模型复杂度相比于输入数据的规模过大引起的(从数值分析角度看,当多项式阶数等于输入数据项数时,拟合变成插值,此时loss一定可以优化至0)。

2012年4月7日 | 归档于 数据挖掘
标签:

寻找包,依赖关系

mavern2 ivydb 貌似都是用来解决这个问题的,用nutch1.4 按照tutorial还是不能将所有的包都找全,还有一个feed插件和htmlparser插件的包没有找全,这些关系应该也会所可以用上面两个工具解决的,现在先贴两个查询包的网站吧。

http://www.findjar.com

http://www.jar114.com 这个是国内的,应该么有第一个全

2012年3月30日 | 归档于 Java
标签:

KL散度

相对熵

相对熵(relative entropy)又称为KL散度Kullback–Leibler divergence,简称KLD),信息散度(information divergence),信息增益(information gain)。   KL散度是两个概率分布P和Q差别的非对称性的度量。 KL散度是用来 度量使用基于Q的编码来编码来自P的样本平均所需的额外的比特个数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。

定义: 对一个离散随机变量的两个概率分布P和Q来说,他们的KL散度定义为:D(P||Q)=∑P(i)lnP(i)/Q(i),对于连续的随机变量,定义类似。

 

不识庐山真面目啊,KL散度就是学过的相对熵 信息增益

2012年3月9日 | 归档于 所谓数学

新浪微博数据

http://www.wise2012.cs.ucy.ac.cy/challenge.html

2012年3月9日 | 归档于 所谓数学
标签:

[转]数学之美番外篇:平凡而又神奇的贝叶斯方法

数学之美番外篇:平凡而又神奇的贝叶斯方法

By 刘未鹏(pongba)

C++的罗浮宫(http://blog.csdn.net/pongba)

TopLanguage(http://groups.google.com/group/pongba)

概率论只不过是把常识用数学公式表达了出来。

——拉普拉斯

记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时;有一次,在书店看到一本书,名叫贝叶 斯方法。当时数学系的课程还没有学到概率统计。我心想,一个方法能够专门写出一本书来,肯定很牛逼。后来,我发现当初的那个朴素归纳推理成立了——这果然 是个牛逼的方法。

——题记

目录

0. 前言
1. 历史
1.1 一个例子:自然语言的二义性
1.2 贝叶斯公式
2. 拼写纠正
3. 模型比较与贝叶斯奥卡姆剃刀
3.1 再访拼写纠正
3.2 模型比较理论(Model Comparasion)与贝叶斯奥卡姆剃刀(Bayesian Occam’s Razor)
3.3 最小描述长度原则
3.4 最优贝叶斯推理
4. 无处不在的贝叶斯
4.1 中文分词
4.2 统计机器翻译
4.3 贝叶斯图像识别,Analysis by Synthesis
4.4 EM 算法与基于模型的聚类
4.5 最大似然与最小二乘
5. 朴素贝叶斯方法(又名“愚蠢者的贝叶斯(idiot’s bayes)”)
5.1 垃圾邮件过滤器
5.2 为什么朴素贝叶斯方法令人诧异地好——一个理论解释
6. 层级贝叶斯模型
6.1 隐马可夫模型(HMM)
7. 贝叶斯网络

0. 前言

这是一篇关于贝叶斯方法的科普文,我会尽量少用公式,多用平白的语言叙述,多举实际例子。更严格的公式和计算我会在相应的地方注明参考资料。贝叶斯方法被证明是非常 general 且强大的推理框架,文中你会看到很多有趣的应用。

1. 历史

托马斯·贝叶斯(Thomas Bayes)同学的详细生平在这里。以下摘一段 wikipedia 上的简介:

所谓的贝叶斯方法源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来 的。在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大”。而一个 自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可 以就此对袋子里面的黑白球的比例作出什么样的推测”。这个问题,就是所谓的逆概问题。

实际上,贝叶斯当时的论文只是对这个问题的一个直接的求解尝试,并不清楚他当时是不是已经意识到这里面包含着的深刻 的思想。然而后来,贝叶斯方法席卷了概率论,并将应用延伸到各个问题领域,所有需要作出概率预测的地方都可以见到贝叶斯方法的影子,特别地,贝叶斯是机器 学习的核心方法之一。这背后的深刻原因在于,现实世界本身就是不确定的,人类的观察能力是有局限性的(否则有很大一部分科学就没有必要做了——设想我们能 够直接观察到电子的运行,还需要对原子模型争吵不休吗?),我们日常所观察到的只是事物表面上的结果,沿用刚才那个袋子里面取球的比方,我们往往只能知道 从里面取出来的球是什么颜色,而并不能直接看到袋子里面实际的情况。这个时候,我们就需要提供一个猜测(hypothesis,更为严格的说法是“假 设”,这里用“猜测”更通俗易懂一点),所谓猜测,当然就是不确定的(很可能有好多种乃至无数种猜测都能满足目前的观测),但也绝对不是两眼一抹黑瞎蒙——具体地说,我们需要做两件事情:1. 算出各种不同猜测的可能性大小。2. 算出最靠谱的猜测是什么。第一个就是计算特定猜测的后验概率,对于连续的猜测空间则是计算猜测的概率密度函数。第二个则是所谓的模型比较,模型比较如果不考虑先验概率的话就是最大似然方法。

1.1 一个例子:自然语言的二义性

下面举一个自然语言的不确定性的例子。当你看到这句话:

The girl saw the boy with a telescope.

你对这句话的含义有什么猜测?平常人肯定会说:那个女孩拿望远镜看见了那个男孩(即你对这个句子背后的实际语法结构的猜测是:The girl saw-with-a-telescope the boy )。然而,仔细一想,你会发现这个句子完全可以解释成:那个女孩看见了那个拿着望远镜的男孩(即:The girl saw the-boy-with-a-telescope )。那为什么平常生活中我们每个人都能够迅速地对这种二义性进行消解呢?这背后到底隐藏着什么样的思维法则?我们留到后面解释。

1.2 贝叶斯公式

贝叶斯公式是怎么来的?

我们还是使用 wikipedia 上的一个例子:

一所学校里面有 60% 的男生,40% 的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。有了这些信息之后我们可以容易地计算“随机选取一个学生,他(她)穿长裤的概率和穿裙子的概率是多 大”,这个就是前面说的“正向概率”的计算。然而,假设你走在校园中,迎面走来一个穿长裤的学生(很不幸的是你高度近似,你只看得见他(她)穿的是否长 裤,而无法确定他(她)的性别),你能够推断出他(她)是男生的概率是多大吗?

一些认知科学的研究表明(《决策与判断》以及《Rationality for Mortals》第12章:小孩也可以解决贝叶斯问题),我们对形式化的贝叶斯问题不擅长,但对于以频率形式呈现的等价问题却很擅长。在这里,我们不妨把问题重新叙述成:你在校园里面随机游走,遇到了 N 个穿长裤的人(仍然假设你无法直接观察到他们的性别),问这 N 个人里面有多少个女生多少个男生。

你说,这还不简单:算出学校里面有多少穿长裤的,然后在这些人里面再算出有多少女生,不就行了?

我们来算一算:假设学校里面人的总数是 U 个。60% 的男生都穿长裤,于是我们得到了 U * P(Boy) * P(Pants|Boy) 个穿长裤的(男生)(其中 P(Boy) 是男生的概率 = 60%,这里可以简单的理解为男生的比例;P(Pants|Boy) 是条件概率,即在 Boy 这个条件下穿长裤的概率是多大,这里是 100% ,因为所有男生都穿长裤)。40% 的女生里面又有一半(50%)是穿长裤的,于是我们又得到了 U * P(Girl) * P(Pants|Girl) 个穿长裤的(女生)。加起来一共是 U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl) 个穿长裤的,其中有 U * P(Girl) * P(Pants|Girl) 个女生。两者一比就是你要求的答案。

下面我们把这个答案形式化一下:我们要求的是 P(Girl|Pants) (穿长裤的人里面有多少女生),我们计算的结果是 U * P(Girl) * P(Pants|Girl) / [U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl)] 。容易发现这里校园内人的总数是无关的,可以消去。于是得到

P(Girl|Pants) = P(Girl) * P(Pants|Girl) / [P(Boy) * P(Pants|Boy) + P(Girl) * P(Pants|Girl)]

注意,如果把上式收缩起来,分母其实就是 P(Pants) ,分子其实就是 P(Pants, Girl) 。而这个比例很自然地就读作:在穿长裤的人( P(Pants) )里面有多少(穿长裤)的女孩( P(Pants, Girl) )。

上式中的 Pants 和 Boy/Girl 可以指代一切东西,所以其一般形式就是:

P(B|A) = P(A|B) * P(B) / [P(A|B) * P(B) + P(A|~B) * P(~B) ]

收缩起来就是:

P(B|A) = P(AB) / P(A)

其实这个就等于:

P(B|A) * P(A) = P(AB)

难怪拉普拉斯说概率论只是把常识用数学公式表达了出来

然而,后面我们会逐渐发现,看似这么平凡的贝叶斯公式,背后却隐含着非常深刻的原理。

2. 拼写纠正

经典著作《人工智能:现代方法》的作者之一 Peter Norvig 曾经写过一篇介绍如何写一个拼写检查/纠正器的文章(原文在这里,徐宥的翻译版在这里,这篇文章很深入浅出,强烈建议读一读),里面用到的就是贝叶斯方法,这里我们不打算复述他写的文章,而是简要地将其核心思想介绍一下。

首先,我们需要询问的是:“问题是什么?

问题是我们看到用户输入了一个不在字典中的单词,我们需要去猜测:“这个家伙到底真正想输入的单词是什么呢?”用刚才我们形式化的语言来叙述就是,我们需要求:

P(我们猜测他想输入的单词 | 他实际输入的单词)

这个概率。并找出那个使得这个概率最大的猜测单词。显然,我们的猜测未必是唯一的,就像前面举的那个自然语言的歧义性的例子一样;这里,比如用户输入: thew ,那么他到底是想输入 the ,还是想输入 thaw ?到底哪个猜测可能性更大呢?幸运的是我们可以用贝叶斯公式来直接出它们各自的概率,我们不妨将我们的多个猜测记为 h1 h2 .. ( h 代表 hypothesis),它们都属于一个有限且离散的猜测空间 H (单词总共就那么多而已),将用户实际输入的单词记为 D ( D 代表 Data ,即观测数据),于是

P(我们的猜测1 | 他实际输入的单词)

可以抽象地记为:

P(h1 | D)

类似地,对于我们的猜测2,则是 P(h2 | D)。不妨统一记为:

P(h | D)

运用一次贝叶斯公式,我们得到:

P(h | D) = P(h) * P(D | h) / P(D)

对于不同的具体猜测 h1 h2 h3 .. ,P(D) 都是一样的,所以在比较 P(h1 | D) 和 P(h2 | D) 的时候我们可以忽略这个常数。即我们只需要知道:

P(h | D) ∝ P(h) * P(D | h) (注:那个符号的意思是“正比例于”,不是无穷大,注意符号右端是有一个小缺口的。)

这个式子的抽象含义是:对于给定观测数据,一个猜测是好是坏,取决于“这个猜测本身独立的可能性大小(先验概率,Prior )”和“这个猜测生成我们观测到的数据的可能性大小”(似然,Likelihood )的乘积。具体到我们的那个 thew 例子上,含义就是,用户实际是想输入 the 的可能性大小取决于 the 本身在词汇表中被使用的可能性(频繁程度)大小(先验概率)和 想打 the 却打成 thew 的可能性大小(似然)的乘积。

下面的事情就很简单了,对于我们猜测为可能的每个单词计算一下 P(h) * P(D | h) 这个值,然后取最大的,得到的就是最靠谱的猜测。

一点注记:Norvig 的拼写纠正器里面只提取了编辑距离为 2 以内的所有已知单词。这是为了避免去遍历字典中每个单词计算它们的 P(h) * P(D | h) ,但这种做法为了节省时间带来了一些误差。但话说回来难道我们人类真的回去遍历每个可能的单词来计算他们的后验概率吗?不可能。实际上,根据认知神经科学的观点,我们首先根据错误的单词做一个 bottom-up 的关联提取,提取出有可能是实际单词的那些候选单词,这个提取过程就是所谓的基于内容的提取,可以根据错误单词的一些模式片段提取出有限的一组候选,非常快地缩小的搜索空间(比如我输入 explaination ,单词里面就有充分的信息使得我们的大脑在常数时间内把可能性 narrow down 到 explanation 这个单词上,至于具体是根据哪些线索——如音节——来提取,又是如何在生物神经网络中实现这个提取机制的,目前还是一个没有弄清的领域)。然后,我们对这有限的几个猜测做一个 top-down 的预测,看看到底哪个对于观测数据(即错误单词)的预测效力最好,而如何衡量预测效率则就是用贝叶斯公式里面的那个 P(h) * P(D | h) 了——虽然我们很可能使用了一些启发法来简化计算。后面我们还会提到这样的 bottom-up 的关联提取。

3. 模型比较与奥卡姆剃刀

3.1 再访拼写纠正

介绍了贝叶斯拼写纠正之后,接下来的一个自然而然的问题就来了:“为什么?”为什么要用贝叶斯公式?为什么贝叶斯公式在这里可以用?我们可以很容易地领会为什么贝叶斯公式用在前面介绍的那个男生女生长裤裙子的问题里是正确的。但为什么这里?

为了回答这个问题,一个常见的思路就是想想:非得这样吗?因为如果你想到了另一种做法并且证明了它也是靠谱的,那么将它与现在这个一比较,也许就能得出很有价值的信息。那么对于拼写纠错问题你能想到其他方案吗?

不管怎样,一个最常见的替代方案就是,选择离 thew 的编辑距离最近的。然而 the 和 thaw 离 thew 的编辑距离都是 1 。这可咋办捏?你说,不慌,那还是好办。我们就看到底哪个更可能被错打为 thew 就是了。我们注意到字母 e 和字母 w 在键盘上离得很紧,无名指一抽筋就不小心多打出一个 w 来,the 就变成 thew 了。而另一方面 thaw 被错打成 thew 的可能性就相对小一点,因为 e 和 a 离得较远而且使用的指头相差一个指头(一个是中指一个是小指,不像 e 和 w 使用的指头靠在一块——神经科学的证据表明紧邻的身体设施之间容易串位)。OK,很好,因为你现在已经是在用最大似然方法了,或者直白一点,你就是在计算那个使得 P(D | h) 最大的 h 。

而贝叶斯方法计算的是什么?是 P(h) * P(D | h) 。多出来了一个 P(h) 。我们刚才说了,这个多出来的 P(h) 是特定猜测的先验概率。为什么要掺和进一个先验概率?刚才说的那个最大似然不是挺好么?很雄辩地指出了 the 是更靠谱的猜测。有什么问题呢?既然这样,我们就从给最大似然找茬开始吧——我们假设两者的似然程度是一样或非常相近,这样不就难以区分哪个猜测更靠谱了吗?比如用户输入tlp ,那到底是 top 还是 tip ?(这个例子不怎么好,因为 top 和 tip 的词频可能仍然是接近的,但一时想不到好的英文单词的例子,我们不妨就假设 top 比 tip 常见许多吧,这个假设并不影响问题的本质。)这个时候,当最大似然不能作出决定性的判断时,先验概率就可以插手进来给出指示——“既然你无法决定,那么我告诉你,一般来说 top 出现的程度要高许多,所以更可能他想打的是 top ”)。

以上只是最大似然的一个问题,即并不能提供决策的全部信息。

最大似然还有另一个问题:即便一个猜测与数据非常符合,也并不代表这个猜测就是更好的猜测,因为这个猜测本身的可能性也许就非常低。比如 MacKay 在《Information Theory : Inference and Learning Algorithms》里面就举了一个很好的例子:-1 3 7 11 你说是等差数列更有可能呢?还是 -X^3 / 11 + 9/11*X^2 + 23/11 每项把前项作为 X 带入后计算得到的数列?此外曲线拟合也是,平面上 N 个点总是可以用 N-1 阶多项式来完全拟合,当 N 个点近似但不精确共线的时候,用 N-1 阶多项式来拟合能够精确通过每一个点,然而用直线来做拟合/线性回归的时候却会使得某些点不能位于直线上。你说到底哪个好呢?多项式?还是直线?一般地说肯定是越低阶的多项式越靠谱(当然前提是也不能忽视“似然”P(D | h) ,明摆着一个多项式分布您愣是去拿直线拟合也是不靠谱的,这就是为什么要把它们两者乘起来考虑。),原因之一就是低阶多项式更常见,先验概率( P(h) )较大(原因之二则隐藏在 P(D | h) 里面),这就是为什么我们要用样条来插值,而不是直接搞一个 N-1 阶多项式来通过任意 N 个点的原因。

以上分析当中隐含的哲学是,观测数据总是会有各种各样的误差,比如观测误差(比如你观测的时候一个 MM 经过你一不留神,手一抖就是一个误差出现了),所以如果过分去寻求能够完美解释观测数据的模型,就会落入所谓的数据过配(overfitting)的境地,一个过配的模型试图连误差(噪音)都去解释(而实际上噪音又是不需要解释的),显然就过犹不及了。所以 P(D | h) 大不代表你的 h (猜测)就是更好的 h。还要看 P(h) 是怎样的。所谓奥卡姆剃刀精神就是说:如果两个理论具有相似的解释力度,那么优先选择那个更简单的(往往也正是更平凡的,更少繁复的,更常见的)。

过分匹配的另一个原因在于当观测的结果并不是因为误差而显得“不精确”而是因为真实世界中对数据的结果产生贡献的因 素太多太多,跟噪音不同,这些偏差是一些另外的因素集体贡献的结果,不是你的模型所能解释的——噪音那是不需要解释——一个现实的模型往往只提取出几个与 结果相关度很高,很重要的因素(cause)。这个时候观察数据会倾向于围绕你的有限模型的预测结果呈正态分布,于是你实际观察到的结果就是这个正态分布的随机取样, 这个取样很可能受到其余因素的影响偏离你的模型所预测的中心,这个时候便不能贪心不足地试图通过改变模型来“完美”匹配数据,因为那些使结果偏离你的预测 的贡献因素不是你这个有限模型里面含有的因素所能概括的,硬要打肿脸充胖子只能导致不实际的模型,举个教科书例子:身高和体重的实际关系近似于一个二阶多 项式的关系,但大家都知道并不是只有身高才会对体重产生影响,物理世界影响体重的因素太多太多了,有人身材高大却瘦得跟稻草,有人却是横长竖不长。但不可 否认的是总体上来说,那些特殊情况越是特殊就越是稀少,呈围绕最普遍情况(胖瘦适中)的正态分布,这个分布就保证了我们的身高——体重相关模型能够在大多 数情况下做出靠谱的预测。但是——刚才说了,特例是存在的,就算不是特例,人有胖瘦,密度也有大小,所以完美符合身高——体重的某个假想的二阶多项式关系 的人是不存在的,我们又不是欧几里德几何世界当中的理想多面体,所以,当我们对人群随机抽取了 N 个样本(数据点)试图对这 N 个数据点拟合出一个多项式的话就得注意,它肯定得是二阶多项式,我们要做的只是去根据数据点计算出多项式各项的参数(一个典型的方法就是最小二乘);它肯 定不是直线(我们又不是稻草),也不是三阶多项式四阶多项式.. 如果硬要完美拟合 N 个点,你可能会整出一个 N-1 阶多项式来——设想身高和体重的关系是 5 阶多项式看看?

3.2 模型比较理论(Model Comparasion)与贝叶斯奥卡姆剃刀(Bayesian Occam’s Razor)

实际上,模型比较就是去比较哪个模型(猜测)更可能隐藏在观察数据的背后。其基本思想前面已经用拼写纠正的例子来说明了。我们对用户实际想输入的单词的猜测就是模型,用户输错的单词就是观测数据。我们通过:

P(h | D) ∝ P(h) * P(D | h)

来比较哪个模型最为靠谱。前面提到,光靠 P(D | h) (即“似然”)是不够的,有时候还需要引入 P(h) 这个先验概率。奥卡姆剃刀就是说 P(h) 较大的模型有较大的优势,而最大似然则是说最符合观测数据的(即 P(D | h) 最大的)最有优势。整个模型比较就是这两方力量的拉锯。我们不妨再举一个简单的例子来说明这一精神:你随便找枚硬币,掷一下,观察一下结果。好,你观察到的结果要么是“正”,要么是“反”(不,不是少林足球那枚硬币:P ),不妨假设你观察到的是“正”。现在你要去根据这个观测数据推断这枚硬币掷出“正”的概率是多大。根据最大似然估计的精神,我们应该猜测这枚硬币掷出“正”的概率是 1 ,因为这个才是能最大化 P(D | h) 的那个猜测。然而每个人都会大摇其头——很显然,你随机摸出一枚硬币这枚硬币居然没有反面的概率是“不存在的”,我们对一枚随机硬币是否一枚有偏硬币,偏了多少,是有着一个先验的认识的,这个认识就是绝大多数硬币都是基本公平的,偏得越多的硬币越少见(可以用一个 beta 分布来表达这一先验概率)。将这个先验正态分布 p(θ) (其中 θ 表示硬币掷出正面的比例,小写的 p 代表这是概率密度函数)结合到我们的问题中,我们便不是去最大化 P(D | h) ,而是去最大化 P(D | θ) * p(θ) ,显然 θ = 1 是不行的,因为 P(θ=1) 为 0 ,导致整个乘积也为 0 。实际上,只要对这个式子求一个导数就可以得到最值点。

以上说的是当我们知道先验概率 P(h) 的时候,光用最大似然是不靠谱的,因为最大似然的猜测可能先验概率非常小。然而,有些时候,我们对于先验概率一无所知,只能假设每种猜测的先验概率是均等 的,这个时候就只有用最大似然了。实际上,统计学家和贝叶斯学家有一个有趣的争论,统计学家说:我们让数据自己说话。言下之意就是要摒弃先验概率。而贝叶 斯支持者则说:数据会有各种各样的偏差,而一个靠谱的先验概率则可以对这些随机噪音做到健壮。事实证明贝叶斯派胜利了,胜利的关键在于所谓先验概率其实也 是经验统计的结果,譬如为什么我们会认为绝大多数硬币是基本公平的?为什么我们认为大多数人的肥胖适中?为什么我们认为肤色是种族相关的,而体重则与种族 无关?先验概率里面的“先验”并不是指先于一切经验,而是仅指先于我们“当前”给出的观测数据而已,在硬币的例子中先验指的只是先于我们知道投掷的结果这 个经验,而并非“先天”。

然而,话说回来,有时候我们必须得承认,就算是基于以往的经验,我们手头的“先验”概率还是均匀分布,这个时候就必须依赖用最大似然,我们用前面留下的一个自然语言二义性问题来说明这一点:

The girl saw the boy with a telescope.

到底是 The girl saw-with-a-telescope the boy 这一语法结构,还是 The girl saw the-boy-with-a-telescope 呢?两种语法结构的常见程度都差不多(你可能会觉得后一种语法结构的常见程度较低,这是事后偏见,你只需想想 The girl saw the boy with a book 就知道了。当然,实际上从大规模语料统计结果来看后一种语法结构的确稍稍不常见一丁点,但是绝对不足以解释我们对第一种结构的强烈倾向)。那么到底为什么呢?

我们不妨先来看看 MacKay 在书中举的一个漂亮的例子:

图中有多少个箱子?特别地,那棵书后面是一个箱子?还是两个箱子?还是三个箱子?还是.. 你可能会觉得树后面肯定是一个箱子,但为什么不是两个呢?如下图:

很简单,你会说:要是真的有两个箱子那才怪了,怎么就那么巧这两个箱子刚刚好颜色相同,高度相同呢?

用概率论的语言来说,你刚才的话就翻译为:猜测 h 不成立,因为 P(D | h) 太小(太巧合)了。我们的直觉是:巧合(小概率)事件不会发生。所以当一个猜测(假设)使得我们的观测结果成为小概率事件的时候,我们就说“才怪呢,哪能那么巧捏?!”

现在我们可以回到那个自然语言二义性的例子,并给出一个完美的解释了:如果语法结构是 The girl saw the-boy-with-a-telecope 的话,怎么那个男孩偏偏手里拿的就是望远镜——一个可以被用来 saw-with 的东东捏?这也忒小概率了吧。他咋就不会拿本书呢?拿什么都好。怎么偏偏就拿了望远镜?所以唯一的解释是,这个“巧合”背后肯定有它的必然性,这个必然性就是,如果我们将语法结构解释为 The girl saw-with-a-telescope the boy 的话,就跟数据完美吻合了——既然那个女孩是用某个东西去看这个男孩的,那么这个东西是一个望远镜就完全可以解释了(不再是小概率事件了)。

自然语言二义性很常见,譬如上文中的一句话:

参见《决策与判断》以及《Rationality for Mortals》第12章:小孩也可以解决贝叶斯问题

就有二义性:到底是参见这两本书的第 12 章,还是仅仅是第二本书的第 12 章呢?如果是这两本书的第 12 章那就是咄咄怪事了,怎么恰好两本书都有第 12 章,都是讲同一个问题,更诡异的是,标题还相同呢?

注意,以上做的是似然估计(即只看 P(D | h) 的大小),不含先验概率。通过这两个例子,尤其是那个树后面的箱子的例子我们可以看到,似然估计里面也蕴含着奥卡姆剃刀:树后面的箱子数目越多,这个模型就越复杂。单个箱子的模型是最简单的。似然估计选择了更简单的模型。

这个就是所谓的贝叶斯奥卡姆剃刀(Bayesian Occam’s Razor),因为这个剃刀工作在贝叶斯公式的似然(P(D | h) )上,而不是模型本身( P(h) )的先验概率上,后者是传统的奥卡姆剃刀。关于贝叶斯奥卡姆剃刀我们再来看一个前面说到的曲线拟合的例子:如果平面上有 N 个点,近似构成一条直线,但绝不精确地位于一条直线上。这时我们既可以用直线来拟合(模型1),也可以用二阶多项式(模型2)拟合,也可以用三阶多项式 (模型3),.. ,特别地,用 N-1 阶多项式便能够保证肯定能完美通过 N 个数据点。那么,这些可能的模型之中到底哪个是最靠谱的呢?前面提到,一个衡量的依据是奥卡姆剃刀:越是高阶的多项式越是繁复和不常见。然而,我们其实并 不需要依赖于这个先验的奥卡姆剃刀,因为有人可能会争辩说:你怎么就能说越高阶的多项式越不常见呢?我偏偏觉得所有阶多项式都是等可能的。好吧,既然如此 那我们不妨就扔掉 P(h) 项,看看 P(D | h) 能告诉我们什么。我们注意到越是高阶的多项式,它的轨迹弯曲程度越是大,到了八九阶简直就是直上直下,于是我们不仅要问:一个比如说八阶多项式在平面上随 机生成的一堆 N 个点偏偏恰好近似构成一条直线的概率(即 P(D | h) )有多大?太小太小了。反之,如果背后的模型是一条直线,那么根据该模型生成一堆近似构成直线的点的概率就大得多了。这就是贝叶斯奥卡姆剃刀。

这里只是提供一个关于贝叶斯奥卡姆剃刀的科普,强调直观解释,更多理论公式请参考 MacKay 的著作 《Information Theory : Inference and Learning Algorithms》第 28 章。

3.3 最小描述长度原则

贝叶斯模型比较理论与信息论有一个有趣的关联:

P(h | D) ∝ P(h) * P(D | h)

两边求对数,将右式的乘积变成相加:

ln P(h | D) ∝ ln P(h) + ln P(D | h)

显然,最大化 P(h | D) 也就是最大化 ln P(h | D)。而 ln P(h) + ln P(D | h) 则可以解释为模型(或者称“假设”、“猜测”)h 的编码长度加上在该模型下数据 D 的编码长度。使这个和最小的模型就是最佳模型。

而究竟如何定义一个模型的编码长度,以及数据在模型下的编码长度则是一个问题。更多可参考 Mitchell 的 《Machine Learning》的 6.6 节,或 Mackay 的 28.3 节)

3.4 最优贝叶斯推理

所谓的推理,分为两个过程,第一步是对观测数据建立一个模型。第二步则是使用这个模型来推测未知现象发生的概率。我 们前面都是讲的对于观测数据给出最靠谱的那个模型。然而很多时候,虽然某个模型是所有模型里面最靠谱的,但是别的模型也并不是一点机会都没有。譬如第一个 模型在观测数据下的概率是 0.5 。第二个模型是 0.4 ,第三个是 0.1 。如果我们只想知道对于观测数据哪个模型最可能,那么只要取第一个就行了,故事到此结束。然而很多时候我们建立模型是为了推测未知的事情的发生概率,这个 时候,三个模型对未知的事情发生的概率都会有自己的预测,仅仅因为某一个模型概率稍大一点就只听他一个人的就太不民主了。所谓的最优贝叶斯推理就是将三个 模型对于未知数据的预测结论加权平均起来(权值就是模型相应的概率)。显然,这个推理是理论上的制高点,无法再优了,因为它已经把所有可能性都考虑进去 了。

只不过实际上我们是基本不会使用这个框架的,因为计算模型可能非常费时间,二来模型空间可能是连续的,即有无穷多个模型(这个时候需要计算模型的概率分布)。结果还是非常费时间。所以这个被看作是一个理论基准。

4. 无处不在的贝叶斯

以下我们再举一些实际例子来说明贝叶斯方法被运用的普遍性,这里主要集中在机器学习方面,因为我不是学经济的,否则还可以找到一堆经济学的例子。

4.1 中文分词

贝叶斯是机器学习的核心方法之一。比如中文分词领域就用到了贝叶斯。Google 研究员吴军在《数学之美》系列中就有一篇是介绍中文分词的,这里只介绍一下核心的思想,不做赘述,详细请参考吴军的文章(这里)。

分词问题的描述为:给定一个句子(字串),如:

南京市长江大桥

如何对这个句子进行分词(词串)才是最靠谱的。例如:

1. 南京市/长江大桥

2. 南京/市长/江大桥

这两个分词,到底哪个更靠谱呢?

我们用贝叶斯公式来形式化地描述这个问题,令 X 为字串(句子),Y 为词串(一种特定的分词假设)。我们就是需要寻找使得 P(Y|X) 最大的 Y ,使用一次贝叶斯可得:

P(Y|X) ∝ P(Y)*P(X|Y)

用自然语言来说就是 这种分词方式(词串)的可能性 乘以 这个词串生成我们的句子的可能性。我们进一步容易看到:可以近似地将 P(X|Y) 看作是恒等于 1 的,因为任意假想的一种分词方式之下生成我们的句子总是精准地生成的(只需把分词之间的分界符号扔掉即可)。于是,我们就变成了去最大化 P(Y) ,也就是寻找一种分词使得这个词串(句子)的概率最大化。而如何计算一个词串:

W1, W2, W3, W4 ..

的可能性呢?我们知道,根据联合概率的公式展开:P(W1, W2, W3, W4 ..) = P(W1) * P(W2|W1) * P(W3|W2, W1) * P(W4|W1,W2,W3) * .. 于是我们可以通过一系列的条件概率(右式)的乘积来求整个联合概率。然而不幸的是随着条件数目的增加(P(Wn|Wn-1,Wn-2,..,W1) 的条件有 n-1 个),数据稀疏问题也会越来越严重,即便语料库再大也无法统计出一个靠谱的 P(Wn|Wn-1,Wn-2,..,W1) 来。为了缓解这个问题,计算机科学家们一如既往地使用了“天真”假设:我们假设句子中一个词的出现概率只依赖于它前面的有限的 k 个词(k 一般不超过 3,如果只依赖于前面的一个词,就是2元语言模型(2- gram),同理有 3-gram 、 4-gram 等),这个就是所谓的“有限地平线”假设。虽然这个假设很傻很天真,但结果却表明它的结果往往是很好很强大的,后面要提到的朴素贝叶斯方法使用的假设跟这 个精神上是完全一致的,我们会解释为什么像这样一个天真的假设能够得到强大的结果。目前我们只要知道,有了这个假设,刚才那个乘积就可以改写成: P(W1) * P(W2|W1) * P(W3|W2) * P(W4|W3) .. (假设每个词只依赖于它前面的一个词)。而统计 P(W2|W1) 就不再受到数据稀疏问题的困扰了。对于我们上面提到的例子“南京市长江大桥”,如果按照自左到右的贪婪方法分词的话,结果就成了“南京市长/江大桥”。但 如果按照贝叶斯分词的话(假设使用 3-gram),由于“南京市长”和“江大桥”在语料库中一起出现的频率为 0 ,这个整句的概率便会被判定为 0 。 从而使得“南京市/长江大桥”这一分词方式胜出。

一点注记:有人可能会疑惑,难道我们人类也是基于这些天真的假设来进行推理的? 不是的。事实上,统计机器学习方法所统计的东西往往处于相当表层(shallow)的层面,在这个层面机器学习只能看到一些非常表面的现象,有一点科学研 究的理念的人都知道:越是往表层去,世界就越是繁复多变。从机器学习的角度来说,特征(feature)就越多,成百上千维度都是可能的。特征一多,好 了,高维诅咒就 产生了,数据就稀疏得要命,不够用了。而我们人类的观察水平显然比机器学习的观察水平要更深入一些,为了避免数据稀疏我们不断地发明各种装置(最典型就是 显微镜),来帮助我们直接深入到更深层的事物层面去观察更本质的联系,而不是在浅层对表面现象作统计归纳。举一个简单的例子,通过对大规模语料库的统计, 机器学习可能会发现这样一个规律:所有的“他”都是不会穿 bra 的,所有的“她”则都是穿的。然而,作为一个男人,却完全无需进行任何统计学习,因为深层的规律就决定了我们根本不会去穿 bra 。至于机器学习能不能完成后者(像人类那样的)这个推理,则是人工智能领域的经典问题。至少在那之前,声称统计学习方法能够终结科学研究原文)的说法是纯粹外行人说的话

4.2 统计机器翻译

统计机器翻译因为其简单,自动(无需手动添加规则),迅速成为了机器翻译的事实标准。而统计机器翻译的核心算法也是使用的贝叶斯方法。

问题是什么?统计机器翻译的问题可以描述为:给定一个句子 e ,它的可能的外文翻译 f 中哪个是最靠谱的。即我们需要计算:P(f|e) 。一旦出现条件概率贝叶斯总是挺身而出:

P(f|e) ∝ P(f) * P(e|f)

这个式子的右端很容易解释:那些先验概率较高,并且更可能生成句子 e 的外文句子 f 将会胜出。我们只需简单统计(结合上面提到的 N-Gram 语言模型)就可以统计任意一个外文句子 f 的出现概率。然而 P(e|f) 却不是那么好求的,给定一个候选的外文局子 f ,它生成(或对应)句子 e 的概率是多大呢?我们需要定义什么叫 “对应”,这里需要用到一个分词对齐的平行语料库,有兴趣的可以参考 《Foundations of Statistical Natural Language Processing》第 13 章,这里摘选其中的一个例子:假设 e 为:John loves Mary 。我们需要考察的首选 f 是:Jean aime Marie (法文)。我们需要求出 P(e|f) 是多大,为此我们考虑 e 和 f 有多少种对齐的可能性,如:

John (Jean) loves (aime) Marie (Mary)

就是其中的一种(最靠谱的)对齐,为什么要对齐,是因为一旦对齐了之后,就可以容易地计算在这个对齐之下的 P(e|f) 是多大,只需计算:

P(John|Jean) * P(loves|aime) * P(Marie|Mary)

即可。

然后我们遍历所有的对齐方式,并将每种对齐方式之下的翻译概率 ∑ 求和。便可以获得整个的 P(e|f) 是多大。

一点注记:还是那个问题:难道我们人类真的是用这种方式进行翻译的?highly unlikely 。这种计算复杂性非常高的东西连三位数乘法都搞不定的我们才不会笨到去使用呢。根据认知神经科学的认识,很可能我们是先从句子到语义(一个逐层往上(bottom-up)抽象的 folding 过程),然后从语义根据另一门语言的语法展开为另一门语言(一个逐层往下(top-down)的具体化 unfolding 过程)。如何可计算地实现这个过程,目前仍然是个难题。(我们看到很多地方都有 bottom-up/top-down 这样一个对称的过程,实际上有人猜测这正是生物神经网络原则上的运作方式,对视觉神经系统的研究尤其证明了这一点,Hawkins 在 《On Intelligence》 里面提出了一种 HTM (Hierarchical Temporal Memory)模型正是使用了这个原则。)

4.3 贝叶斯图像识别,Analysis by Synthesis

贝叶斯方法是一个非常 general 的推理框架。其核心理念可以描述成:Analysis by Synthesis (通过合成来分析)。06 年的认知科学新进展上有一篇 paper 就是讲用贝叶斯推理来解释视觉识别的,一图胜千言,下图就是摘自这篇 paper :

首先是视觉系统提取图形的边角特征,然后使用这些特征自底向上地激活高层的抽象概念(比如是 E 还是 F 还是等号),然后使用一个自顶向下的验证来比较到底哪个概念最佳地解释了观察到的图像。

4.4  EM 算法与基于模型的聚类

聚类是一种无指导的机器学习问题,问题描述:给你一堆数据点,让你将它们最靠谱地分成一堆一堆的。聚类算法很多,不同的算法适应于不同的问题,这里仅介绍一个基于模型的聚类,该聚类算法对数据点的假设是,这些数据点分别是围绕 K 个核心的 K 个正态分布源所随机生成的,使用 Han JiaWei 的《Data Ming: Concepts and Techniques》中的图:

图中有两个正态分布核心,生成了大致两堆点。我们的聚类算法就是需要根据给出来的那些点,算出这两个正态分布的核心 在什么位置,以及分布的参数是多少。这很明显又是一个贝叶斯问题,但这次不同的是,答案是连续的且有无穷多种可能性,更糟的是,只有当我们知道了哪些点属 于同一个正态分布圈的时候才能够对这个分布的参数作出靠谱的预测,现在两堆点混在一块我们又不知道哪些点属于第一个正态分布,哪些属于第二个。反过来,只 有当我们对分布的参数作出了靠谱的预测时候,才能知道到底哪些点属于第一个分布,那些点属于第二个分布。这就成了一个先有鸡还是先有蛋的问题了。为了解决 这个循环依赖,总有一方要先打破僵局,说,不管了,我先随便整一个值出来,看你怎么变,然后我再根据你的变化调整我的变化,然后如此迭代着不断互相推导, 最终收敛到一个解。这就是 EM 算法。

EM 的意思是“Expectation-Maximazation”,在这个聚类问题里面,我们是先随便猜一下这两个正态分布的参数:如核心在什么地方,方差是多少。然后计算出每个数据点更可能属于第一个还是第二个正态分布圈,这个是属于 Expectation 一步。有了每个数据点的归属,我们就可以根据属于第一个分布的数据点来重新评估第一个分布的参数(从蛋再回到鸡),这个是 Maximazation 。如此往复,直到参数基本不再发生变化为止。这个迭代收敛过程中的贝叶斯方法在第二步,根据数据点求分布的参数上面。

4.5 最大似然与最小二乘

学过线性代数的大概都知道经典的最小二乘方法来做线性回归。问题描述是:给定平面上 N 个点,(这里不妨假设我们想用一条直线来拟合这些点——回归可以看作是拟合的特例,即允许误差的拟合),找出一条最佳描述了这些点的直线。

一个接踵而来的问题就是,我们如何定义最佳?我们设每个点的坐标为 (Xi, Yi) 。如果直线为 y = f(x) 。那么 (Xi, Yi) 跟直线对这个点的“预测”:(Xi, f(Xi)) 就相差了一个 ΔYi = |Yi – f(Xi)| 。最小二乘就是说寻找直线使得 (ΔY1)^2 + (ΔY2)^2 + .. (即误差的平方和)最小,至于为什么是误差的平方和而不是误差的绝对值和,统计学上也没有什么好的解释。然而贝叶斯方法却能对此提供一个完美的解释。

我们假设直线对于坐标 Xi 给出的预测 f(Xi) 是最靠谱的预测,所有纵坐标偏离 f(Xi) 的那些数据点都含有噪音,是噪音使得它们偏离了完美的一条直线,一个合理的假设就是偏离路线越远的概率越小,具体小多少,可以用一个正态分布曲线来模拟,这个分布曲线以直线对 Xi 给出的预测 f(Xi) 为中心,实际纵坐标为 Yi 的点 (Xi, Yi) 发生的概率就正比于 EXP[-(ΔYi)^2]。(EXP(..) 代表以常数 e 为底的多少次方)。

现在我们回到问题的贝叶斯方面,我们要想最大化的后验概率是:

P(h|D) ∝ P(h) * P(D|h)

又见贝叶斯!这里 h 就是指一条特定的直线,D 就是指这 N 个数据点。我们需要寻找一条直线 h 使得 P(h) * P(D|h) 最大。很显然,P(h) 这个先验概率是均匀的,因为哪条直线也不比另一条更优越。所以我们只需要看 P(D|h) 这一项,这一项是指这条直线生成这些数据点的概率,刚才说过了,生成数据点 (Xi, Yi) 的概率为 EXP[-(ΔYi)^2] 乘以一个常数。而 P(D|h) = P(d1|h) * P(d2|h) * .. 即假设各个数据点是独立生成的,所以可以把每个概率乘起来。于是生成 N 个数据点的概率为 EXP[-(ΔY1)^2] * EXP[-(ΔY2)^2] * EXP[-(ΔY3)^2] * .. = EXP{-[(ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + ..]} 最大化这个概率就是要最小化 (ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + .. 。 熟悉这个式子吗?

5. 朴素贝叶斯方法

朴素贝叶斯方法是一个很特别的方法,所以值得介绍一下。我们用朴素贝叶斯在垃圾邮件过滤中的应用来举例说明。

5.1 贝叶斯垃圾邮件过滤器

问题是什么?问题是,给定一封邮件,判定它是否属于垃圾邮件。按照先例,我们还是用 D 来表示这封邮件,注意 D 由 N 个单词组成。我们用 h+ 来表示垃圾邮件,h- 表示正常邮件。问题可以形式化地描述为求:

P(h+|D) = P(h+) * P(D|h+) / P(D)

P(h-|D) = P(h-) * P(D|h-) / P(D)

其中 P(h+) 和 P(h-) 这两个先验概率都是很容易求出来的,只需要计算一个邮件库里面垃圾邮件和正常邮件的比例就行了。然而 P(D|h+) 却不容易求,因为 D 里面含有 N 个单词 d1, d2, d3, .. ,所以P(D|h+) = P(d1,d2,..,dn|h+) 。我们又一次遇到了数据稀疏性,为什么这么说呢?P(d1,d2,..,dn|h+) 就是说在垃圾邮件当中出现跟我们目前这封邮件一模一样的一封邮件的概率是多大!开玩笑,每封邮件都是不同的,世界上有无穷多封邮件。瞧,这就是数据稀疏 性,因为可以肯定地说,你收集的训练数据库不管里面含了多少封邮件,也不可能找出一封跟目前这封一模一样的。结果呢?我们又该如何来计算 P(d1,d2,..,dn|h+) 呢?

我们将 P(d1,d2,..,dn|h+)  扩展为: P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1, h+) * .. 。熟悉这个式子吗?这里我们会使用一个更激进的假设,我们假设 di 与 di-1 是完全条件无关的,于是式子就简化为 P(d1|h+) * P(d2|h+) * P(d3|h+) * .. 。这个就是所谓的条件独立假设,也正是朴素贝叶斯方法的朴素之处。而计算 P(d1|h+) * P(d2|h+) * P(d3|h+) * .. 就太简单了,只要统计 di 这个单词在垃圾邮件中出现的频率即可。关于贝叶斯垃圾邮件过滤更多的内容可以参考这个条目,注意其中提到的其他资料。

一点注记:这里,为什么有这个数据稀疏问题,还是因为统计学习方法工作在浅层 面, 世界上的单词就算不再变多也是非常之多的,单词之间组成的句子也是变化多端,更不用说一篇文章了,文章数目则是无穷的,所以在这个层面作统计,肯定要被数 据稀疏性困扰。我们要注意,虽然句子和文章的数目是无限的,然而就拿邮件来说,如果我们只关心邮件中句子的语义(进而更高抽象层面的“意图”(语义,意图 如何可计算地定义出来是一个人工智能问题),在这个层面上可能性便大大缩减了,我们关心的抽象层面越高,可能性越小。单词集合和句子的对应是多对一的,句 子和语义的对应又是多对一的,语义和意图的对应还是多对一的,这是个层级体系。神经科学的发现也表明大脑的皮层大致有一种层级结构,对应着越来越抽象的各 个层面,至于如何具体实现一个可放在计算机内的大脑皮层,仍然是一个未解决问题,以上只是一个原则(principle)上的认识,只有当 computational 的 cortex 模型被建立起来了之后才可能将其放入电脑。

5.2 为什么朴素贝叶斯方法令人诧异地好——一个理论解释

朴素贝叶斯方法的条件独立假设看上去很傻很天真,为什么结果却很好很强大呢?就拿一个句子来说,我们怎么能鲁莽地声 称其中任意一个单词出现的概率只受到它前面的 3 个或 4 个单词的影响呢?别说 3 个,有时候一个单词的概率受到上一句话的影响都是绝对可能的。那么为什么这个假设在实际中的表现却不比决策树差呢?有人对此提出了一个理论解释,并且建立 了什么时候朴素贝叶斯的效果能够等价于非朴素贝叶斯的充要条件,这个解释的核心就是:有些独立假设在各个分类之间的分布都是均匀的所以对于似然的相对大小 不产生影响;即便不是如此,也有很大的可能性各个独立假设所产生的消极影响或积极影响互相抵消,最终导致结果受到的影响不大。具体的数学公式请参考这篇 paper

6. 层级贝叶斯模型

层级贝叶斯模型是现代贝叶斯方法的标志性建筑之一。前面讲的贝叶斯,都是在同一个事物层次上的各个因素之间进行统计推理,然而层次贝叶斯模型在哲学上更深入了一层,将这些因素背后的因素(原因的原因,原因的原因,以此类推)囊括进来。一个教科书例子是:如果你手头有 N 枚硬币,它们是同一个工厂铸出来的,你把每一枚硬币掷出一个结果,然后基于这 N 个结果对这 N 个硬币的 θ (出现正面的比例)进行推理。如果根据最大似然,每个硬币的 θ 不是 1 就是 0 (这个前面提到过的),然而我们又知道每个硬币的 p(θ) 是有一个先验概率的,也许是一个 beta 分布。也就是说,每个硬币的实际投掷结果 Xi 服从以 θ 为中心的正态分布,而 θ 又服从另一个以 Ψ 为中心的 beta 分布。层层因果关系就体现出来了。进而 Ψ 还可能依赖于因果链上更上层的因素,以此类推。

6.1 隐马可夫模型(HMM)

吴军在数学之美系列里面介绍的隐马可夫模型(HMM)就是一个简单的层级贝叶斯模型:

那么怎么根据接收到的信息来推测说话者想表达的意思呢?我们可以利用叫做“隐含马尔可夫模型”(Hidden Markov Model)来解决这些问题。以语音识别为例,当我们观测到语音信号 o1,o2,o3 时,我们要根据这组信号推测出发送的句子 s1,s2,s3。显然,我们应该在所有可能的句子中找最有可能性的一个。用数学语言来描述,就是在已知 o1,o2,o3,...的情况下,求使得条件概率 P (s1,s2,s3,...|o1,o2,o3....) 达到最大值的那个句子 s1,s2,s3,...

吴军的文章中这里省掉没说的是,s1, s2, s3, .. 这个句子的生成概率同时又取决于一组参数,这组参数决定了 s1, s2, s3, .. 这个马可夫链的先验生成概率。如果我们将这组参数记为 λ ,我们实际上要求的是:P(S|O, λ) (其中 O 表示 o1,o2,o3,.. ,S表示 s1,s2,s3,..)

当然,上面的概率不容易直接求出,于是我们可以间接地计算它。利用贝叶斯公式并且省掉一个常数项,可以把上述公式等价变换成

P(o1,o2,o3,...|s1,s2,s3....) * P(s1,s2,s3,...)

其中

P(o1,o2,o3,...|s1,s2,s3....) 表示某句话 s1,s2,s3...被读成 o1,o2,o3,...的可能性, 而 P(s1,s2,s3,...) 表示字串 s1,s2,s3,...本身能够成为一个合乎情理的句子的可能性,所以这个公式的意义是用发送信号为 s1,s2,s3...这个数列的可能性乘以 s1,s2,s3.. 本身可以一个句子的可能性,得出概率。

这里,s1,s2,s3...本身可以一个句子的可能性其实就取决于参数 λ ,也就是语言模型。所以简而言之就是发出的语音信号取决于背后实际想发出的句子,而背后实际想发出的句子本身的独立先验概率又取决于语言模型。

7. 贝叶斯网络

吴军已经对贝叶斯网络作了科普,请直接跳转到这里。更详细的理论参考所有机器学习的书上都有。

参考资料:

一堆机器学习,一堆概率统计,一堆 Google ,和一堆 Wikipedia 条目,一堆 paper 。

2012年3月5日 | 归档于 数据挖掘
标签:

[转]贝叶斯、概率分布与机器学习

本文由LeftNotEasy原创,可以转载,但请保留出处和此行,如果有商业用途,请联系作者 wheeleast@gmail.com

 

一. 简单的说贝叶斯定理:

贝叶斯定理用数学的方法来解释生活中大家都知道的常识

形式最简单的定理往往是最好的定理,比如说中心极限定理,这样的定理往往会成为某一个领域的理论基础。机器学习的各种算法中使用的方法,最常见的就是贝叶斯定理。

贝叶斯定理的发现过程我没有找到相应的资料,不过我相信托马斯.贝叶斯(1702-1761)是通过生活中的一些小问题去发现这个对后世影响深远的定理的,而且我相信贝叶斯发现这个定理的时候,还不知道它居然有这么大的威力呢。下面我用一个小例子来推出贝叶斯定理:

已知:有N个苹果,和M个梨子,苹果为黄色的概率为20%,梨子为黄色的概率为80%,问,假如我在这堆水果中观察到了一个黄色的水果,问这个水果是梨子的概率是多少。

用数学的语言来表达,就是已知P(apple) = N / (N + M), P(pear) = M / (N + M), P(yellow|apple) = 20%, P(yellow|pear) = 80%, 求P(pear|yellow).

要想得到这个答案,我们需要 1. 要求出全部水果中为黄色的水果数目。 2. 求出黄色的梨子数目

对于1) 我们可以得到 P(yellow) * (N + M), P(yellow) = p(apple) * P(yellow|apple) + P(pear) * p(yellow|pear)

对于2) 我们可以得到 P(yellow|pear) * M

2) / 1) 可得:P(pear|yellow) = P(yellow|pear) * p(pear) / [P(apple) * P(yellow|apple) + P(pear) * P(yellow|pear)]

化 简可得:P(pear|yellow) = P(yellow,pear) / P(yellow), 用简单的话来表示就是在已知是黄色的,能推出是梨子的概率P(pear|yellow)是黄色的梨子占全部水果的概率P(yellow,pear)除上水 果颜色是黄色的概率P(yellow). 这个公式很简单吧。

我们将梨子代换为A,黄色代换为B公式可以写成:P(A|B) = P(A,B) / P(B), 可得:P(A,B) = P(A|B) * P(B).贝叶斯公式就这样推出来了。

本文的一个大概的思路:先讲一讲我概括出的一个基本的贝叶斯学习框架,然后再举几个简单的例子说明这些框架,最后再举出一个复杂一点的例子,也都是以贝叶斯机器学习框架中的模块来讲解

 

二. 贝叶斯机器学习框架

对于贝叶斯学习,我每本书都有每本书的观点和讲解的方式方法,有些讲得很生动,有些讲得很突兀,对于贝叶斯学习里面到底由几个模块组成的,我一直没有看到很官方的说法,我觉得要理解贝叶斯学习,下面几个模块是必须的:

1) 贝叶斯公式

机器学习问题中有一大类是分类问题,就是在给定观测数据D的情况下,求出其属于类别(也可以称为是假设h,h ∈ {h0, h1, h2…})的概率是多少, 也就是求出:

P(h|D), 可得:

P(h,D) = P(h|D) * P(D) = P(D|h) * P(h), 所以:P(h|D) = P(D|h) * P(h) / P(D), 对于一个数据集下面的所有数据,P(D),恒定不变。所以可以认为P(D)为常数, 得到:P(h|D) ∝ P(D|h) * P(h)。我们往往不用知道P(h|D)的具体的值,而是知道例如P(h1|D),P(h2|D)值的大小关系就是了。这个公式就是机器学习中的贝叶斯公 式,一般来说我们称P(h|D)为模型的后验概率,就是从数据来得到假设的概率,P(h)称为先验概率,就是假设空间里面的概率,P(D|h)是模型的 likelihood概率。

Likelihood(似然)这个概率比较容易让人迷惑,可以认为是已知假设的情况下,求出从假设推出数据的概率,在实际的机器学习过程中,往往加入了很多的假设,比如一个英文翻译法文的问题:

给 出一个英文句子,问哪一个法文句子是最靠谱的,P(f=法文句子|e=英文句子) = P(e|f) * p(f), p(e|f)就是likelihood函数,P(e|f) 写成下面的更清晰一点:p(e|f∈{f1,f2…})可以认为,从输入的英文句子e,推出了很多种不同的法文句子f,p(e|f)就是从这些法文句子中 的某一个推出原句子e的概率。

本文之后的内容也将对文章中没有提到的一些内容,也是贝叶斯学习中容易疑惑、忽略、但是很重要的问题进行一些解释

2) 先验分布估计,likelihood函数选择

贝叶斯方法中,等号右边有两个部分,先验概率与likelihood函数。先验概率是得到,在假设空间中,某一个假设出现的概率是多少,比如说在街上看到一个动物是长有毛的,问1. 这个动物是哈巴狗的概率是多少,2. 这个动物是爪哇虎的概率是多少, 见下图:

clip_image002

虽然两个假设的likelihood函数都非常的接近于1(除非这个动物病了),但是由于爪哇虎已经灭绝了,所以爪哇虎的先验概率为0,所以P(爪哇虎|有毛的动物)的概率也为0。

先验概率分布估计

在 观测的时候,对于变量是连续的情况下,往往需要一个先验分布来得到稀疏数据集中没有出现过的,给出的某一个假设,在假设空间中的概率。比如说有一个很大很 大的均匀金属圆盘,问这个金属圆盘抛到空中掉下来,正面朝上的概率,这个实验的成本比较高(金属圆盘又大又重),所以只能进行有限次数的实验,可能出现的 是,正面向上4次,反面向上1次,但是我们如果完全根据这个数据集去计算先验概率,可能会出现很大的偏差。不过由于我们已知圆盘是均匀的,我们可以根据这 个知识,假设P(X=正面) = 0.5。

我们有的时候,已知了分布的类型,但是不知道分布的参数,还需要根据输入的数据,对分布的参 数进行估计、甚至对分布还需要进行一些修正,以满足我们算法的需求:比如说我们已知某一个变量x的分布是在某一个连续区间均匀分布,我们观察了1000次 该变量,从小到大排序结果是:1,1.12,1.5 … 199.6, 200, 那我们是否就可以估计变量的分布是从[1,200]均匀分布的?如果出现一个变量是0.995,那我们就能说P(0.995) = 0?如果出现一个200.15怎么办呢?所以我们这个时候可能需要对概率的分布进行一定的调整,可能在x<1,x>200的范围内的概率是一 个下降的直线,整个概率密度函数可能是一个梯形的,或者对区域外的值可以给一个很小很小的概率。这个我在之后还将会举出一些例子来说明。

Likelihood函数选择

对 于同一个模型,likelihood函数可能有不同的选择,对于这些选择,可能有些比较精确、但是会搜索非常大的空间,可能有些比较粗糙,但是速度会比较 快,我们需要选择不同的likelihood函数来计算后验概率。对于这些Likelihood函数,可能还需要加上一些平滑等技巧来使得最大的降低数据 中噪声、或者假设的缺陷对结果的影响。

我所理解的用贝叶斯的方法来估计给定数据的假设的后验概率,就是通过prior * likelihood,变换到后验分布。是一个分布变换的过程。

3) loss function(损失函数)

clip_image003

x是输入的数据,y(x)是推测出的结果的模型,t是x对应的真实结果,L(t,y(x))就是loss function,E[L]表示使用模型y进行预测,使用L作为损失函数的情况下,模型的损失时多少。通常来说,衡量一个模型是否能够准确的得到结果,损 失函数是最有效的一个办法,最常用、最简单的一种损失函数是:

clip_image004

不过我一直不知道为什么这里用的平方,而不是直接用绝对值,有详细一点的解释吗?:-p

4) Model Selection(模型选择)

前 文说到了对于likelihood函数可以有不同的选择,对于先验的概率也可以有不同的选择,不过假设我们一个构造完整的测试集和一个恰当的损失函数,最 终的结果将会是确定的,量化的,我们很容易得到两个不同参数、方法的模型的优劣性。不过通常情况下,我们的测试集是不够完整,我们的损失函数也是不那么 的精确,所以对于在这个测试集上表现得非常完美的模型,我们常常可能还需要打一个问号,是否是训练集和测试集过于相像,模型又过于复杂。导致了over- fitting(后文将会详细介绍over-fitting的产生)?

Model Selection本质上来说是对模型的复杂度与模型的准确性做一个平衡,本文后面将有一些类似的例子。

 

 

Example 1:Sequential 概率估计

注:此例子来自PRML chapter 2.1.1

对于概率密度的估计,有很多的方法,其中一种方法叫做Sequential 概率估计。

这种方法是一个增量的学习过程,在每看到一个样本的时候都是把之前观测的数据作为先验概率,然后在得到新数据的后验概率后,再把当前的后验概率作为下一次预测时候的先验概率。

传统的二项式分布是:

clip_image005

由于传统的二项式分布的概率μ是完全根据先验概率而得到的,而这个先验分布之前也提到过,可能会由于实验次数不够而有很大的偏差,而且,我们无法得知μ的分布,只知道一个μ的期望,这样对于某些机器学习的方法是不利的。为了减少先验分布对μ的影响,获取μ的分布,我们加入了两个参数,a,b,表示X=0与X=1的出现的次数,这个取值将会改变μ的分布,beta分布的公式如下:

clip_image006

对于不同a,b的取值,将会对μ的概率密度函数产生下面的影响:(图片来自PRML)

clip_image008

在观测数据的过程中,我们可以随时的利用观测数据的结果,改变当前μ的先验分布。我们可以将Beta分布加入两个参数,m,l,表示观测到的X=0,X=1的次数。(之前的a,b是一个先验的次数,不是当前观测到的)

我们令:

clip_image009

a’,b’表示加入了观测结果的新的a,b 。带入原式,可以得到

clip_image010

我们可以利用观测后的μ后验概率更新μ的先验概率,以进行下一次的观测,这样对不时能够得到新的数据,并且需要real-time给出结果的情况下很有用。不过Sequential方法有对数据一个i.i.d(独立同分布)的假设。要求每次处理的数据都是独立同分布的。

 

Example 2:拼写检查

这篇文章的中心思想来自:怎样写一个拼写检查器,如果有必要,请参见原文,本例子主要谈谈先验分布对结果的影响。

直接给出拼写检查器的贝叶斯公式:

clip_image011

P(c|w) 表示,单词w(wrong)正确的拼写为单词c(correct)的概率,P(w|c)表示likelihood函数,在这里我们就简单的认 为,两个单词的编辑距离就是它们之间的likelihood,P(c)表示,单词c在整体文档集合中的概率,也就是单词c的先验概率。

我 们在做单词拼写检查的时候肯定会直观的考虑:如果用户输入的单词如果在字典中没有出现过,则应该将其修正为一个字典中出现了的,而且与用户输入最接近的 词;如果用户输入的词在字典中出现过了,但是词频非常的小,则我们可以为用户推荐一个比较接近这个单词,但是词频比较高的词。

先验概率 P(c)的统计是一个很重要的内容,一般来说有两种可行的办法,一种是利用某些比较权威的词频字典,一种是在自己的语料库(也就是待进行拼写检查的语料) 中进行统计。我建议是用后面的方法进行统计,这样词的先验概率才会与测试的环境比较匹配。比如说一个游戏垂直搜索网站需要对用户输入的信息进行拼写纠正, 那么使用通用环境下统计出的先验概率就不太适用了。

Example 3:奥卡姆剃刀与Model Selection

给出下面的一个图:(来自Mackey的书)

问:大树背后有多少个箱子?

clip_image013

其实,答案肯定是有很多的,一个,两个,乃至N箱子都是有可能的(比如说后面有一连排的箱子,排成一条直线),我们只能看到第一个:

clip_image015

但是,最正确,也是最合理的解释,就是一个箱子,因为如果大树背后有两个乃至多个箱子,为什么从大树正面看起来,两边的高度一样,颜色也一样,这样是不是太巧合了。如果我们的模型根据这张图片,告诉我们大树背后最有可能有两个箱子,这样的模型的泛化能力是不是太差了。

所以说,本质上来说,奥卡姆剃刀,或者模型选择,也是人生活中的一种通常行为的数学表示,是一种化繁为简的过程。数学之美番外篇:平凡而又神奇的贝叶斯方法这篇文章中说的,奥卡姆剃刀工作在likelihood上,对于模型的先验分布并没有什么影响。我这里不太同意这个说法:奥卡姆剃刀是剪掉了复杂的模型,复杂的模型也是不常见的、先验概率比较低的,最终的结果是选择了先验概率比较高的模型。

Example 4: 曲线拟合:

(该例子来自PRML)

问题:给定一些列的点,x = {x1,x2...xn}, t = {t1,t2 .. tn}, 要求用一个模型去拟合这个观测,能够使得给定一个新点x', 能够给出一个t'.

clip_image017

已知给定的点是由y=2πx加上正态分布的噪声而得到的10个点,如上图。为了简单起见,我们用一个多项式去拟合这条曲线:

clip_image019

为了验证我们的公式是否正确,我们加入了一个loss function:

clip_image021

在loss function最小的情况下,我们绘制了不同维度下多项式生成的曲线:

clip_image023

在M值增高的情况下,曲线变得越来越陡峭,当M=9的时候,该曲线除了可以拟合输入样本点外,对新进来的样本点已经无法预测了。我们可以观测一下多项式的系数:

clip_image025

可以看出,当M(维度)增加的时候,系数也膨胀得很厉害,为了消除这个系数带来的影响,我们需要简化模型,我们为loss function加入一个惩罚因子:

clip_image027

我们把w的L2距离乘上一个系数λ加入新的loss function中,这就是一个奥卡姆剃刀,把原本复杂的系数变为简单的系数(如果要更具体的量化的分析,请见PRML 1.1节)。如果我们要考虑如何选择最合适的维度,我们也可以把维度作为一个loss function的一部分,这就是Model Selection的一种。

但是这个问题还没有解决得很好,目前我们得到的模型只能预测出一个准确的值:输入一个新的x,给出一个t,但是不能描述t有什么样的概率密度函数。概率密度函数是很有用的。 假如说我们的任务修正为,给出N个集合,每个集合里面有若干个点,表示一条曲线,给出一个新的点,问这个新的点最可能属于哪一条曲线。如果我们仅仅用新的 点到这些曲线的距离作为一个衡量标准,那很难得到一个比较有说服力的结果。为了能够获取t值的一个分布,我们不妨假设t属于一个均值为y(x),方差为 1/β的一个高斯分布:

clip_image029

在 之前的E(w),我们加入了一个w的L2距离,这个看起来有一点突兀的感觉,为什么要加上一个这样的距离呢?为什么不是加入一个其他的东西。我们可以用一 个贝叶斯的方法去替代它,得到一个更有说服力的结果。我们令p(w)为一个以0为均值,α为方差的高斯分布,这个分布为w在0点附近密度比较高,作为w的 先验概率,这样在计算最大化后验概率的时候,w的绝对值越小,后验概率将会越大。

clip_image031

我们可以得到新的后验概率:

clip_image033

这个式子看起来是不是有点眼熟啊?我们令λ=α/β,可以得到类似于之前损失函数的一个结果了。我们不仅还是可以根据这个函数来计算最优的拟合函数,而且可以得到相应的一个概率分布函数。可以为机器学习的很多其他的任务打下基础。

这 里还想再废话一句,其实很多机器学习里面的内容都与本处所说的曲线拟合算法类似,如果我们不用什么概率统计的知识,可以得到一个解决的方案,就像我们的第 一个曲线拟合方案一样,而且还可以拟合得很好,不过唯一缺少的就是概率分布,有了概率分布可以做很多的事情。包括分类、回归等等都需要这些东西。从本质上 来说,Beta分布和二项式分布,Dirichlet分布和多项式分布,曲线拟合中直接计算w和通过高斯分布估计w,都是类似的关系:Beta分布和 Dirichlet分布提供的是μ的先验分布。有了这个先验分布,我们可以去更好的做贝叶斯相关的事情。

后记:

本 文就写到这里,花了大概4个晚上来写这篇文章,也感谢我女朋友的支持。我也希望能够用它去总结一下最近学习的一些心得,看看是否自己能够把它讲出来。我觉 得学习的过程是一个爬山的过程,常常有的时候觉得自己快到山峰了,结果路有向下了,自己不停有着挫折和兴奋的感觉,不过学习的感觉总体来说快乐的。我也想 能够把自己的这份快乐带给大家 :-D

参考资料:

数学之美番外篇:平凡而又神奇的贝叶斯方法, Pongba

Pattern Recognition and Machine Learning, Bishop

一些Wikipedia上面的内容

2012年3月5日 | 归档于 未分类

网站推荐

1、Chinaunix 网址:http://www.chinaunix.net/ 简介:中国最大的linux/unix技术社区。

2、ITPub 网址:http://www.itpub.net/ 简介:有名气的IT技术论坛,看看它的alexa排名就知道有多火了,尤其以数据库技术讨论热烈而闻名。ITPUB论坛的前身是建立在smiling的oracle小组。

3、51cto 网址:http://www.51cto.com/ 简介:由国内知名IT门户网站管理团队,获近千万风险投资,于2005年8月正式创立,是国内首家定位于网络技术人员的综合性服务平台,是中国最大的网络技术网站

4、CSDN 网址:http://www.csdn.net/ 简介:于1999年3月成立,是中国最大的软件开发人员网站,社区热心高手众多,并有不少MVP(微软最有价值专家)长期活跃在这里,类似悬赏的积分制度,也使论坛增添不少乐趣。

5、落伍者网址:http://www.im286.com/ 简介:网站站长都应该知道的地方,只是论坛id需要手工审核。

6、蓝色理想网址:http://www.blueidea.com/ 简介:有名的关于网站设计的网站,拥有大量忠实网友。

7、IT写作社区网址:http://www.donews.com/ 简介:一个可以让你的思维活跃起来的地方,在这里it评论人和撰稿人可以找到很多的文字素材。

8、博客堂网址:http://blog.joycode.com/ 简介:众多MVP交流的地方,这里有各类最新技术,只是网站成员采用邀请制,不提供注册或者申请功能。

9、IT英雄榜网址:http://www.itheroes.cn/ 简介:网站以介绍it界人士为主,广大从事it的人员可以从中获取他们的经验。

10、邪恶八进制网址:http://www.eviloctal.com/ 简介:目前为数不多的一个讨论气氛浓厚,技术水平高的网络安全网站,邪恶八进制信息安全团队也是一个管理规范、人员素质高的网络安全小组。

2012年2月29日 | 归档于 未分类
标签:

矩阵的一些概念

A是实对称矩阵,那么对应于A的不同特征值的特征向量彼此正交。

任意n阶实对称矩阵A,都存在一个n阶正交矩阵 C。使得C^-1 A C为对称矩阵

正交矩阵,列向量都是单位长度,且彼此正交。

正定矩阵 :设M是n实系数对称矩阵, 如果对任何非零向量 X′=(x_1,...x_n) 都有 X′MX>0,就称M正定(Positive Definite)。其特征值全是正。

 

矩阵间的关系有三种:等价,相似,合同,前者依次包含后者。

一、定义:

矩阵等价:对于任意矩阵A,如果存在可逆矩阵P和Q,使得PAQ=B,则说A与B等价,记为A~B。

矩阵相似:对于任意矩阵A,如果存在可逆矩阵P,使得inv(P)AP=B,则说A与B相似,记为A~B。

矩阵合同:对于任意矩阵A,如果存在可逆矩阵P,使得Transpose(P)AP=B,则说A与B合同。

二、性质:

等价矩阵:

a).具有相同的秩;b).具有相同的相似标准型;c).列(行)向量具有相同的相关性;d).任意矩阵都等价于它的标准型

相似矩阵:

a).具有相同的特征值;b).具有相同的行列式;c).迹相等;d).具有相同的特征多项式

三、相似对角化

对于矩阵A,如果存在可逆矩阵P,使得inv(P)AP为对角矩阵,则称A可相似对角化。如果A满足如下条件中的一个,则A可相似对角化:

a).矩阵A有n个线性无关的特征向量;

b).矩阵A有n个不相同的特征值;

c).矩阵A的k重特征值对应有k个特征向量。

**注意:A能否对角化与A是否可逆或A的秩之间没有关系,如A=[2,2;2 2]为实对称矩阵,一定可以对角化,但秩为1,它不可逆。

四、两种重要的特殊矩阵

正交矩阵:定义:transpose(A)*A=A*transpose(A)=I。正交矩阵具有如下的性质:

a). transpose(A)=inv(A);

b). det(A)=1或者det(A)= —1;

c). 如果A和B都是正交矩阵,则AB和BA都是正交矩阵;

d). A的行(列)向量组为标准正交向量组。

e).transpose(A)*A=A*transpose(A)=I

f).正交变换不改变内积,y=Ax,则(y1,y2)=(Ax1,Ax2)=(x1,x2),因此也就不改变向量的长度和夹角,所以正交变

换可以保持图形不变。

对称矩阵:定义:transpose(A)=A。对称矩阵具有如下性质:

a).如果A和B都是对称矩阵,则A+B为对称矩阵;AB对称的充要条件是AB=BA,即A,

B可交换;

b).任意矩阵A,).transpose(A)*A和A*transpose(A)都是对称矩阵;

c).对于实对称矩阵,有如下特殊性质:

*特征值全为实数;

**不同特征值对应得特征向量彼此正交;

***一定存在正交矩阵C,使得transpose(C)*A*C=inv(C)*A*C为对角矩阵,且对角元为

A的特征值,而C的列向量即为A的特征向量。

from:http://hi.baidu.com/tuenmei/blog/item/637f31326377914dac4b5fae.html

2012年2月29日 | 归档于 所谓数学
标签:
FireStats icon 由FireStats提供支持