matlab怎么看函数代码_基于概率密度函数的PLSDA(附matlab代码)

PLS-DA(偏最小二乘判别分析)是一种非常受欢迎的用于化学,食品科学等等领域的分类模型。我本人最近也在做分类方面的项目,需要用到PLS-DA,但是在网上查了一下发现资料很少,matlab也并没有可以直接进行PLS-DA运算的自带函数,那么本渣渣知乎第一篇文章就来说一说PLS-DA吧。

PLS-DA是在PLSR(偏最小二乘回归)的基础上建立的分类模型。其算法包含了PLSR拟合以及类别判定两个关键步骤。PLSR的原理在此就不过多介绍。但与PLSR不同的是,PLS-DA中使用的响应矩阵从回归预测中的数值矩阵变成了分类中的二元矩阵。所谓二元矩阵即矩阵中只包含0或1,我们可以很简单的想到,对于一个二分类模型,其对应的分类标签A由1来代替,B由0来代替。那么这个响应矩阵的大小是

,其中
M是样本数目,比如一个有五个样本的二分类响应矩阵[0; 0; 1; 1; 0]。对于多分类模型来说,响应矩阵则是
,其中
N是标签数目,在这里假设有五个样本三个分类,其对应的响应矩阵就是[0, 0, 1; 0, 1, 0; 0, 0, 1; 1, 0, 0; 0,1, 0],即一个样本属于第二类,它的分类标签(向量)就是[0, 1, 0]。在知道了分类标签的格式后,我们就可以手动建立标签,然后将分类标签矩阵作为响应矩阵进行常规的PLSR运算(matlab自带函数:plsregress)。

当我们得到拟合后的分类矩阵会发现,其包含的数值并不能完美的等于0或1,而是变得较为杂乱。例如,一个样品拟合后的分类标签可能会是[0.21, -0.13, 0.78],而实际标签是[0, 0, 1]。因为在这一步PLSR只是对二元标签做了回归预测,模型本身并不能进行分类。因此,PLS-DA的核心就在于如何判定拟合得到的数值该被归于1还是0。

一种简单粗暴的方法是设置中间值为阈值(即大于0.5的为1,小于0.5的为0)。但是这种方法对于一些复杂的例子来说明显不够好,比如一个拟合标签[0.22, 0.34, 0.51]其实际属于[0, 0, 0](全为0代表无法被分入当前类别),而基于上述方法则被归于第三类[0, 0, 1];又比如一个标签[0.11, 0.02, 0.48]实际属于[0, 0, 1],而简单的中间值分类则会把这分入[0, 0, 0]。其他的方法包括设定一个interval,如0.4到0.6,低于或高于分别对应分入或不分入当前类别,若拟合值落在这个区间则为无法分类;一些神经网络中用到的激活函数如逻辑函数也可以被用于分类判定。上述的这些方法,有着较为明显的局限性,本文则会介绍一种基于概率密度函数(probability density function)的判定方法。算法的原理由Pérez et al., (2009)提出,我对其做出了一定的改进和总结使之更为简单,感兴趣的同学可以去看看原文。

先写这么多,抽时间继续写完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值