2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помогите доразобраться с методом главных компонент (PCA)
Сообщение27.10.2011, 17:02 


25/10/11
23
Пытаюсь реализовать метод главных компонент программно. В математике разбираюсь плохо,а математическая литература дается с большим трудом. Программная реализация практически готова. Однако есть несколько нюансов. Мне нужно допонять сам алгоритм и быть уверенным, что он правильный.

По пунктам:
1. берем входные данные (к примеру, следующие. по вертикали - sample units, по горизонтали - species)
$$\begin{bmatrix}
1.2 & 2.3 & 7 & 10 \\
2 & 5 & 4.2 & 1.4 \\
3 & 6 & 9 & 12 
\end{bmatrix}$$


2. высчитываем корреляционную матрицу (с данными взятыми в примере получится так)
$$\begin{bmatrix}
1 &  &  &  \\
0.948173324 & 1 &  &  \\
0.472152793 & 0.167577574 & 1 &  \\
0.240192231 & -0.080707602 & 0.96911806 & 1 \\
\end{bmatrix}$$

3. теперь нужно найти собственные значения матрицы. находим:
2,2588028617938E-11
3,00974370200233E-10
1,60828710075361
2,39171289892283
все полученные числа всегда будут вещественными (комплексных быть не может), так как матрица симметричная (?)

4. теперь нужно расположить все собственные значения в порядке убывания (?) и высчитать собственные векторы. получается:
для 2,39171289892283:
$$\begin{bmatrix}
0,552 \\
0,417 \\
0,557 \\
0,459 \\
\end{bmatrix}$$
и для 1,60828710075361:
$$\begin{bmatrix}
0,410 \\
0,603 \\
-0,400 \\
-0,555 \\
\end{bmatrix}$$
остальные собственные значения отбрасываем (???) так как они очень близки к нулю

5. А вот дальше что делать я не совсем понимаю. Знаю что нужно как то преобразовать исходные данные относительно полученных векторов.

Собственно, в этом и заключается вопрос. Что делать после получения собственных векторов?
И хотелось бы получить комментарии относительно того, правильно ли я все делаю (верен ли алгоритм). сомнительные места подсвечены оранжевым

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение28.10.2011, 15:09 
Заслуженный участник
Аватара пользователя


11/03/08
6248
Москва
3. Более того, они будут неотрицательны, поскольку это матрицы Грама.
4. Да, в порядке убывания.
5. Домножаем собственный вектор на корень из соответствующего собственного значения, получаем коэффициенты при главных компонентах.

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение29.10.2011, 16:44 


25/10/11
23
Цитата:
остальные собственные значения отбрасываем (???) так как они очень близки к нулю

Это мое неверное утверждение. Собственные значения отбрасываются, к примеру, "по правилу сломанной трости" или "по правилу Кайзера".

Цитата:
3. Более того, они будут неотрицательны, поскольку это матрицы Грама.
4. Да, в порядке убывания.
5. Домножаем собственный вектор на корень из соответствующего собственного значения, получаем коэффициенты при главных компонентах.

Большое спасибо за ответ. Коэффициенты при главных компонентах я нахожу. А дальше как? Нужно ведь каким-то образом получить окончательную статистику (относительно исходной матрицы и полученных коэфициентов главных компонент).

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение30.10.2011, 08:27 


25/10/11
23
Цитата:
Домножаем собственный вектор на корень из соответствующего собственного значения, получаем коэффициенты при главных компонентах

как понимаю, это получается так называемая "Матрица нагрузок (Loadings)"?

а как правильно получить "Матрицу счетов (Scores)"?

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение31.10.2011, 12:43 


25/10/11
23
использовал компоненты XLStat (для excel) для рассчета PCA.
понятно как получить корреляционную матрицу, понятно как преобразовать ее и получить собственные значения и собственные вектора, понятно как получить из этого матрицу нагрузок (Factor loadings).
матрица нагрузок:
$$
\begin{bmatrix}
0,854 & 0,520 \\
0,644 & 0,765 \\
0,862 & -0,507 \\
0,710 & -0,704 
\end{bmatrix}
 ​$$​

