线性判别分析和典型判别分析(LDA 和 CDA)之间的差异

机器算法验证 r 多元分析 术语 判别分析 典型相关
2022-03-28 09:28:48

根据我读过的一篇文章,我正在使用 R 尝试比较可变化学成分的结果。在其中,作者使用 CDA 做了与我想做的非常相似的事情,但另一位研究人员告诉我(没有太多解释)LDA 会更适合。我可以详细说明为什么选择监督学习等,但除非有人问,否则我不会发布。

在做了一些背景阅读之后(这并没有真正消除两者之间的差异),我想我会尝试自己探索这个并比较结果。我的数据与本文中的数据之间的主要区别在于,我不仅使用合成,还为 CDA 创建了 3 个新变量(S-、F- 和 V-),它们是原始合成数据的函数(参见下面的代码)。

然而,当我运行这两个分析时,我得到了完全相同的结果——相同的图。这似乎不可能,但我在编码中找不到错误。

我的两个问题是:

  1. LDA 和 CDA 是否有可能返回完全相同的结果?

  2. LDA和CDA之间的实际区别是什么?


资料

library(MASS)
library(candisc)
library(ggplot2)

al2o3<-runif(20,5,10)
sio2<-runif(20,10,30)
feo<-runif(20,40,60)
country<-c(rep("England",6), rep("Scotland",6), rep("Wales",4), rep("France",4))
df<-data.frame(country,al2o3,sio2,feo)

低密度脂蛋白

lda <- lda(country ~ feo+sio2+al2o3, data=df)
plda <- predict(object = lda, newdata = df)
dataset = data.frame(country = df[,"country"], lda = plda$x)
ggplot(dataset) + geom_point(aes(lda.LD1, lda.LD2, colour = country))

光盘

fvalue<-(df$also3/df$sio2)
svalue<-((2.39*df$feo)/(df$al2o3+df$sio2))
vvalue<-(df$sio2/df$feo)

mod <- lm(cbind(feo,sio2,al2o3) ~ country, data=df)
can2 <- candiscList(mod)
mod2 <- lm(cbind(fvalue,svalue,vvalue) ~ country, data=df)
can3 <- candiscList(mod2)
ggplot(can2$country$scores, aes(x=Can1,y=Can2)) + geom_point(aes(color=country))
1个回答

这是同一事物的两个名称。

线性判别分析 (LDA) 有很多不同的名称。我见过

可能还有其他一些。我怀疑在不同的应用领域可能会使用不同的名称。在机器学习中,“线性判别分析”是迄今为止最标准的术语,“LDA”是标准的缩写。


之所以使用“规范”一词,可能是因为 LDA 可以理解为规范相关分析 (CCA) 的一个特例。具体来说,LDA的“降维部分”相当于在数据矩阵之间做CCAX和组指标矩阵G. 指标矩阵G是一个矩阵n行和kGij=1如果i-th 数据点属于类j否则为零。[脚注:这G不应居中。]

这个事实一点也不明显,并且有一个证明,这个边缘太窄而无法包含。