Я использую 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. Какое из моих утверждений неверно?