Анализ основных компонентов с использованием libpca

libpca библиотека C ++ для анализа основных компонентов, основанная на броненосец, библиотека линейной алгебры.

У меня проблемы с этим, хотя. Я сравниваю его результаты с примером, приведенным Линдсей Смит в своем великолепном учебнике по PCA. Когда я получаю первый основной компонент, я получаю те же значения, что и Смит в его уроке, но с инвертированными знаками. Для второго основного компонента знаки и значения верны.

Кто-нибудь знает, почему это?

Код:

#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

3

Решение

@mtall уже имеет основную причину: главные компоненты образуют нормальную основу подпространства. Независимо от того, как вы создали базис, умножение любого базисного вектора на -1 образует другой базис того же подпространства.

Это довольно легко увидеть: умножение вектора v на любую константу не меняет его направления. если v нормально к w, то 2 * v нормально к 3 * w. Умножение вектора на -1 меняет направление. Если v и w имели угол альфа, то -v и w имеют угол (пи — альфа). Но если альфа была pi / 2, v и w нормальные, (pi-pi / 2) все равно pi / 2, и, таким образом, -v и w также нормальные.

5

Другие решения


По вопросам рекламы [email protected]