Matlab: как найти, какие переменные из набора данных можно отбросить с помощью PCA в matlab?

Я использую PCA, чтобы выяснить, какие переменные в моем наборе данных являются избыточными из-за высокой корреляции с другими переменными. Я использую функцию princomp matlab на данных, предварительно нормализованных с помощью zscore:

[coeff, PC, eigenvalues] = princomp(zscore(x))

Я знаю, что eigenvalues говорит мне, сколько вариаций набора данных охватывает каждая главная компонента, и что coeff говорит мне, сколько i-й исходной переменной находится в j-й главной компоненте (где i - строки, j - столбцы).

Поэтому я предположил, что для того, чтобы узнать, какие переменные из исходного набора данных являются наиболее важными, а какие - наименее, я должен умножить матрицу coeff на eigenvalues - значения coeff представляют собой количество каждой переменной в каждом компоненте, а eigenvalues говорят о том, насколько важен данный компонент. Вот мой полный код:

[coeff, PC, eigenvalues] = princomp(zscore(x));
e = eigenvalues./sum(eigenvalues);
abs(coeff)/e

Но это ничего не показывает - я попробовал это на следующем наборе, где переменная 1 полностью коррелирует с переменной 2 (v2 = v1 + 2):

     v1    v2    v3
     1     3     4
     2     4    -1
     4     6     9
     3     5    -2

но результаты моих вычислений были следующими:

v1 0.5525
v2 0.5525
v3 0.5264

и это ничего не показывает. Я бы ожидал, что результат для переменной 2 покажет, что она гораздо менее важна, чем v1 или v3. Какое из моих утверждений неверно?

7
задан agnieszka 28 September 2011 в 19:38
поделиться