scikit-learn LDA函数中的错误 - 绘图显示非零相关性

7 投票
2 回答
664 浏览
提问于 2025-04-18 15:05

我用scikit-learn的LDA功能做了一些线性判别分析,结果发现我的图表中,LD(线性判别)之间有非零的相关性。

from sklearn.lda import LDA
sklearn_lda = LDA(n_components=2)
transf_lda = sklearn_lda.fit_transform(X, y)

这让我很担心,所以我回去用鸢尾花数据集作为参考。我还在scikit的文档中找到了同样的非零相关性LDA图,我也能复现出来。

总之,给你一个大概的样子:

  • 左上角的图:这里明显有问题。
  • 左下角的图:这是用原始数据做的,不是正确的方法,但这是我尝试复现scikit结果的一种方式。
  • 右上角和右下角的图:这才是应该有的样子。

这里输入图片描述

我把代码放在了一个IPython笔记本里,如果你想看看并自己试试,可以去看看。

与左上角(错误)结果一致的scikit文档:http://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html

右下角显示的R中的LDA:http://tgmstat.wordpress.com/2014/01/15/computing-and-visualizing-lda-in-r/

2 个回答

0

好的,现在我们来看看发生了什么事情(根据GitHub上的讨论)。在scikit-learn中的LDA(线性判别分析)没有一个正交归一的基底。

我想把这个作为答案发布,这样我就可以关闭这个问题了。感谢大家的讨论!

Scikit-learn

这里输入图片描述

from sklearn.decomposition import PCA
sklearn_pca = PCA(n_components=2)
transf_pca = sklearn_pca.fit_transform(transf_lda)

这里输入图片描述

逐步方法

为了比较,这里再次展示逐步的方法。

这里输入图片描述

0

确实在LDA的转换功能里有个错误:分类器的权重在实际转换之后错误地被应用了。这个问题已经在这里修复了。修改已经合并到主分支,所以在scikit-learn的1.6版本中应该能看到这个修复。

撰写回答