现在我们回到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。综上所述,我们的优化目标为: argmaxwJ(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     这样我们的优化目标重写为: argmaxwJ(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了。
2019-12-21 21:48:28 3KB MATLAB 人脸识别 LDA knn
1
该程序为应用Python语言在pycharm中编写的K-近邻算法的源代码,自己将相关内容整合到一个文件中,运行调试正常,亲测有效,代码注释较全,希望可以对广大初学者提供到帮助。
2019-12-21 21:44:36 1KB k近邻算法 机器学习 人工智能 算法
1
基于SVD分解和最近邻算法的高维人脸识别代码,是MATLAB系统上实现的代码,可直接运行,包含人脸数据库
2019-12-21 21:39:31 3MB 人脸识别 MATLAB
1
模式识别大作业K近邻算法(KNN)C++实现,内有iris和wine数据测试以及其他相关资料。
2019-12-21 21:32:05 2.26MB 模式识别 K近邻
1
这是近邻传播聚类算法创始人Frey & Dueck在2007年Science杂志上面发表的“Clustering by Passing Messages between data points”论文里面方法的MATLAB实现程序代码,俗称AP聚类代码。里面包含两个版本:一个是普通版的,一个是稀疏版本的,下载后,先添加数据集,再调用这两个方法就行了。
2019-12-21 21:19:34 9KB 近邻传播 仿射传播 ap MATLAB
1
基于K-近邻算法研究手写数字(0-9)的识别问题,本文通过对手写数字的图像进行处理,提取特征向量,使用Python实现了K-近邻算法,并在此基础上开发了一个GUI测试程序。
2019-12-21 21:19:07 88KB 机器学习
1
KNN的MATLAB实现,基于特殊的SONAR数据,M文件,MATLAB源代码
2019-12-21 21:07:24 2KB 模式识别 knn
1
一部分比较好的关于近邻传播聚类算法的学习资料,以及一些网上找到的matlab代码,另外最重要的是,有一份我写的可以直接调用的matlba API代码。
2019-12-21 21:04:28 9.17MB AP AffinityPropagation 聚类 matlab代码
1
Kriging插值 最近邻值点插值 距离反比例插值插值
2019-12-21 21:03:20 1.41MB Kriging插值
1