Изменения

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

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

886 байт добавлено, 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'').
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$
или в векторной записи: $\hat{x} = z U^T$. Восстановленное описание $\hat{x}$ не обязано в точности совпадать с исходным описанием $x$, но их отличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Будем искать одновременно и матрицу новых признаковых описаний $G$, и матрицу линейного преобразования $U$, при которых суммарная невязка $\Delta^2(G, U) = \sum_{i = 1}^{l} \| \hat{x}_i - x_i \|^2$ восстановленных описаний минимальна:
$$\Delta^2(G, U) = \sum_{i = 1}^{l} \| \hat{x}_i - x_i \|^2 = \sum_{i = 1}^{l} \| z_i U^T - x_i \|^2 = \| GU^T - F \|^2 \to \mathop{min}_{G, U},$$
{{Теорема
|statement = Если $<tex>m \leq rank \, F$</tex>, то минимум $<tex>\Delta^2(G, U)$ </tex> достигается, когда столбцы матрицы $<tex>U$ </tex> есть собственные векторы $<tex>F^T F$</tex>, соответствующие $<tex>m$ </tex> максимальным собственным значениям. При этом $<tex>G = F U$</tex>, матрицы $<tex>U$ </tex> и $<tex>G$ </tex> ортогональны.
|proof = Запишем необходимые условия минимума:
<tex>
\begin{cases}\frac{\partial \Delta^2}{\partial G} = (G U^T - F) U = 0;\\ \frac{\partial \Delta^2}{\partial U} = G^T (G U^T - F) = 0.\end{cases}
</tex>
<tex>
\begin{cases}G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. \end{cases}
</tex>
Преобразование $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$ в
<tex>
\begin{cases}G = F U;\\ U \Lambda = F^T G.\end{cases}
</tex>
Подставляя $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
правок

Навигация