引入
如果已知先验概率
p(wi)
p
(
w
i
)
和类条件概率密度
p(x|wi)
p
(
x
|
w
i
)
,则可以构造一个贝叶斯分类器
p(wi|x)=p(x|wi)p(wi)∑i=1Kp(x|wi)p(wi)
p
(
w
i
|
x
)
=
p
(
x
|
w
i
)
p
(
w
i
)
∑
i
=
1
K
p
(
x
|
w
i
)
p
(
w
i
)
。
但是,在大多数实际问题中,生成数据的类条件概率密度分布(一般会假设为高斯分布等)的参数通常是未知的,因此,就需要有一些手段从样本数据中推断出这些参数。
这就产生了参数估计这一任务,即使用样本数据(训练数据)来估计未知的概率分布的参数。
参数估计方法分类
有监督的参数估计
己知概率分布的具体形式以及样本数据所属的类别;
无监督的参数估计
己知概率分布的具体形式,但是不知道样本数据所属的类别;
非参数估计
不知道概率分布的具体形式,但是己知样本数据所属的类别。
在有监督参数估计方法中,常用的两种方法:
极大似然估计
假定待估计的参数为某个固定值,估计准则为估计的参数使得样本集合的似然函数取最大值;
贝叶斯估计
假定待估计的参数为随机变量,估计准则为估计的参数使得平均风险达到最小值。
本文主要针对极大似然估计进行讲解。
问题
原问题
对于模式识别(分类)而言,假设共有
C
C
类且每一类的类条件概率密度分布都符合正态分布
,
将带估计的参数矢量记为
θi
θ
i
,则
θi=(μi,∑i)T
θ
i
=
(
μ
i
,
∑
i
)
T
。
为了强调类条件概率密度函数依赖于参数矢量,将其写为以下形式:
p(x|wi,θi)
p
(
x
|
w
i
,
θ
i
)
,
假定属于某个类别的训练样本只对本类别的参数估计提供信息,这样就能分别独立地考虑每个类别的参数估计。
子问题
己知样本集合
D=x1,x2,...,xn
D
=
x
1
,
x
2
,
.
.
.
,
x
n
,其中每一个样本都是独立地根据已知形式的概率密度函数
p(x|θ)
p
(
x
|
θ
)
抽取得到的,要求使用这些样本,估计概率密度函数中的参数矢量
θ
θ
的值。
由于假设样本间相互独立,故
p(D|θ)=∏k=1np(xk|θ)
p
(
D
|
θ
)
=
∏
k
=
1
n
p
(
x
k
|
θ
)
。
又由于样本集
D
D
已知,故是关于
θ
θ
的函数,也称为样本集
D
D
下的似然函数。
参数的极大似然估计是使 p(D|θ) p ( D | θ ) 达到最大的参数矢量 θ^ θ ^ 。
极大似然
定义对数似然如下
L(θ)≜lnp(D|θ)
L
(
θ
)
≜
ln
p
(
D
|
θ
)
,
此时问题转变为求取使对数似然函数
L(θ)
L
(
θ
)
达到最大的参数矢量
θ^=argmaxθL(θ)
θ
^
=
arg
max
θ
L
(
θ
)
。
求解
令
θi=(θ1,θ2,...,θp)T
θ
i
=
(
θ
1
,
θ
2
,
.
.
.
,
θ
p
)
T
且梯度算子
∇θ
∇
θ
为
∇θ=[∂∂θ1,∂∂θ2,...,∂∂θp]T
∇
θ
=
[
∂
∂
θ
1
,
∂
∂
θ
2
,
.
.
.
,
∂
∂
θ
p
]
T
,
对于
L(θ)≜lnp(D|θ)=∑k=1nlnp(xk|θ)
L
(
θ
)
≜
ln
p
(
D
|
θ
)
=
∑
k
=
1
n
ln
p
(
x
k
|
θ
)
则
∇θL=∑k=1n∇θlnp(xk|θ)
∇
θ
L
=
∑
k
=
1
n
∇
θ
ln
p
(
x
k
|
θ
)
。
因此,求解极大似然估计值的必要条件为方程组:
∇θL=0
∇
θ
L
=
0
示例
例1:假设训练样本符合多元正态分布,且协方差矩阵已知,需估计均值矢量。
极大似然估计目标
L(μ)≜lnp(D|μ)=ln∏k=1np(xk|μ)=∑k=1np(xk|μ)
L
(
μ
)
≜
ln
p
(
D
|
μ
)
=
ln
∏
k
=
1
n
p
(
x
k
|
μ
)
=
∑
k
=
1
n
p
(
x
k
|
μ
)
展开得:
L(μ)=∑k=1n(−12ln[(2π)d|∑|]−12(xk−μ)T∑−1(xk−μ))
L
(
μ
)
=
∑
k
=
1
n
(
−
1
2
ln
[
(
2
π
)
d
|
∑
|
]
−
1
2
(
x
k
−
μ
)
T
∑
−
1
(
x
k
−
μ
)
)
。
对目标函数求导等于0可得:
∇μL=∑k=1n∑−1(xk−μ)=0
∇
μ
L
=
∑
k
=
1
n
∑
−
1
(
x
k
−
μ
)
=
0
计算可得:
μ^=1n∑k=1nxk
μ
^
=
1
n
∑
k
=
1
n
x
k
对正态分布均值的极大似然估计就是对全体样本取平均。
例2:对于均值和方差均未知的情况,考虑单变量情况,设 θ=(θ1,θ2)T=(μ,σ2)T θ = ( θ 1 , θ 2 ) T = ( μ , σ 2 ) T 。
极大似然估计目标
L(θ)=∑k=1n(−12ln(2πθ2)−12θ2(xk−θ1)2)
L
(
θ
)
=
∑
k
=
1
n
(
−
1
2
ln
(
2
π
θ
2
)
−
1
2
θ
2
(
x
k
−
θ
1
)
2
)
。
对目标函数求导等于0可得:
∇θ2L=∑k=1n1θ2^(xk−θ1)=0
∇
θ
2
L
=
∑
k
=
1
n
1
θ
2
^
(
x
k
−
θ
1
)
=
0
∇θ1L=−∑k=1n1θ2^+∑k=1n(xk−θ1^)2θ2^2=0
∇
θ
1
L
=
−
∑
k
=
1
n
1
θ
2
^
+
∑
k
=
1
n
(
x
k
−
θ
1
^
)
2
θ
2
^
2
=
0
计算可得:
μ^=1n∑k=1nxk
μ
^
=
1
n
∑
k
=
1
n
x
k
σ^2=1n∑k=1n(xk−μ^)2
σ
^
2
=
1
n
∑
k
=
1
n
(
x
k
−
μ
^
)
2
。
扩展可得,当正态分布为多元是,极大似然估计的结果为:
μ^=1n∑k=1nxk
μ
^
=
1
n
∑
k
=
1
n
x
k
∑^=1n∑k=1n(xk−μ^)(xk−μ^)T
∑
^
=
1
n
∑
k
=
1
n
(
x
k
−
μ
^
)
(
x
k
−
μ
^
)
T
实现
% 本示例用于最大似然估计的教学示例
% 描述:1)生成过程:根据给定参数的正态分布生成二维数据点样本
% ······2)估计过程:根据最大似然估计算法估计参数值
% 设置随机数种子,使程序可重复
rng(10);
% 生成过程
NDATA = 1000; % 数据点数目
MU = [1,2]'; % 分布均值
COV = [0.5,0;0,0.8]'; % 协方差:假设各维度相互独立
SIGMA = diag(COV); % 方差:假设各维度相互独立
DATA = zeros(2,NDATA);
for k = 1 : NDATA
% 依次生成数据
DATA(:,k) = normrnd(MU,SIGMA);
end
disp('均值:');
disp(MU);
% disp('协方差:');
% disp(COV);
disp('方差:');
disp(SIGMA);
scatter(DATA(1,:),DATA(2,:)); % 绘制样本点
box on;
% 估计过程
MU_EST = mean(DATA,2); % 计算均值
DATA_DIF = bsxfun(@minus,DATA,MU_EST);
COV_SQUARE = zeros(2,2,NDATA);
for k = 1 : NDATA
% 计算每个样本的协方差
COV_SQUARE(:,:,k) = DATA_DIF(:,k)*DATA_DIF(:,k)';
end
COV_SQUARE_EST = mean(COV_SQUARE,3);
SIGMA_SQUARE_EST = diag(COV_SQUARE_EST);
disp('估计均值:');
disp(MU_EST);
% disp('估计协方差:');
% disp(sqrt(COV_SQUARE_EST));
disp('估计方差:');
disp(sqrt(SIGMA_SQUARE_EST));
% 注:系统自带的参数估计,假设数据各维度相互独立
[mu,s] = normfit(DATA');
运行上面的代码,可显示数据如下图:
计算输出如下:
均值:
1
2
方差:
0.5000
0.8000
估计均值:
1.0115
1.9805
估计方差:
0.5072
0.7990