什么是LDA(线性判别分析)的正确实现?

我发现OpenCV中的LDA结果与其他库的结果不同。例如,输入数据是

DATA (13 data samples with 4 dimensions)  7    26     6    60 1    29    15    5211    56     8    2011    31     8    47 7    52     6    3311    55     9    22 3    71    17     6 1    31    22    44 2    54    18    2221    47     4    26 1    40    23    3411    66     9    1210    68     8    12LABEL 0     1     2     0     1     2     0     1     2     0     1     2     0

OpenCV的代码是

Mat data = (Mat_<float>(13, 4) <<\        7, 26, 6, 60,\        1, 29, 15, 52,\        11, 56, 8, 20,\        11, 31, 8, 47,\        7, 52, 6, 33,\        11, 55, 9, 22,\        3, 71, 17, 6,\        1, 31, 22, 44,\        2, 54, 18, 22,\        21, 47, 4, 26,\        1, 40, 23, 34,\        11, 66, 9, 12,\        10, 68, 8, 12);Mat mean;reduce(data, mean, 0, CV_REDUCE_AVG);mean.convertTo(mean, CV_64F);Mat label(data.rows, 1, CV_32SC1);for (int i=0; i<label.rows; i++)    label.at<int>(i) = i%3;LDA lda(data, label);Mat projection = lda.subspaceProject(lda.eigenvectors(), mean, data);

Matlab的代码是(使用Matlab降维工具箱

cd drtoolbox\techniques\load haldlabel=[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0][projection, trainedlda] = lda(ingredients, label)

特征值是

OpenCV (lda.eigenvectors())0.4457    4.01320.4880    3.57030.5448    3.34660.5162    3.5794Matlab Toolbox for Dimensionality Reduction (trainedlda.M)0.5613    0.71590.6257    0.62030.6898    0.58840.6635    0.6262

然后数据的投影是

OpenCV1.3261    7.12760.8892   -4.7569-1.8092   -6.1947-0.0720    1.19270.0768    3.3105-0.7200    0.7405-0.3788   -4.73881.5490   -2.8255-0.3166   -8.8295-0.8259    9.89531.3239   -3.1406-0.5140    4.2194-0.5285    4.0001Matlab Toolbox for Dimensionality Reduction1.8030    1.31711.2128   -0.8311-2.3390   -1.0790-0.0686    0.31920.1583    0.5392-0.9479    0.1414-0.5238   -0.97221.9852   -0.4809-0.4173   -1.6266-1.1358    1.90091.6719   -0.5711-0.6996    0.7034-0.6993    0.6397

尽管这些LDA使用了相同的数据,但特征向量和投影结果不同。我认为有两种可能的情况。

  1. 其中一个库有错误。
  2. 我的使用方法有误。

谢谢!


回答:

差异的原因是特征向量未被归一化。归一化后的(L2范数)特征向量是

OpenCV0.44569   0.551960.48798   0.491050.54478   0.460280.51618   0.49230Matlab Toolbox for Dimensionality Reduction0.44064   0.559770.49120   0.485020.54152   0.460080.52087   0.48963

现在它们看起来很相似,尽管它们的特征值相当不同。

尽管OpenCV中的PCA返回归一化的特征向量,但LDA却没有。我接下来的问题是“在LDA中归一化特征向量是否不是必须的?”

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注