【问题标题】:Principal Component Analysis using libpca使用 libpca 进行主成分分析
【发布时间】:2014-09-04 18:13:49
【问题描述】:

libpca 是一个用于主成分分析的 C++ 库,它基于线性代数库 Armadillo

不过,我遇到了问题。我将其输出与Lindsay Smith 在他关于 PCA 的精彩教程中给出的示例进行比较。当我检索第一个主成分时,我得到了与 Smith 在他的教程中相同的值,但它的符号倒置了。对于第二个主成分,符号和值是正确的。

有人知道这是为什么吗?

代码:

#include "pca.h"
#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    stats::pca pca(2);

    double* elements = new double[20]{2.5, 2.4, 0.5, 0.7, 2.2, 2.9, 1.9, 2.2, 3.1, 3.0, 2.3, 2.7, 2, 1.6, 1, 1.1, 1.5, 1.6, 1.1, 0.9};
    for (int i = 0; i < 20; i++) {
        vector<double> record;
        record.push_back(elements[i++]);
        record.push_back(elements[i]);
        pca.add_record(record);
    }

    pca.solve();             

    const vector<double> principal_1 = pca.get_principal(0);
    for (int i = 0; i < principal_1.size(); i++)
        cout << principal_1[i] << " ";
    cout << endl;

    const vector<double> principal_2 = pca.get_principal(1);
    for (int i = 0; i < principal_2.size(); i++)
        cout << principal_2[i] << " ";
    cout << endl;

    delete elements;
    return 0;
}

输出:

0.82797 -1.77758 0.992197 0.27421 1.6758 0.912949 -0.0991094 -1.14457 -0.438046 -1.22382 
-0.175115 0.142857 0.384375 0.130417 -0.209498 0.175282 -0.349825 0.0464173 0.0177646 -0.162675 

【问题讨论】:

  • 在大多数情况下,只有主成分的大小很重要
  • 有没有提示如何使用libpca?
  • @Ben 我的问题没有给出一个完整的工作示例吗?

标签: c++ pca principal-components


【解决方案1】:

@mtall 已经有了核心原因:主成分构成了子空间的正常基础。无论您如何创建基,将任何基向量乘以 -1 都会形成同一子空间的另一个基。

这很容易看出:将向量 v 乘以任何常数都不会改变其方向。如果 v 与 w 正交,则 2*v 与 3*w 正交。将向量乘以 -1 会反转其方向。如果 v 和 w 有一个角度 alpha,那么 -v 和 w 有一个角度 (pi - alpha)。但是如果 alpha 是 pi/2,v 和 w 是正常的,(pi-pi/2) 仍然是 pi/2,因此 -v 和 w 也是正常的。

【讨论】:

  • 感谢您解决这个问题。后续问题:如果我希望所有向量都只有正值,我怎么能在保持它们的关系的同时改变它们来做到这一点,所以说距离度量保持它们的距离?
  • @randomdude:这根本没有意义。您可以将向量乘以 -1,但这会乘以所有分量。例如,您的 PCA 可以返回 [2,2] 和 [-1,1]。那是两个正交向量。您可以将后者乘以得到 [1,-1],但您无法明智地将后者转换为 [1,1]。这将与 [2,2] 共线,而不是正交
猜你喜欢
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2016-02-05
  • 2015-09-04
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多