资源简介
现在我们回到LDA的原理上,我们在第一节说讲到了LDA希望投影后希望同一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大,但是这只是一个感官的度量。现在我们首先从比较简单的二类LDA入手,严谨的分析LDA的原理。
假设我们的数据集D={(x1,y1),(x2,y2),...,((xm,ym))}D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本xixi为n维向量,yi∈{0,1}yi∈{0,1}。我们定义Nj(j=0,1)Nj(j=0,1)为第j类样本的个数,Xj(j=0,1)Xj(j=0,1)为第j类样本的集合,而μj(j=0,1)μj(j=0,1)为第j类样本的均值向量,定义Σj(j=0,1)Σj(j=0,1)为第j类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵)。
μjμj的表达式为:
μj=1Nj∑x∈Xjx(j=0,1)
μj=1Nj∑x∈Xjx(j=0,1)
ΣjΣj的表达式为:
Σj=∑x∈Xj(x−μj)(x−μj)T(j=0,1)
Σj=∑x∈Xj(x−μj)(x−μj)T(j=0,1)
由于是两类数据,因此我们只需要将数据投影到一条直线上即可。假设我们的投影直线是向量ww,则对任意一个样本本xixi,它在直线ww的投影为wTxiwTxi,对于我们的两个类别的中心点μ0,μ1μ0,μ1,在在直线ww的投影为wTμ0wTμ0和wTμ1wTμ1。由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化||wTμ0−wTμ1||22||wTμ0−wTμ1||22,同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差wTΣ0wwTΣ0w和wTΣ1wwTΣ1w尽可能的小,即最小化wTΣ0w+wTΣ1wwTΣ0w+wTΣ1w。综上所述,我们的优化目标为:
argmaxwJ(w)=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w
argmax⏟wJ(w)=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w
我们一般定义类内散度矩阵SwSw为:
Sw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T
Sw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T
同时定义类间散度矩阵SbSb为:
Sb=(μ0−μ1)(μ0−μ1)T
Sb=(μ0−μ1)(μ0−μ1)T
这样我们的优化目标重写为:
argmaxwJ(w)=wTSbwwTSww
argmax⏟wJ(w)=wTSbwwTSww
仔细一看上式,这不就是我们的广义瑞利商嘛!这就简单了,利用我们第二节讲到的广义瑞利商的性质,我们知道我们的J(w)J(w)最大值为矩阵S−12wSbS−12wSw−12SbSw−12的最大特征值,而对应的ww为S−12wSbS−12wSw−12SbSw−12的最大特征值对应的特征向量! 而S−1wSbSw−1Sb的特征值和S−12wSbS−12wSw−12SbSw−12的特征值相同,S−1wSbSw−1Sb的特征向量w′w′和S−12wSbS−12wSw−12SbSw−12的特征向量ww满足w′=S−12www′=Sw−12w的关系!
注意到对于二类的时候,SbwSbw的方向恒为μ0−μ1μ0−μ1,不妨令Sbw=λ(μ0−μ1)Sbw=λ(μ0−μ1),将其带入:(S−1wSb)w=λw(Sw−1Sb)w=λw,可以得到w=S−1w(μ0−μ1)w=Sw−1(μ0−μ1), 也就是说我们只要求出原始二类样本的均值和方差就可以确定最佳的投影方向ww了。
代码片段和文件信息
clear;
clc;
pen=40;%总人数:people number
pin=10;%每人照片数:picture number
tr=5;%训练数:train
k=32;% k < tr*pen
w=46;%照片宽度
h=56;%照片高度
tic;%计时
%训练人脸
imdata=zeros(w*htr*pen);
for i=1:pen
for j=1:tr
addr=strcat(‘D:\ORL56_46\orl‘num2str(i)‘_‘num2str(j)‘.bmp‘);
a=imread(addr);
a=a(1:w*h);
imdata(:(i-1)*tr+j)=a‘;
end;
end;
clear i j a adrr b
N1=tr*ones(1pen);
V1=LDA(imdata‘N1k);
train=imdata‘*V1;
%测试人脸
imdata1=zeros(w*h(pin-tr)*pen);
for i=1:pen
for j=tr+1:pin
addr=strcat(‘D:\ORL56_46\orl‘num2str(i)‘_‘num2str(j)‘.bmp‘);
a=imread(addr);
b=a(1:w*h);
imdata1(:(i-1)*(pin-tr)+j-tr)=b‘;
end;
end;
clear i j a adrr b
N2=(pin-tr)*ones(1pen);
test=imdata1‘*V1;
%显示特征人脸
figure;
for i=1:10
subplot(45i);
imshow(train((i-1)*5+1:(i-1)*5+5:)[]);
title(strcat(‘train‘num2str(i)));
end;
for i=1:10
subplot(4510+i);
imshow(test((i-1)*5+1:(i-1)*5+5:)[]);
title(strcat(‘test‘num2str(i)));
end;
%计算test与train编号是否吻合
count=0;
for i=1:pen*(pin-tr)
point=calculate(test‘train‘ipen*tr);
if(round(i/(pin-tr)+0.4)==round(point/tr+0.4))
count=count+1;
end;
end;
clear i point
%匹配率
ratio=100*count/(pen*(pin-tr));
clear count
display(strcat(‘匹配率:‘num2str(ratio)‘%‘));
clear tr ra
相关资源
- 人脸识别原理与实战:以MATLAB为工具
- matlab中5节点潮流计算何仰赞版例题
- 空时分组码的仿真
- 基于MATLAB语音信号采集与分析的毕业
- PCA主成分分析法和ICA独立成分分析法
- 聚类分析Matlab代码[比赛已经用过保真
-
Matlab/simuli
nk建模与仿真 - MATLAB神经网络43个案例分析
- 语音信号处理实验教程、报告及Matl
- 捷联惯导纯惯导解算matlab实现
- MIMO-OFDM无线通信技术及MATLAB实现中文
- 传感器信息融合_MATLAB程序实现.pdf
- 卡尔曼滤波理论与实践MATLAB版 第4版
- 机器人学、机器视觉与控制 matlab 算法
- Matlab时频分析技术及其应用.rar
- 配电网潮流计算程序matlab
-
传统两电平模型预测控制simuli
nk - 船舶横摇运动matlab仿真
- 数学建模:层次分析法一致性检验M
- matlab实现逻辑回归
- matlab GUI教学视频
- MATLAB车辆工程应用实战 [余胜威编著
- 精通图像处理经典算法MATLAB版
- matlab中的Kriging KG工具箱,dace工具箱
- 音乐合成实验报告
- 数字调制解调技术的MATLAB与FPGA实现
- MATLAB小波分析与应用30个案例分析源代
- 可靠性方法:改进一次二阶矩法+Rac
- 解线性方程组的共轭梯度算法(Matl
- matlab图像复原、视频图像处理、运动
评论
共有 条评论