Делать PCA и Отбеливание с Matlab

Моя задача - сделать PCA и преобразование отбеливания с заданными 2-мерными 5000данными.

Что я понимаю в PCA, так это в анализе основной оси данных с помощью собственного вектора ковариантной матрицы и повороте главной оси к оси x!

Итак, вот что я сделал.

[BtEvector,BtEvalue]=eig(MYCov);% Eigen value and vector using built-in function

Я сначала рассчитал собственные значения и векторы. Результат был

BtEvalue=[4.027487815706757,0;0,8.903923357227459] 

а также

BtEvector=[0.033937679569230,-0.999423951036524;-0.999423951036524,-0.033937679569230]

Итак, я выяснил, что главная ось будет иметь собственное значение 8,903923357227459 и собственный вектор [-0.999423951036524,-0.033937679569230] который является вторым соответствующим термином.

После этого, поскольку это двумерные данные, я обозначаю cos(theta) как -0,9994.. и sin(theta)=-0.033937, Потому что я думал, что главная ось данных (собственный вектор [-0.999423951036524,-0.033937679569230]) должна быть ось х я сделал ось вращения R= [cos(-Theta)-sin(-theta);sin(-theta) cos(-theta)], Пусть оригинальные наборы данных A=>2*5000, Я сделал A*R чтобы получить повернутые данные.

Также, для случая отбеливания, используя отбеливание Cholesky, я сделал матрицу преобразования отбеливания как inv(Covariance Matrix),

Что-то не так с моим алгоритмом? Может ли кто-нибудь свидетельствовать, если есть ошибка или недоразумение, пожалуйста? Большое спасибо заранее.

1 ответ

Поскольку ваши данные являются двумерными, вычисленная вами ковариационная матрица не является точной. Если вы рассчитываете только ковариацию относительно одной оси (скажем, x), вы предполагаете, что ковариация вдоль оси y является тождественной. Это явно не правда. Хотя вы пытались решить эту проблему, есть надежная процедура, которую вы можете использовать (я объяснил ниже).

К сожалению, это распространенная ошибка. Взгляните на эту статью, где объясняется, как именно должна быть рассчитана ковариация.

Таким образом, вы можете рассчитать ковариацию по каждой оси (Sx и Sy). Затем аппроксимируйте двумерную ковариацию векторизованной матрицы как крона (Sx,Sy). Это будет лучшим приближением к 2D ковариации.

Другие вопросы по тегам