Делать 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 ковариации.