однако теперь нужно высчитать матрицу счетов (Factor scores)
результат получается такой:
$$
\begin{bmatrix}
-0,924 & -1,626 \\
-1,255 & 1,469 \\
2,179 & 0,157 \\
\end{bmatrix}
 ​$$​

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

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение31.10.2011, 17:09 
Заслуженный участник
Аватара пользователя


11/03/08
6248
Москва
Проще всего вести объяснение через сингулярное разложение.
$X=S \Lambda C$
где
$C^TC=CC^T=I$
$S^TS=I$
а матрица сингулярных чисел $\Lambda$ диагональная.
Такое разложение есть у любой матрицы Х (предполагается, что строк не меньше, чем столбцов)
Тогда корреляционная матрица (полагая, что строки матрицы центрированы и нормированы, если выполнено только первое условие, то это будет ковариационная, если даже не центрированы - то непонятно что, специального названия нет, в смысле употребительного в статистике, вообще-то это будет матрица Грама)
$R=X^TX=С^T \Lambda S^T S \Lambda C=C^T \Lambda^2 C$
Очевидно, это эквивалентно разложению по собственным значениям, причём собственные числа есть квадраты сингулярных.
То есть если мы умеем разлагать на с.з. и с.в. корреляционную матрицу - мы уже нашли представление Х в виде $X=SA$
где $A= \Lambda C$
А это и есть наши "факторные нагрузки" А.
Если мы берём их все, то матрицу Х воспроизведём точно. Но мы используем лишь часть их, желая выразить Х через меньшее число "сущностей". Величина сингулярного числа показывает вклад соответствующей матрицы ранга 1 в матрицу Х, так что есть смысл брать самые большие, тогда мы получим наилучшее приближение к Х при малом числе слагаемых.
Остаётся ответить на вопрос, откуда взять "scores" (значения компонент) S.
Из равенства $X=S \Lambda C$ следует, что
$S=X C^T \Lambda^{-1}$

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение31.10.2011, 20:36 


25/10/11
23
спасибо. я полностью, очень внимательно, несколько раз перечитал ваш ответ
понял объяснение через сингулярное разложение
однако все равно не понимаю главного - как получить значения компонент (scores)
что иммеется ввиду под $C$?
$C$ - это ковариационная матрица?

собственно, как я понял, для получения матрицы S нужно:
1. матрицу исходных данных перемножить на ковариационную матрицу (полученную из исходных данных)
2. полученный результат перемножить на обратную матрицу сингулярных значений (сингулярными значениями являются корни из собственных значений)

но резутата, приведенного на пост выше, не удалось добиться все равно. блин. что опять не так делаю?

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение31.10.2011, 23:27 


25/10/11
23
или $C$ это сосбтвенные вектора корреляционной\ковариационной матрицы?
тогда все вроде бы логично:
матрицу исходных данных $X$ перемножаем на матрицу собственных векторов (записанных по порядку в столбик) $C^T$ и результат умножаем на обратную матрицу $\Lambda^{-1}$, составленную из корней собственных значений (диагональная матрица, в главной диагонали которой вписаны собственные значения)
однако все равно результат не сходится. в чем может быть ошибка?

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение01.11.2011, 10:15 


25/10/11
23
еще заметил, что $(S^T S)/n$ равняется диагональной матрице, в диагонали которой лежат собственные значения
$n$ - количество записей (объектов) в исходной таблице

то есть если такую матрицу (транспонированная матрица $S^T$, от матрицы $S$, которую мне высчитал XLStat для excel)
$$
\begin{bmatrix}
-0,924 & -1,255 & 2,179 \\
-1,626 & 1,469 & 0,157 \\
\end{bmatrix}
 ​$$​
умножить на такую ($S$)
$$
\begin{bmatrix}
-0,924 & -1,626 \\
-1,255 & 1,469 \\
2,179 & 0,157 \\
\end{bmatrix}
 ​$$​
а потом каждый из полученных элементов результативной матрицы разделить на n (в данном случае n=3, так как записей в исходной таблице(приводится в первом сообщении топика) 3). получается как раз диагональная матрица
$$
\begin{bmatrix}
2,391712899 & 0\\
0 & 1,608287101\\
\end{bmatrix}
 ​$$​
в диагонали - собственные значения

я разобрался как находить: корреляционную матрицу, собственные значения корреляционной матрицы, собственные вектора, матрицу нагрузок, разобрался как выбирать только значимые компоненты.
Однако так и не могу понять алгоритм получения $S$. Подскажите пожалуйста буквально на словах, что на что разделить\умножить надо, чтобы найти scores?

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение01.11.2011, 12:40 
Заслуженный участник
Аватара пользователя


11/03/08
6248
Москва
С - матрица, составленная из собственных векторов. (Корреляционная-ковариационная это R)
Умножаем Х на матрицу, транспонированную к С, затем делим на корни из с.з.
Что не так выходит?

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение01.11.2011, 13:20 


25/10/11
23
1)берем исходные данные (X)
$$\begin{bmatrix}
1.2 & 2.3 & 7 & 10 \\
2 & 5 & 4.2 & 1.4 \\
3 & 6 & 9 & 12 
\end{bmatrix}$$

2)находим от них корреляционную матрицу (R)
$$\begin{bmatrix}
1 &  &  &  \\
0.948173324 & 1 &  &  \\
0.472152793 & 0.167577574 & 1 &  \\
0.240192231 & -0.080707602 & 0.96911806 & 1 \\
\end{bmatrix}$$

3)находим собственные значения
2,2588028617938E-11
3,00974370200233E-10
1,60828710075361
2,39171289892283

4) правилом Кайзера или правилом "сломанной трости" отбираем только значимые собственные значения и расставляем их в порядке убывания
2,39171289892283
1,60828710075361

5)находим собственные вектора
$eigenvalue=2,39171289892283$
$$\begin{bmatrix}
0,552 \\
0,417 \\
0,557 \\
0,459 \\
\end{bmatrix}$$
$eigenvalue=1,60828710075361$
$$\begin{bmatrix}
0,410 \\
0,603 \\
-0,400 \\
-0,555 \\
\end{bmatrix}$$

6) находим факторные нагрузки (loadings), перемножив каждый собственный вектор на корень из соответствующего собственного значения

$$\begin{bmatrix}
0,854 & 0,520 \\
0,644 & 0,765 \\
0,862 & -0,507 \\
0,710 & -0,704 \\
\end{bmatrix}$$

7) остается найти scores.
Итак:
Умножаем исходную матрицу $X$ на транспонированную к матрице собственных векторов ($C^T$)
Это ($X$)
$$\begin{bmatrix}
1.2 & 2.3 & 7 & 10 \\
2 & 5 & 4.2 & 1.4 \\
3 & 6 & 9 & 12 
\end{bmatrix}
$$
умножаем на ($C^T$)
$$\begin{bmatrix}
0,552 & 0,410  \\
0,417 & 0,603 \\
0,557 & -0,400 \\
0,459 & -0,555\\
\end{bmatrix}$$
получаем такую матрицу $X C^T$:
$$\begin{bmatrix}
10,1105 &  -6,4711  \\
6,171 & 1,378 \\
14,679 & -5,412 \\
\end{bmatrix}$$
теперь ее надо разделить на матрицу корней из с.з.$\Lambda$, то есть домножить на обратную матрицу $\Lambda^{-1}$
матрица корней с.з. $\Lambda$, как понимаю, имеет следующий вид
$$\begin{bmatrix}
1,547 &  0  \\
0 & 1,268 \\
\end{bmatrix}$$
обратная ей $\Lambda^{-1}$:
$$\begin{bmatrix}
0,646 &  0  \\
0 & 0,789 \\
\end{bmatrix}$$

теперь перемножаем $X C^T$ на $\Lambda^{-1}$
получается
$$\begin{bmatrix}
6,531383 &  -5,1056979  \\
3,986466 & 1,087242 \\
9,482634 & -4,270068 \\
\end{bmatrix}$$
это и есть scores?


просто дело в том, что я запускаю PCA анализ через плагин к excel (xlstats), который выводит совсем другую матрицу счетов scores
$$
\begin{bmatrix}
-0,924 & -1,626 \\
-1,255 & 1,469 \\
2,179 & 0,157 \\
\end{bmatrix}
 ​$$​
в настройках анализа можно задавать PCA type: pearson(n),pearson(n-1),spearman,covariance(n),covariance(n-1) и т.д.
я выбираю pearson(n). и я не могу понять откуда там берутся такие значения, как такое подсчиталось
ПРИЧЕМ! абсолютно все предыдущие пункты (корреляционная матрицы, с.з, с.в.,матрица нагрузок) высчитываются аналогично - все значения полностью совпадают с моими рассчетами. а аналогичную матрицу счетов я получить никак не могу.
Ответ который выводит xlstats явно верный, так как если поулченную из него матрицу транспонировать ($S^T$) и умножить на нетранспонированную ($S$), а затем разделить каждый полученный элемент на n (n=3, так как в исходных данных 3 строки), то у нас получается диагональная матрица собственных значений, как и должно быть по формулам.
это значит, что я что-то делаю неверно

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение01.11.2011, 16:01 
Заслуженный участник
Аватара пользователя


11/03/08
6248
Москва
А нормировать Х?

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение01.11.2011, 17:15 


25/10/11
23
ура. практически получилось!
не совсем знаю, что такое нормирование. знаю про шкалирование
я сделал автошкалирование по формуле
$(x - \overline{x})/s$
где $x$ - исходные данные
$\overline{x}$ - среднее значение по столбцу
$s$ - стандартное отклонение по столбцу
в итоге получил шкалированную матрицу X. после чего, перемножил ее на матрицу собственных векторов, а затем результат умножит на обратную матрицу корней собственных значений.
получилось следующее:

$$
\begin{bmatrix}
-0,315298645 & -0,825348499 \\
-0,428482445 & 0,745659865 \\
0,74378109 & 0,079688634 \\
\end{bmatrix}
 ​$$​

а финальный результат должен быть таким

$$
\begin{bmatrix}
-0,924 & -1,626 \\
-1,255 & 1,469 \\
2,179 & 0,157 \\
\end{bmatrix}
 ​$$​

то есть, не хватает еще какого то коэфициента, на который нужно умножить полученную матрицу

дайте пожалуста последнюю подсказочку, что это может быть за коэфициент такой?

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение01.11.2011, 20:48 


25/10/11
23
собственно, выбрал в программе PCA метод не pearson(n), а pearson(n-1)
и шкалированную матрицу от X перемножил только с матрицей собственных векторов (на обратную матрицу корней собственных значений уже не умножал)
scores сошлись. ура!
спасибо.
хотя бы так. буду теперь дальше разбираться

 Профиль  
                  
 
 Re: Помогите доразобраться с методом главных компонент (PCA)
Сообщение02.03.2012, 13:52 


25/10/11
23
Еще один вопрос относительно МГК.
Почему когда мы производим спектральное разложение корреляционной матрицы и получаем ее собственные значения и собственные векторы, собственные векторы являются новой ортогональной системой координат, а собственные значения характеризуют дисперсию данных вдоль этих самых векторов?
Существует какая то теорема из многомерного статистического анализа? Мне нужно как-то обосновать то, что разложив корреляционную (или ковариационную) матрицу мы получили именно нужный нам базис векторов, в котором векторы (векторы ГК) ортогональны и максимизируют дисперсию (в порядке уменьшения значимости ГК). Нужно как-то обосновать, что мы нашли то что нужно. Желательно простыми словами. Подскажите, что лучше всего почитать, в какую сторону копать. Буду весьма признателен

в литературе находил следующие записи:
$x=Ay$ (с этим все понятно. производим линейное преобразование исходных данных),
следовательно $xx'=Ayy'A'$. (с этим тоже понятно)
таким образом $E(xx')=R=AE(yy')A'=A\Lambda A'$ (а вот с этим уже не понятно. как так получается, в частности, последнее равенство)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Karan, PAV, Toucan, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group