什么是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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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