fisher线性判别分析matlab,线性判别分析LDA

首先搞清楚什么叫判别分析?Discriminant Analysis就是根据研究对象的 各种特征值判别其类型归属问题的一种多变量统计分析方法。

根据判别标准不同,可以分为距离判别、Fisher判别、Bayes判别法等。比如在KNN中用的就是距离判别,当然这里的“距离”又有好几种:欧氏距离、街区距离、甚至可以用 皮尔森相关系数 等。 朴素贝叶斯分类 用的就是Bayes判别法。本文要讲的线性判别分析就是用是Fisher判别式。

根据判别函数的形式,可以分为线性判别和非线性判别。

LDA和PCA比较

两者都是为了在对原始数据降维之后进行分类。PCA是无监督的方式,它没有分类标签,降维之后需要采用K-Means或自组织映射网络等无监督的算法进行分类。LDA是有监督的方式,它先对训练数据进行降维,然后找出一个线性判别函数。

两类线性判别分析

给定N个特征为d维的样例

8c2e0f90c589e59de6745ce65818fde7.gif ,其中有N 1 个样例属于类别w 1 ,另外N 2 个样例属于类别w 2 。现在我们要将原始数据降低到只有一维,降维函数(或者叫投影函数)是:

b396ca402072864489d1a356360086ca.cgi?y=w%5ETx ,最后我们就依靠每个样例对应的y值来判别它属于哪一类。

形象的图求如下

dd559a824e0fd7b9e8e1d7030fe55be7.png

我们就是要找到这个最佳的w,使得样例映射到y后最易于区分。

定义每类样例的均值点:

c2b4fe13bef1f93fc9bd0186037e251e.gif

样例投影到y后有均值点为:

13b1c094242d24a6324a9e82f3c11309.gif

我们希望投影后两类样例中心尽量地分离,即

aaf16b9d24306ae8d840c8f34fdd5723.gif 越大越好。

同时我们希望投影之后类内部的方差

d1337b3c19ef211da85fd6add3d3d648.gif 越小越好。

由于得到我们的目标函数:

1fa85ea5a108f24747211e98568fa7d4.gif

又是个最优化问题。最终解得

dad06d8f127608ed5a672776c70a6af7.gif ,s 1 和s 2 分别中原始样例的方差。

这就是Fisher在1936年提出的线性判别分析。

如果

eee9cebfac55fcc2aee006afaa44da30.gif (u是所有样本的均值),就属于类别C 1 ,否则就属于类别C 2 。

实际上使用线性回归得到的直线方向就是二值分类中LDA求得的直线方向。

多类线性判别分析

假设有C个类别,降以一维已经不能满足分类要求了,我们需要k个基向量来做投影,W=[w 1 |w 2 |…|w k ] 。样本点在这k维投影后的结果为[y 1 ,y 2 ,…,y k ],且有

7f6ab041d096dc619d812cd7863e9487.gif

c0157bfddfff092c9c51835726840f67.gif

77ce8ec495b58049436f608875e70feb.gif

1e264a4ffd64ee49616a6d53891d332b.gif

8d27c430acc314db506a4142fb097868.gif

同样是求一个类似于(1)式的最优化问题,我们得到

973f7e228440d031859a87338dcc0c52.gif

即w i 是矩阵

9518c6d807895abc93ddfdf4d4a59eef.cgi?S_w%5E%7B-1%7DS_B 的特征向量。首先求出

9518c6d807895abc93ddfdf4d4a59eef.cgi?S_w%5E%7B-1%7DS_B 的特征值,然后取其前k个特征向量组成W即可,因为特征值大的对应的特征向量分割性好。另外S B 的秩至多为C-1,所以

9518c6d807895abc93ddfdf4d4a59eef.cgi?S_w%5E%7B-1%7DS_B 不为0的特征值至多有C-1个,所以k最大为C-1。

由于

9518c6d807895abc93ddfdf4d4a59eef.cgi?S_w%5E%7B-1%7DS_B 不一定是对称矩阵,因此k个特征向量不一定正交,这也是与PCA不同的地方。求

9518c6d807895abc93ddfdf4d4a59eef.cgi?S_w%5E%7B-1%7DS_B 的特征向量不能采用奇异值分解的方式,而因该采用更通用的求一般方阵特征向量的方式。特征值的求法有很多,求一个D * D的矩阵的时间复杂度是O(D^3), 也有一些求Top k的方法,比如说 幂法 ,它的时间复杂度是O(D^2 * k)。

那降维之后又如何根据y值来判别分类呢?取[y 1 ,y 2 ,…,y k ]中最大的那个就是所属的分类。 这么说对于有C个类别的分类问题,我们最多只能分出C-1个类别来?

使用LDA的限制

LDA至多可生成C-1维子空间

LDA不适合对非高斯分布的样本进行降维

LDA在样本分类信息依赖方差而不是均值时,效果不好。

LDA可能过度拟合数据。

欢迎加入我爱机器学习QQ14群:336582044

getqrcode.jpg

微信扫一扫,关注我爱机器学习公众号

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我并不能提供文档或文件下载。但是,我可以简单地介绍一下 Fisher 线性判别分析以及如何在 MATLAB 中实现 Fisher 检验。 Fisher 线性判别分析是一种常见的分类方法,它可以用于将数据集投影到低维空间中,以便于可视化和分类。Fisher 线性判别分析的目标是找到一个投影矩阵,使得在投影后的低维空间中,不同类之间的距离尽可能地大,同一类之间的距离尽可能地小。这个投影矩阵可以通过计算类内散度矩阵和类间散度矩阵的比值来获得。 在 MATLAB 中,可以使用 `classify` 函数来进行 Fisher 线性判别分析。这个函数需要输入数据集和类别标签,并且可以选择是否对数据进行标准化处理。下面是一个简单的示例代码: ```matlab load fisheriris X = meas(:,3:4); Y = species; % 标准化 X = (X - mean(X)) ./ std(X); % Fisher 线性判别分析 ldaModel = fitcdiscr(X,Y); % 绘制分类结果 h = gscatter(X(:,1),X(:,2),Y,'rbg','ov^',[],'off'); hold on f = @(x,y) predict(ldaModel,[x,y]); ezplot(f,[min(X(:,1)) max(X(:,1)) min(X(:,2)) max(X(:,2))]); hold off ``` 这个示例代码加载了鱼类数据集中的第三列和第四列作为样本特征,加载了鱼类数据集中的物种作为类别标签。然后使用 `fitcdiscr` 函数进行 Fisher 线性判别分析,得到一个 LDA 模型。最后,使用 `gscatter` 函数将样本点绘制出来,使用 `ezplot` 函数绘制分类边界。 希望这个简单的示例代码可以帮助你理解 Fisher 线性判别分析和在 MATLAB 中的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值