您的位置:首页 > 其它

机器学习总结(lecture 5)算法:Fisher线性判别分析LDA

2018-02-20 20:00 881 查看

lecture 5:Fisher线性判别分析LDA

目录

lecture 5Fisher线性判别分析LDA

目录
1LDA思想

2二类问题

3K类问题

4LDA的一般步骤

1LDA思想

LDA,将高维样本投影到具有最佳判别效果的低维矢量空间,使得降维样本在新的子空间内类间距离最大,而类内距离最小,即在该低维空间内有最大的可分性。

LDA 既可以实现降维,也能完成分类。

在使用时,需要知道高维样本的监督信号,而降维样本的维数受到类别个数的限制。

LDA 的想法是:将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近





PCA和LDA非常相似,最终都是解一个矩阵特征值的问题

(1)LDA是一种线性分类器,K分类,会有K个线性函数 yk(x)=WTkx+Wk0yk(x)=WkTx+Wk0

所有的K个y, 最大的y_max就是分类结果

(2)上式是一种投影,是将一个高维的点投影到一条高维的直线上

2二类问题





3K类问题



SB<
4000
/span>SB是对称实矩阵,SWSW是正定矩阵

用LDA时,最好先用PCA算法降维,消除样本的冗余度

y=WTxy=WTx

例子:假设原始样本 x是784*1维的列向量,现在分10类,W 就是784*9的矩阵

得到的 投影样本 y 是 9*1的,从高维784降到了低维 9

C分类问题,最优投影轴的个数 d<=C-1

求特征值是很费时间的操作

4LDA的一般步骤

(1)求原始数据,各类样本中心mimi,总体样本中心mm

(2)求类间方差SWSW,类内方差SBSB,得到方程SBW=λSWWSBW=λSWW

(3)求出广义特征值、特征向量;[eigVect,eigVal]=eig(Sb,Sw);

(4)选出(c-1)个最大特征值λλ,对应的特征向量WiWi

(5)计算出投影后的各类中心,计算投影后的测试集属于哪一类

%假设有三类样本,D1、D2、D3,每一列就是一个样本

%第1步: 求样本总体均值、各类样本均值
m=mean((D1+D2+D3)/3,2);
m1=mean(D1,2);  m2=mean(D2,2); m3=mean(D3,2);
mm=[m1,m2,m3];

%第2步,求类间散度、类间方差、类内方差
S1=zeros(6,6);  S2=zeros(6,6); S3=zeros(6,6);
for i=300
S1=S1+(D1(:,i)-m1)*(D1(:,i)-m1)';
S2=S2+(D2(:,i)-m2)*(D2(:,i)-m2)';
S3=S3+(D3(:,i)-m3)*(D3(:,i)-m3)';
end
Sw=S1+S2+S3;
Sb=300*((m1-m)*(m1-m)'+(m2-m)*(m2-m)'+(m3-m)*(m3-m)');

%第3步:求特征值、特征向量        %SbW=lambda*SwW
[eigVect,eigVal]=eig(Sb,Sw);
[sort_val,sort_idx]=sort(diag(eigVal),'descend');

%第4步:求最大特征向量          %样本原始维度6,降到2维, 三类数据,两条直线
W=zeros(6,2);
for i=1:2
W(:,i)=eigVect(:,sort_idx(i));
end

%第5步,求变换后的中心和测试样本
u1=W'*m1;
u2=W'*m2;
u3=W'*m3;
test_data=W'*testData;
train_data=W'*trainData;

%第6步,求测试样本到各类中心的距离
d1=pdist2(test_data',u1');
d2=pdist2(test_data',u2');
d3=pdist2(test_data',u3');

dt1=pdist2(train_data',u1');
dt2=pdist2(train_data',u2');
dt3=pdist2(train_data',u3');

%第7步:根据哪个距离最近,即为哪一类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: