Изменения

Перейти к: навигация, поиск

Метод главных компонент (PCA)

778 байт добавлено, 01:56, 29 ноября 2020
Пример кода на R
[[File:800px-Pca 3d to 2d examplev2.png|500px|thumb|right|Применение PCA к данным в трехмерном пространстве]]
'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) <ref>[https://zenodo.org/record/1430636 Pearson, K. (1901). "On Lines and Planes of Closest Fit to Systems of Points in Space"]</ref> в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''Karhunen-Loeve'') <ref>[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]</ref> или преобразованием Хотеллинга (англ. ''Hotelling transform'').
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда
<tex>G^T G = T^T (S^T \tilde{G}^T \tilde{G} S) T = \Lambda;\\ U^T U = T^{-1} (S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T) (T^{-1})^T = (T^T T)^{-1} = I_m.</tex>
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:
<tex>\Delta^2(G, U) </tex> = <tex>\| F - G U^T \|^2 </tex> = <tex>tr \, (F^T - U G^t)(F - G U^T) </tex> = <tex>tr \, F^T (F - G U^T) </tex> = <tex>tr \, F^T F - tr \, F^T G U^T </tex> = <tex>\| F \|^2 - tr \, U \Lambda U^T </tex> = <tex>\| F \|^2 - tr \, \Lambda </tex> = <tex>\sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,</tex>
где $\lambda_1 , ..., \lambda_n$ - все собственные значения матрицы $F^T F$. Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений.
Больше неприятностей могут доставить данные сложной топологии. Для их аппроксимации также изобретены различные методы, например самоорганизующиеся карты Кохонена <ref name=Cohonen /> или нейронный газ <ref>[https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D0%B0%D0%B7 Нейронный газ]</ref>. Если данные статистически порождены с распределением, сильно отличающимся от нормального, то для аппроксимации распределения полезно перейти от главных компонент к независимым компонентам <ref>[https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 Анализ независимых компонент]</ref>, которые уже не ортогональны в исходном скалярном произведении. Наконец, для изотропного распределения (даже нормального) вместо эллипсоида рассеяния получаем шар, и уменьшить размерность методами аппроксимации невозможно.
==Примеры кода=====Пример кода scikit-learn===
Пример применения PCA к датасету Iris для уменьшения размерности:
<span style="color:#3D9970># Импорт библиотек</span>
plt.ylabel("PC2")
plt.show()
 
=== Пример на языке R ===
{{Main|Примеры кода на R}}
 
<font color="gray"># importing library and its' dependencies</font>
library(h2o)
h2o.init()
path <- system.file(<font color="green">"extdata"</font>, <font color="green">"data.csv"</font>, <font color="#660099">package</font> = <font color="green">"h2o"</font>)
data <- h2o.uploadFile(<font color="#660099">path</font> = data)
<font color="gray"># evaluating</font>
h2o.prcomp(<font color="#660099">training_frame</font> = data, <font color="#660099">k</font> = <font color="blue">8</font>, <font color="#660099">transform</font> = <font color="green">"STANDARDIZE"</font>)
==См. также==
286
правок

Навигация