<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ile86171</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ile86171"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Ile86171"/>
		<updated>2026-08-04T13:37:06Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72400</id>
		<title>Метод главных компонент (PCA)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72400"/>
				<updated>2020-01-23T00:50:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: PCA v0.0.6&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pca 3d to 2d example.png|500px|thumb|right|Применение PCA к данным в трехмерном пространстве]]&lt;br /&gt;
'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) &amp;lt;ref&amp;gt;[https://zenodo.org/record/1430636 Pearson, K. (1901). &amp;quot;On Lines and Planes of Closest Fit to Systems of Points in Space&amp;quot;]&amp;lt;/ref&amp;gt; в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''Karhunen-Loeve'') &amp;lt;ref&amp;gt;[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]&amp;lt;/ref&amp;gt; или преобразованием Хотеллинга (англ. ''Hotelling transform'').&lt;br /&gt;
&lt;br /&gt;
==Формальная постановка задачи==&lt;br /&gt;
[[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (1901): даны точки &amp;lt;tex&amp;gt; P_i&amp;lt;/tex&amp;gt; на плоскости, &amp;lt;tex&amp;gt;  p_i&amp;lt;/tex&amp;gt; — расстояние от &amp;lt;tex&amp;gt;  P_i&amp;lt;/tex&amp;gt; до прямой &amp;lt;tex&amp;gt; AB&amp;lt;/tex&amp;gt;. Ищется прямая &amp;lt;tex&amp;gt;  AB&amp;lt;/tex&amp;gt;, минимизирующая сумму &amp;lt;tex&amp;gt;\sum_i p_i^2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть имеется $n$ числовых признаков $f_j(x), j = 1, ... , n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \equiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, строки которой соответствуют признаковым описаниям обучающих объектов:&lt;br /&gt;
$$F_{l \times n} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; ... &amp;amp; f_n(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
f_1(x_l) &amp;amp; ... &amp;amp; f_n(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
x_1\\&lt;br /&gt;
...\\&lt;br /&gt;
x_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Обозначим через $z_i = (g_1(x_i), ..., g_m(x_i))$ признаковые описания тех же объектов в новом пространстве $Z = \mathbb{R}^{m}$ меньшей размерности, $m &amp;lt; n$:&lt;br /&gt;
&lt;br /&gt;
$$G_{l \times m} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
g_1(x_1) &amp;amp; ... &amp;amp; g_m(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
g_1(x_l) &amp;amp; ... &amp;amp; g_m(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_1\\&lt;br /&gt;
...\\&lt;br /&gt;
z_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Потребуем, чтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U = (u_{js})_{n \times m}$:&lt;br /&gt;
&lt;br /&gt;
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$&lt;br /&gt;
&lt;br /&gt;
или в векторной записи: $\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$ восстановленных описаний минимальна:&lt;br /&gt;
&lt;br /&gt;
$$\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},$$&lt;br /&gt;
&lt;br /&gt;
где все нормы евклидовы.&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что матрицы $G$ и $U$ невырождены: $rank \, G = rank \, U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, меньшим $m$. Поэтому интересны лишь случаи, когда $m \leq rank \, F$.&lt;br /&gt;
&lt;br /&gt;
==Решение==&lt;br /&gt;
&lt;br /&gt;
Исчерпывающее решение сформулированной задачи даёт следующая теорема.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.&lt;br /&gt;
&lt;br /&gt;
|proof = Запишем необходимые условия минимума:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку искомые матрицы $G$ и $U$ невырождены, отсюда следует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Пусть $\tilde{G} \tilde{U}^T$ {{---}} произвольное решение задачи.&lt;br /&gt;
&lt;br /&gt;
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ {{---}} диагональная матрица. По определению ортогональности $T^T T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U;\\ U \Lambda = F^T G.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$.  Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.&lt;br /&gt;
&lt;br /&gt;
Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям.&lt;br /&gt;
&lt;br /&gt;
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где $\lambda_1 , ..., \lambda_n$ -  все собственные значения матрицы $F^T F$.  Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений.&lt;br /&gt;
&lt;br /&gt;
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства==&lt;br /&gt;
&lt;br /&gt;
===Связь с сингулярным разложением===&lt;br /&gt;
&lt;br /&gt;
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.&lt;br /&gt;
&lt;br /&gt;
Если $m &amp;lt; n$, то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.&lt;br /&gt;
&lt;br /&gt;
===Преобразование Карунена–Лоэва===&lt;br /&gt;
&lt;br /&gt;
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на объектах из обучающей выборки. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.&lt;br /&gt;
&lt;br /&gt;
===Эффективная размерность===&lt;br /&gt;
&lt;br /&gt;
Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'' задачи. На практике её определяют следующим образом. Все собственные значения матрицы $F^T F$ упорядочиваются по убыванию: $\lambda_1 \geq ... \geq \lambda_n \geq 0$. Задаётся пороговое значение $\epsilon \in [0, 1]$, достаточно близкое к нулю, и определяется наименьшее целое $m$, при котором относительная погрешность приближения матрицы $F$ не превышает $\epsilon$:&lt;br /&gt;
&lt;br /&gt;
$$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ... + \lambda_n}{\lambda_1 + ... + \lambda_n} \leq \epsilon .$$&lt;br /&gt;
&lt;br /&gt;
Величина $E(m)$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$. Метод главных компонент особенно эффективен в тех случаях, когда $E(m)$ оказывается малым уже при малых значениях $m$. Если задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.  На графике $E(m)$ отмечается то значение $m$, при котором происходит резкий скачок: $E(m - 1) \gg E(m)$, при условии, что $E(m)$ уже достаточно мало.&lt;br /&gt;
&lt;br /&gt;
==Визуализация многомерных данных==&lt;br /&gt;
&lt;br /&gt;
[[File:Pca dim reduction.png|650px|thumb|right|Уменьшение размерности данных с помощью PCA]]&lt;br /&gt;
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m = 2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i = 1, ..., l$,  наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется&lt;br /&gt;
с целью понимания данных. Аналогичную роль играют многомерное шкалирование &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]&amp;lt;/ref&amp;gt; и карты Кохонена &amp;lt;ref name=Cohonen&amp;gt; [https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пределы применимости и ограничения эффективности метода==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент применим всегда. Распространённое утверждение о том, что он применим только к нормально распределённым данным (или для распределений, близких к нормальным) неверно: в исходной формулировке К. Пирсона ставится задача об ''аппроксимации'' конечного множества данных и отсутствует даже гипотеза о их статистическом порождении, не говоря уж о распределении.&lt;br /&gt;
&lt;br /&gt;
Однако метод не всегда эффективно снижает размерность при заданных ограничениях на точность $E(m)$. Прямые и плоскости не всегда обеспечивают хорошую аппроксимацию. Например, данные могут с хорошей точностью следовать какой-нибудь кривой, а эта кривая может быть сложно расположена в пространстве данных. В этом случае метод главных компонент для приемлемой точности потребует нескольких компонент (вместо одной), или вообще не даст снижения размерности при приемлемой точности.&lt;br /&gt;
&lt;br /&gt;
Больше неприятностей могут доставить данные сложной топологии. Для их аппроксимации также изобретены различные методы, например самоорганизующиеся карты Кохонена &amp;lt;ref name=Cohonen /&amp;gt; или нейронный газ &amp;lt;ref&amp;gt;[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 Нейронный газ]&amp;lt;/ref&amp;gt;. Если данные статистически порождены с распределением, сильно отличающимся от нормального, то для аппроксимации распределения полезно перейти от главных компонент к независимым компонентам &amp;lt;ref&amp;gt;[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 Анализ независимых компонент]&amp;lt;/ref&amp;gt;, которые уже не ортогональны в исходном скалярном произведении. Наконец, для изотропного распределения (даже нормального) вместо эллипсоида рассеяния получаем шар, и уменьшить размерность методами аппроксимации невозможно.&lt;br /&gt;
&lt;br /&gt;
==Пример кода scikit-learn==&lt;br /&gt;
Пример применения PCA к датасету Iris для уменьшения размерности:&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Импорт библиотек&amp;lt;/span&amp;gt;&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from sklearn import decomposition&lt;br /&gt;
  from sklearn import datasets&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  centers = [[1, 1], [-1, -1], [1, -1]]&lt;br /&gt;
  iris = datasets.load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  y = iris.target&lt;br /&gt;
&lt;br /&gt;
  [[File:Pca iris example.png|275px|thumb|right|Применения PCA к датасету Iris]]&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Преобразование данных датасета Iris, уменьшающее размерность до 2&amp;lt;/span&amp;gt;&lt;br /&gt;
  pca = decomposition.PCA(n_components=3)&lt;br /&gt;
  pca.fit(X)&lt;br /&gt;
  X = pca.transform(X)&lt;br /&gt;
  y = np.choose(y, [1, 2, 0]).astype(np.float)&lt;br /&gt;
  plt.clf()&lt;br /&gt;
  plt.cla()&lt;br /&gt;
  plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k')&lt;br /&gt;
  plt.xlabel(&amp;quot;PC1&amp;quot;)&lt;br /&gt;
  plt.ylabel(&amp;quot;PC2&amp;quot;)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Сингулярное разложение]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]&lt;br /&gt;
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция &amp;quot;Регрессионный анализ и метод главных компонентов&amp;quot;] {{---}} К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l9.pdf PCA] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Principal_component_analysis Principal Component Analysis] {{---}} статья про Principal Component Analysis в Wikipedia&lt;br /&gt;
#[https://towardsdatascience.com/understanding-pca-fae3e243731d Understanding PCA]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;br /&gt;
[[Категория: Метод главных компонент]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72399</id>
		<title>Метод главных компонент (PCA)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72399"/>
				<updated>2020-01-23T00:46:01Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: PCA v0.0.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pca 3d to 2d example.png|500px|thumb|right|Применение PCA к данным в трехмерном пространстве]]&lt;br /&gt;
'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) &amp;lt;ref&amp;gt;[https://zenodo.org/record/1430636 Pearson, K. (1901). &amp;quot;On Lines and Planes of Closest Fit to Systems of Points in Space&amp;quot;]&amp;lt;/ref&amp;gt; в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''Karhunen-Loeve'') &amp;lt;ref&amp;gt;[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]&amp;lt;/ref&amp;gt; или преобразованием Хотеллинга (англ. ''Hotelling transform'').&lt;br /&gt;
&lt;br /&gt;
==Формальная постановка задачи==&lt;br /&gt;
[[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (1901): даны точки &amp;lt;tex&amp;gt; P_i&amp;lt;/tex&amp;gt; на плоскости, &amp;lt;tex&amp;gt;  p_i&amp;lt;/tex&amp;gt; — расстояние от &amp;lt;tex&amp;gt;  P_i&amp;lt;/tex&amp;gt; до прямой &amp;lt;tex&amp;gt; AB&amp;lt;/tex&amp;gt;. Ищется прямая &amp;lt;tex&amp;gt;  AB&amp;lt;/tex&amp;gt;, минимизирующая сумму &amp;lt;tex&amp;gt;\sum_i p_i^2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть имеется $n$ числовых признаков $f_j(x), j = 1, ... , n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \equiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, строки которой соответствуют признаковым описаниям обучающих объектов:&lt;br /&gt;
$$F_{l \times n} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; ... &amp;amp; f_n(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
f_1(x_l) &amp;amp; ... &amp;amp; f_n(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
x_1\\&lt;br /&gt;
...\\&lt;br /&gt;
x_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Обозначим через $z_i = (g_1(x_i), ..., g_m(x_i))$ признаковые описания тех же объектов в новом пространстве $Z = \mathbb{R}^{m}$ меньшей размерности, $m &amp;lt; n$:&lt;br /&gt;
&lt;br /&gt;
$$G_{l \times m} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
g_1(x_1) &amp;amp; ... &amp;amp; g_m(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
g_1(x_l) &amp;amp; ... &amp;amp; g_m(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_1\\&lt;br /&gt;
...\\&lt;br /&gt;
z_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Потребуем, чтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U = (u_{js})_{n \times m}$:&lt;br /&gt;
&lt;br /&gt;
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$&lt;br /&gt;
&lt;br /&gt;
или в векторной записи: $\hat{x} = z U^T$. Восстановленное описание $\hat{x}$ не обязано в точности совпадать с исходным описанием $x$, но их отличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Будем искать одновременно и матрицу новых признаковых описаний $G$, и матрицу линейного преобразования $U$, при которых суммарная невязка восстановленных описаний минимальна:&lt;br /&gt;
&lt;br /&gt;
$$\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},$$&lt;br /&gt;
&lt;br /&gt;
где все нормы евклидовы.&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что матрицы $G$ и $U$ невырождены: $rank \, G = rank \, U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, меньшим $m$. Поэтому интересны лишь случаи, когда $m \leq rank \, F$.&lt;br /&gt;
&lt;br /&gt;
==Решение==&lt;br /&gt;
&lt;br /&gt;
Исчерпывающее решение сформулированной задачи даёт следующая теорема.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.&lt;br /&gt;
&lt;br /&gt;
|proof = Запишем необходимые условия минимума:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку искомые матрицы $G$ и $U$ невырождены, отсюда следует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Пусть $\tilde{G} \tilde{U}^T$ {{---}} произвольное решение задачи.&lt;br /&gt;
&lt;br /&gt;
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ {{---}} диагональная матрица. По определению ортогональности $T^T T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U;\\ U \Lambda = F^T G.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$.  Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.&lt;br /&gt;
&lt;br /&gt;
Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям.&lt;br /&gt;
&lt;br /&gt;
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где $\lambda_1 , ..., \lambda_n$ -  все собственные значения матрицы $F^T F$.  Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений.&lt;br /&gt;
&lt;br /&gt;
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства==&lt;br /&gt;
&lt;br /&gt;
===Связь с сингулярным разложением===&lt;br /&gt;
&lt;br /&gt;
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.&lt;br /&gt;
&lt;br /&gt;
Если $m &amp;lt; n$, то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.&lt;br /&gt;
&lt;br /&gt;
===Преобразование Карунена–Лоэва===&lt;br /&gt;
&lt;br /&gt;
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на объектах из обучающей выборки. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.&lt;br /&gt;
&lt;br /&gt;
===Эффективная размерность===&lt;br /&gt;
&lt;br /&gt;
Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'' задачи. На практике её определяют следующим образом. Все собственные значения матрицы $F^T F$ упорядочиваются по убыванию: $\lambda_1 \geq ... \geq \lambda_n \geq 0$. Задаётся пороговое значение $\epsilon \in [0, 1]$, достаточно близкое к нулю, и определяется наименьшее целое $m$, при котором относительная погрешность приближения матрицы $F$ не превышает $\epsilon$:&lt;br /&gt;
&lt;br /&gt;
$$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ... + \lambda_n}{\lambda_1 + ... + \lambda_n} \leq \epsilon .$$&lt;br /&gt;
&lt;br /&gt;
Величина $E(m)$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$. Метод главных компонент особенно эффективен в тех случаях, когда $E(m)$ оказывается малым уже при малых значениях $m$. Если задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.  На графике $E(m)$ отмечается то значение $m$, при котором происходит резкий скачок: $E(m - 1) \gg E(m)$, при условии, что $E(m)$ уже достаточно мало.&lt;br /&gt;
&lt;br /&gt;
==Визуализация многомерных данных==&lt;br /&gt;
&lt;br /&gt;
[[File:Pca dim reduction.png|650px|thumb|right|Уменьшение размерности данных с помощью PCA]]&lt;br /&gt;
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m = 2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i = 1, ..., l$,  наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется&lt;br /&gt;
с целью понимания данных. Аналогичную роль играют многомерное шкалирование &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]&amp;lt;/ref&amp;gt; и карты Кохонена &amp;lt;ref name=Cohonen&amp;gt; [https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пределы применимости и ограничения эффективности метода==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент применим всегда. Распространённое утверждение о том, что он применим только к нормально распределённым данным (или для распределений, близких к нормальным) неверно: в исходной формулировке К. Пирсона ставится задача об ''аппроксимации'' конечного множества данных и отсутствует даже гипотеза о их статистическом порождении, не говоря уж о распределении.&lt;br /&gt;
&lt;br /&gt;
Однако метод не всегда эффективно снижает размерность при заданных ограничениях на точность $E(m)$. Прямые и плоскости не всегда обеспечивают хорошую аппроксимацию. Например, данные могут с хорошей точностью следовать какой-нибудь кривой, а эта кривая может быть сложно расположена в пространстве данных. В этом случае метод главных компонент для приемлемой точности потребует нескольких компонент (вместо одной), или вообще не даст снижения размерности при приемлемой точности.&lt;br /&gt;
&lt;br /&gt;
Больше неприятностей могут доставить данные сложной топологии. Для их аппроксимации также изобретены различные методы, например самоорганизующиеся карты Кохонена &amp;lt;ref name=Cohonen /&amp;gt; или нейронный газ &amp;lt;ref&amp;gt;[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 Нейронный газ]&amp;lt;/ref&amp;gt;. Если данные статистически порождены с распределением, сильно отличающимся от нормального, то для аппроксимации распределения полезно перейти от главных компонент к независимым компонентам &amp;lt;ref&amp;gt;[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 Анализ независимых компонент]&amp;lt;/ref&amp;gt;, которые уже не ортогональны в исходном скалярном произведении. Наконец, для изотропного распределения (даже нормального) вместо эллипсоида рассеяния получаем шар, и уменьшить размерность методами аппроксимации невозможно.&lt;br /&gt;
&lt;br /&gt;
==Пример кода scikit-learn==&lt;br /&gt;
Пример применения PCA к датасету Iris для уменьшения размерности:&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Импорт библиотек&amp;lt;/span&amp;gt;&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from sklearn import decomposition&lt;br /&gt;
  from sklearn import datasets&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  centers = [[1, 1], [-1, -1], [1, -1]]&lt;br /&gt;
  iris = datasets.load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  y = iris.target&lt;br /&gt;
&lt;br /&gt;
  [[File:Pca iris example.png|275px|thumb|right|Применения PCA к датасету Iris]]&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Преобразование данных датасета Iris, уменьшающее размерность до 2&amp;lt;/span&amp;gt;&lt;br /&gt;
  pca = decomposition.PCA(n_components=3)&lt;br /&gt;
  pca.fit(X)&lt;br /&gt;
  X = pca.transform(X)&lt;br /&gt;
  y = np.choose(y, [1, 2, 0]).astype(np.float)&lt;br /&gt;
  plt.clf()&lt;br /&gt;
  plt.cla()&lt;br /&gt;
  plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k')&lt;br /&gt;
  plt.xlabel(&amp;quot;PC1&amp;quot;)&lt;br /&gt;
  plt.ylabel(&amp;quot;PC2&amp;quot;)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Сингулярное разложение]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]&lt;br /&gt;
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция &amp;quot;Регрессионный анализ и метод главных компонентов&amp;quot;] {{---}} К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l9.pdf PCA] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Principal_component_analysis Principal Component Analysis] {{---}} статья про Principal Component Analysis в Wikipedia&lt;br /&gt;
#[https://towardsdatascience.com/understanding-pca-fae3e243731d Understanding PCA]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;br /&gt;
[[Категория: Метод главных компонент]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pca_dim_reduction.png&amp;diff=72398</id>
		<title>Файл:Pca dim reduction.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pca_dim_reduction.png&amp;diff=72398"/>
				<updated>2020-01-23T00:43:01Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72397</id>
		<title>Метод главных компонент (PCA)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72397"/>
				<updated>2020-01-23T00:16:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: PCA v0.0.4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pca 3d to 2d example.png|500px|thumb|right|Применение PCA к данным в трехмерном пространстве]]&lt;br /&gt;
'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) &amp;lt;ref&amp;gt;[https://zenodo.org/record/1430636 Pearson, K. (1901). &amp;quot;On Lines and Planes of Closest Fit to Systems of Points in Space&amp;quot;]&amp;lt;/ref&amp;gt; в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''Karhunen-Loeve'') &amp;lt;ref&amp;gt;[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]&amp;lt;/ref&amp;gt; или преобразованием Хотеллинга (англ. ''Hotelling transform'').&lt;br /&gt;
&lt;br /&gt;
==Формальная постановка задачи==&lt;br /&gt;
[[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (1901): даны точки &amp;lt;tex&amp;gt; P_i&amp;lt;/tex&amp;gt; на плоскости, &amp;lt;tex&amp;gt;  p_i&amp;lt;/tex&amp;gt; — расстояние от &amp;lt;tex&amp;gt;  P_i&amp;lt;/tex&amp;gt; до прямой &amp;lt;tex&amp;gt; AB&amp;lt;/tex&amp;gt;. Ищется прямая &amp;lt;tex&amp;gt;  AB&amp;lt;/tex&amp;gt;, минимизирующая сумму &amp;lt;tex&amp;gt;\sum_i p_i^2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть имеется $n$ числовых признаков $f_j(x), j = 1, ... , n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \equiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, строки которой соответствуют признаковым описаниям обучающих объектов:&lt;br /&gt;
$$F_{l \times n} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; ... &amp;amp; f_n(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
f_1(x_l) &amp;amp; ... &amp;amp; f_n(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
x_1\\&lt;br /&gt;
...\\&lt;br /&gt;
x_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Обозначим через $z_i = (g_1(x_i), ..., g_m(x_i))$ признаковые описания тех же объектов в новом пространстве $Z = \mathbb{R}^{m}$ меньшей размерности, $m &amp;lt; n$:&lt;br /&gt;
&lt;br /&gt;
$$G_{l \times m} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
g_1(x_1) &amp;amp; ... &amp;amp; g_m(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
g_1(x_l) &amp;amp; ... &amp;amp; g_m(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_1\\&lt;br /&gt;
...\\&lt;br /&gt;
z_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Потребуем, чтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U = (u_{js})_{n \times m}$:&lt;br /&gt;
&lt;br /&gt;
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$&lt;br /&gt;
&lt;br /&gt;
или в векторной записи: $\hat{x} = z U^T$. Восстановленное описание $\hat{x}$ не обязано в точности совпадать с исходным описанием $x$, но их отличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Будем искать одновременно и матрицу новых признаковых описаний $G$, и матрицу линейного преобразования $U$, при которых суммарная невязка восстановленных описаний минимальна:&lt;br /&gt;
&lt;br /&gt;
$$\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},$$&lt;br /&gt;
&lt;br /&gt;
где все нормы евклидовы.&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что матрицы $G$ и $U$ невырождены: $rank \, G = rank \, U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, меньшим $m$. Поэтому интересны лишь случаи, когда $m \leq rank \, F$.&lt;br /&gt;
&lt;br /&gt;
==Решение==&lt;br /&gt;
&lt;br /&gt;
Исчерпывающее решение сформулированной задачи даёт следующая теорема.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.&lt;br /&gt;
&lt;br /&gt;
|proof = Запишем необходимые условия минимума:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку искомые матрицы $G$ и $U$ невырождены, отсюда следует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Пусть $\tilde{G} \tilde{U}^T$ {{---}} произвольное решение задачи.&lt;br /&gt;
&lt;br /&gt;
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ {{---}} диагональная матрица. По определению ортогональности $T^T T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U;\\ U \Lambda = F^T G.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$.  Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.&lt;br /&gt;
&lt;br /&gt;
Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям.&lt;br /&gt;
&lt;br /&gt;
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где $\lambda_1 , ..., \lambda_n$ -  все собственные значения матрицы $F^T F$.  Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений.&lt;br /&gt;
&lt;br /&gt;
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства==&lt;br /&gt;
&lt;br /&gt;
===Связь с сингулярным разложением===&lt;br /&gt;
&lt;br /&gt;
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.&lt;br /&gt;
&lt;br /&gt;
Если $m &amp;lt; n$, то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.&lt;br /&gt;
&lt;br /&gt;
===Преобразование Карунена–Лоэва===&lt;br /&gt;
&lt;br /&gt;
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на объектах из обучающей выборки. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.&lt;br /&gt;
&lt;br /&gt;
===Эффективная размерность===&lt;br /&gt;
&lt;br /&gt;
Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'' задачи. На практике её определяют следующим образом. Все собственные значения матрицы $F^T F$ упорядочиваются по убыванию: $\lambda_1 \geq ... \geq \lambda_n \geq 0$. Задаётся пороговое значение $\epsilon \in [0, 1]$, достаточно близкое к нулю, и определяется наименьшее целое $m$, при котором относительная погрешность приближения матрицы $F$ не превышает $\epsilon$:&lt;br /&gt;
&lt;br /&gt;
$$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ... + \lambda_n}{\lambda_1 + ... + \lambda_n} \leq \epsilon .$$&lt;br /&gt;
&lt;br /&gt;
Величина $E(m)$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$. Метод главных компонент особенно эффективен в тех случаях, когда $E(m)$ оказывается малым уже при малых значениях $m$. Если задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.  На графике $E(m)$ отмечается то значение $m$, при котором происходит резкий скачок: $E(m - 1) \gg E(m)$, при условии, что $E(m)$ уже достаточно мало.&lt;br /&gt;
&lt;br /&gt;
==Визуализация многомерных данных==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m = 2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i = 1, ..., l$,  наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется&lt;br /&gt;
с целью понимания данных. Аналогичную роль играют многомерное шкалирование &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]&amp;lt;/ref&amp;gt; и карты Кохонена &amp;lt;ref name=Cohonen&amp;gt; [https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пределы применимости и ограничения эффективности метода==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент применим всегда. Распространённое утверждение о том, что он применим только к нормально распределённым данным (или для распределений, близких к нормальным) неверно: в исходной формулировке К. Пирсона ставится задача об ''аппроксимации'' конечного множества данных и отсутствует даже гипотеза о их статистическом порождении, не говоря уж о распределении.&lt;br /&gt;
&lt;br /&gt;
Однако метод не всегда эффективно снижает размерность при заданных ограничениях на точность $E(m)$. Прямые и плоскости не всегда обеспечивают хорошую аппроксимацию. Например, данные могут с хорошей точностью следовать какой-нибудь кривой, а эта кривая может быть сложно расположена в пространстве данных. В этом случае метод главных компонент для приемлемой точности потребует нескольких компонент (вместо одной), или вообще не даст снижения размерности при приемлемой точности.&lt;br /&gt;
&lt;br /&gt;
Больше неприятностей могут доставить данные сложной топологии. Для их аппроксимации также изобретены различные методы, например самоорганизующиеся карты Кохонена &amp;lt;ref name=Cohonen /&amp;gt; или нейронный газ &amp;lt;ref&amp;gt;[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 Нейронный газ]&amp;lt;/ref&amp;gt;. Если данные статистически порождены с распределением, сильно отличающимся от нормального, то для аппроксимации распределения полезно перейти от главных компонент к независимым компонентам &amp;lt;ref&amp;gt;[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 Анализ независимых компонент]&amp;lt;/ref&amp;gt;, которые уже не ортогональны в исходном скалярном произведении. Наконец, для изотропного распределения (даже нормального) вместо эллипсоида рассеяния получаем шар, и уменьшить размерность методами аппроксимации невозможно.&lt;br /&gt;
&lt;br /&gt;
==Пример кода scikit-learn==&lt;br /&gt;
Пример применения PCA к датасету Iris для уменьшения размерности:&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Импорт библиотек&amp;lt;/span&amp;gt;&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from sklearn import decomposition&lt;br /&gt;
  from sklearn import datasets&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  centers = [[1, 1], [-1, -1], [1, -1]]&lt;br /&gt;
  iris = datasets.load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  y = iris.target&lt;br /&gt;
&lt;br /&gt;
  [[File:Pca iris example.png|275px|thumb|right|Применения PCA к датасету Iris]]&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Преобразование данных датасета Iris, уменьшающее размерность до 2&amp;lt;/span&amp;gt;&lt;br /&gt;
  pca = decomposition.PCA(n_components=3)&lt;br /&gt;
  pca.fit(X)&lt;br /&gt;
  X = pca.transform(X)&lt;br /&gt;
  y = np.choose(y, [1, 2, 0]).astype(np.float)&lt;br /&gt;
  plt.clf()&lt;br /&gt;
  plt.cla()&lt;br /&gt;
  plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k')&lt;br /&gt;
  plt.xlabel(&amp;quot;PC1&amp;quot;)&lt;br /&gt;
  plt.ylabel(&amp;quot;PC2&amp;quot;)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Сингулярное разложение]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]&lt;br /&gt;
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция &amp;quot;Регрессионный анализ и метод главных компонентов&amp;quot;] {{---}} К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l9.pdf PCA] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Principal_component_analysis Principal Component Analysis] {{---}} статья про Principal Component Analysis в Wikipedia&lt;br /&gt;
#[https://towardsdatascience.com/understanding-pca-fae3e243731d Understanding PCA]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;br /&gt;
[[Категория: Метод главных компонент]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72396</id>
		<title>Метод главных компонент (PCA)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72396"/>
				<updated>2020-01-23T00:03:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: PCA v0.0.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Pca 3d to 2d example.png|500px|thumb|right|Применение PCA к данным в трехмерном пространстве]]&lt;br /&gt;
'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) &amp;lt;ref&amp;gt;[https://zenodo.org/record/1430636 Pearson, K. (1901). &amp;quot;On Lines and Planes of Closest Fit to Systems of Points in Space&amp;quot;]&amp;lt;/ref&amp;gt; в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''Karhunen-Loeve'') &amp;lt;ref&amp;gt;[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]&amp;lt;/ref&amp;gt; или преобразованием Хотеллинга (англ. ''Hotelling transform'').&lt;br /&gt;
&lt;br /&gt;
==Формальная постановка задачи==&lt;br /&gt;
[[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (1901): даны точки &amp;lt;tex&amp;gt; P_i&amp;lt;/tex&amp;gt; на плоскости, &amp;lt;tex&amp;gt;  p_i&amp;lt;/tex&amp;gt; — расстояние от &amp;lt;tex&amp;gt;  P_i&amp;lt;/tex&amp;gt; до прямой &amp;lt;tex&amp;gt; AB&amp;lt;/tex&amp;gt;. Ищется прямая &amp;lt;tex&amp;gt;  AB&amp;lt;/tex&amp;gt;, минимизирующая сумму &amp;lt;tex&amp;gt;\sum_i p_i^2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть имеется $n$ числовых признаков $f_j(x), j = 1, ... , n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \equiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, строки которой соответствуют признаковым описаниям обучающих объектов:&lt;br /&gt;
$$F_{l \times n} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; ... &amp;amp; f_n(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
f_1(x_l) &amp;amp; ... &amp;amp; f_n(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
x_1\\&lt;br /&gt;
...\\&lt;br /&gt;
x_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Обозначим через $z_i = (g_1(x_i), ..., g_m(x_i))$ признаковые описания тех же объектов в новом пространстве $Z = \mathbb{R}^{m}$ меньшей размерности, $m &amp;lt; n$:&lt;br /&gt;
&lt;br /&gt;
$$G_{l \times m} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
g_1(x_1) &amp;amp; ... &amp;amp; g_m(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
g_1(x_l) &amp;amp; ... &amp;amp; g_m(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_1\\&lt;br /&gt;
...\\&lt;br /&gt;
z_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Потребуем, чтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U = (u_{js})_{n \times m}$:&lt;br /&gt;
&lt;br /&gt;
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$&lt;br /&gt;
&lt;br /&gt;
или в векторной записи: $\hat{x} = z U^T$. Восстановленное описание $\hat{x}$ не обязано в точности совпадать с исходным описанием $x$, но их отличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Будем искать одновременно и матрицу новых признаковых описаний $G$, и матрицу линейного преобразования $U$, при которых суммарная невязка восстановленных описаний минимальна:&lt;br /&gt;
&lt;br /&gt;
$$\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},$$&lt;br /&gt;
&lt;br /&gt;
где все нормы евклидовы.&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что матрицы $G$ и $U$ невырождены: $rank \, G = rank \, U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, меньшим $m$. Поэтому интересны лишь случаи, когда $m \leq rank \, F$.&lt;br /&gt;
&lt;br /&gt;
==Решение==&lt;br /&gt;
&lt;br /&gt;
Исчерпывающее решение сформулированной задачи даёт следующая теорема.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.&lt;br /&gt;
&lt;br /&gt;
|proof = Запишем необходимые условия минимума:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку искомые матрицы $G$ и $U$ невырождены, отсюда следует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Пусть $\tilde{G} \tilde{U}^T$ {{---}} произвольное решение задачи.&lt;br /&gt;
&lt;br /&gt;
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ {{---}} диагональная матрица. По определению ортогональности $T^T T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U;\\ U \Lambda = F^T G.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$.  Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.&lt;br /&gt;
&lt;br /&gt;
Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям.&lt;br /&gt;
&lt;br /&gt;
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где $\lambda_1 , ..., \lambda_n$ -  все собственные значения матрицы $F^T F$.  Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений.&lt;br /&gt;
&lt;br /&gt;
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства==&lt;br /&gt;
&lt;br /&gt;
===Связь с сингулярным разложением===&lt;br /&gt;
&lt;br /&gt;
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.&lt;br /&gt;
&lt;br /&gt;
Если $m &amp;lt; n$, то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.&lt;br /&gt;
&lt;br /&gt;
===Преобразование Карунена–Лоэва===&lt;br /&gt;
&lt;br /&gt;
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на объектах из обучающей выборки. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.&lt;br /&gt;
&lt;br /&gt;
===Эффективная размерность===&lt;br /&gt;
&lt;br /&gt;
Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'' задачи. На практике её определяют следующим образом. Все собственные значения матрицы $F^T F$ упорядочиваются по убыванию: $\lambda_1 \geq ... \geq \lambda_n \geq 0$. Задаётся пороговое значение $\epsilon \in [0, 1]$, достаточно близкое к нулю, и определяется наименьшее целое $m$, при котором относительная погрешность приближения матрицы $F$ не превышает $\epsilon$:&lt;br /&gt;
&lt;br /&gt;
$$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ... + \lambda_n}{\lambda_1 + ... + \lambda_n} \leq \epsilon .$$&lt;br /&gt;
&lt;br /&gt;
Величина $E(m)$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$. Метод главных компонент особенно эффективен в тех случаях, когда $E(m)$ оказывается малым уже при малых значениях $m$. Если задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.  На графике $E(m)$ отмечается то значение $m$, при котором происходит резкий скачок: $E(m - 1) \gg E(m)$, при условии, что $E(m)$ уже достаточно мало.&lt;br /&gt;
&lt;br /&gt;
==Визуализация многомерных данных==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m = 2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i = 1, ..., l$,  наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется&lt;br /&gt;
с целью понимания данных. Аналогичную роль играют многомерное шкалирование &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]&amp;lt;/ref&amp;gt; и карты Кохонена &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример кода scikit-learn==&lt;br /&gt;
Пример применения PCA к датасету Iris для уменьшения размерности:&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Импорт библиотек&amp;lt;/span&amp;gt;&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from sklearn import decomposition&lt;br /&gt;
  from sklearn import datasets&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  centers = [[1, 1], [-1, -1], [1, -1]]&lt;br /&gt;
  iris = datasets.load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  y = iris.target&lt;br /&gt;
&lt;br /&gt;
  [[File:Pca iris example.png|275px|thumb|right|Применения PCA к датасету Iris]]&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Преобразование данных датасета Iris, уменьшающее размерность до 2&amp;lt;/span&amp;gt;&lt;br /&gt;
  pca = decomposition.PCA(n_components=3)&lt;br /&gt;
  pca.fit(X)&lt;br /&gt;
  X = pca.transform(X)&lt;br /&gt;
  y = np.choose(y, [1, 2, 0]).astype(np.float)&lt;br /&gt;
  plt.clf()&lt;br /&gt;
  plt.cla()&lt;br /&gt;
  plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k')&lt;br /&gt;
  plt.xlabel(&amp;quot;PC1&amp;quot;)&lt;br /&gt;
  plt.ylabel(&amp;quot;PC2&amp;quot;)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Сингулярное разложение]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]&lt;br /&gt;
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция &amp;quot;Регрессионный анализ и метод главных компонентов&amp;quot;] {{---}} К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l9.pdf PCA] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Principal_component_analysis Principal Component Analysis] {{---}} статья про Principal Component Analysis в Wikipedia&lt;br /&gt;
#[https://towardsdatascience.com/understanding-pca-fae3e243731d Understanding PCA]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;br /&gt;
[[Категория: Метод главных компонент]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pca_3d_to_2d_example.png&amp;diff=72395</id>
		<title>Файл:Pca 3d to 2d example.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pca_3d_to_2d_example.png&amp;diff=72395"/>
				<updated>2020-01-23T00:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72394</id>
		<title>Метод главных компонент (PCA)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72394"/>
				<updated>2020-01-22T23:57:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: PCA v0.0.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) &amp;lt;ref&amp;gt;[https://zenodo.org/record/1430636 Pearson, K. (1901). &amp;quot;On Lines and Planes of Closest Fit to Systems of Points in Space&amp;quot;]&amp;lt;/ref&amp;gt; в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''Karhunen-Loeve'') &amp;lt;ref&amp;gt;[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]&amp;lt;/ref&amp;gt; или преобразованием Хотеллинга (англ. ''Hotelling transform'').&lt;br /&gt;
&lt;br /&gt;
==Формальная постановка задачи==&lt;br /&gt;
[[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (1901): даны точки &amp;lt;tex&amp;gt; P_i&amp;lt;/tex&amp;gt; на плоскости, &amp;lt;tex&amp;gt;  p_i&amp;lt;/tex&amp;gt; — расстояние от &amp;lt;tex&amp;gt;  P_i&amp;lt;/tex&amp;gt; до прямой &amp;lt;tex&amp;gt; AB&amp;lt;/tex&amp;gt;. Ищется прямая &amp;lt;tex&amp;gt;  AB&amp;lt;/tex&amp;gt;, минимизирующая сумму &amp;lt;tex&amp;gt;\sum_i p_i^2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть имеется $n$ числовых признаков $f_j(x), j = 1, ... , n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \equiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, строки которой соответствуют признаковым описаниям обучающих объектов:&lt;br /&gt;
$$F_{l \times n} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; ... &amp;amp; f_n(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
f_1(x_l) &amp;amp; ... &amp;amp; f_n(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
x_1\\&lt;br /&gt;
...\\&lt;br /&gt;
x_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Обозначим через $z_i = (g_1(x_i), ..., g_m(x_i))$ признаковые описания тех же объектов в новом пространстве $Z = \mathbb{R}^{m}$ меньшей размерности, $m &amp;lt; n$:&lt;br /&gt;
&lt;br /&gt;
$$G_{l \times m} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
g_1(x_1) &amp;amp; ... &amp;amp; g_m(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
g_1(x_l) &amp;amp; ... &amp;amp; g_m(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_1\\&lt;br /&gt;
...\\&lt;br /&gt;
z_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Потребуем, чтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U = (u_{js})_{n \times m}$:&lt;br /&gt;
&lt;br /&gt;
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$&lt;br /&gt;
&lt;br /&gt;
или в векторной записи: $\hat{x} = z U^T$. Восстановленное описание $\hat{x}$ не обязано в точности совпадать с исходным описанием $x$, но их отличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Будем искать одновременно и матрицу новых признаковых описаний $G$, и матрицу линейного преобразования $U$, при которых суммарная невязка восстановленных описаний минимальна:&lt;br /&gt;
&lt;br /&gt;
$$\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},$$&lt;br /&gt;
&lt;br /&gt;
где все нормы евклидовы.&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что матрицы $G$ и $U$ невырождены: $rank \, G = rank \, U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, меньшим $m$. Поэтому интересны лишь случаи, когда $m \leq rank \, F$.&lt;br /&gt;
&lt;br /&gt;
==Решение==&lt;br /&gt;
&lt;br /&gt;
Исчерпывающее решение сформулированной задачи даёт следующая теорема.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.&lt;br /&gt;
&lt;br /&gt;
|proof = Запишем необходимые условия минимума:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку искомые матрицы $G$ и $U$ невырождены, отсюда следует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Пусть $\tilde{G} \tilde{U}^T$ {{---}} произвольное решение задачи.&lt;br /&gt;
&lt;br /&gt;
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ {{---}} диагональная матрица. По определению ортогональности $T^T T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U;\\ U \Lambda = F^T G.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$.  Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.&lt;br /&gt;
&lt;br /&gt;
Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям.&lt;br /&gt;
&lt;br /&gt;
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где $\lambda_1 , ..., \lambda_n$ -  все собственные значения матрицы $F^T F$.  Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений.&lt;br /&gt;
&lt;br /&gt;
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства==&lt;br /&gt;
&lt;br /&gt;
===Связь с сингулярным разложением===&lt;br /&gt;
&lt;br /&gt;
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.&lt;br /&gt;
&lt;br /&gt;
Если $m &amp;lt; n$, то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.&lt;br /&gt;
&lt;br /&gt;
===Преобразование Карунена–Лоэва===&lt;br /&gt;
&lt;br /&gt;
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на объектах из обучающей выборки. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.&lt;br /&gt;
&lt;br /&gt;
===Эффективная размерность===&lt;br /&gt;
&lt;br /&gt;
Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'' задачи. На практике её определяют следующим образом. Все собственные значения матрицы $F^T F$ упорядочиваются по убыванию: $\lambda_1 \geq ... \geq \lambda_n \geq 0$. Задаётся пороговое значение $\epsilon \in [0, 1]$, достаточно близкое к нулю, и определяется наименьшее целое $m$, при котором относительная погрешность приближения матрицы $F$ не превышает $\epsilon$:&lt;br /&gt;
&lt;br /&gt;
$$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ... + \lambda_n}{\lambda_1 + ... + \lambda_n} \leq \epsilon .$$&lt;br /&gt;
&lt;br /&gt;
Величина $E(m)$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$. Метод главных компонент особенно эффективен в тех случаях, когда $E(m)$ оказывается малым уже при малых значениях $m$. Если задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.  На графике $E(m)$ отмечается то значение $m$, при котором происходит резкий скачок: $E(m - 1) \gg E(m)$, при условии, что $E(m)$ уже достаточно мало.&lt;br /&gt;
&lt;br /&gt;
==Визуализация многомерных данных==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m = 2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i = 1, ..., l$,  наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется&lt;br /&gt;
с целью понимания данных. Аналогичную роль играют многомерное шкалирование &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]&amp;lt;/ref&amp;gt; и карты Кохонена &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример кода scikit-learn==&lt;br /&gt;
Пример применения PCA к датасету Iris для уменьшения размерности:&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Импорт библиотек&amp;lt;/span&amp;gt;&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from sklearn import decomposition&lt;br /&gt;
  from sklearn import datasets&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  centers = [[1, 1], [-1, -1], [1, -1]]&lt;br /&gt;
  iris = datasets.load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  y = iris.target&lt;br /&gt;
&lt;br /&gt;
  [[File:Pca iris example.png|275px|thumb|right|Применения PCA к датасету Iris]]&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Преобразование данных датасета Iris, уменьшающее размерность до 2&amp;lt;/span&amp;gt;&lt;br /&gt;
  pca = decomposition.PCA(n_components=3)&lt;br /&gt;
  pca.fit(X)&lt;br /&gt;
  X = pca.transform(X)&lt;br /&gt;
  y = np.choose(y, [1, 2, 0]).astype(np.float)&lt;br /&gt;
  plt.clf()&lt;br /&gt;
  plt.cla()&lt;br /&gt;
  plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k')&lt;br /&gt;
  plt.xlabel(&amp;quot;PC1&amp;quot;)&lt;br /&gt;
  plt.ylabel(&amp;quot;PC2&amp;quot;)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Сингулярное разложение]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]&lt;br /&gt;
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция &amp;quot;Регрессионный анализ и метод главных компонентов&amp;quot;] {{---}} К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l9.pdf PCA] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Principal_component_analysis Principal Component Analysis] {{---}} статья про Principal Component Analysis в Wikipedia&lt;br /&gt;
#[https://towardsdatascience.com/understanding-pca-fae3e243731d Understanding PCA]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;br /&gt;
[[Категория: Метод главных компонент]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=72393</id>
		<title>Уменьшение размерности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=72393"/>
				<updated>2020-01-22T23:56:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: Отмена правки 72392, сделанной Ile86171 (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Под '''уменьшением размерности''' (англ. ''dimensionality reduction'') в машинном обучении подразумевается уменьшение числа признаков набора данных. Наличие в нем признаков избыточных, неинформативных или слабо информативных может понизить эффективность модели, а после такого преобразования она упрощается, и соответственно уменьшается размер набора данных в памяти и ускоряется работа алгоритмов ML на нем. Уменьшение размерности может быть осуществлено методами выбора признаков (англ. ''feature selection'') или выделения признаков (англ. ''feature extraction'').&lt;br /&gt;
==Выбор признаков==&lt;br /&gt;
Методы '''выбора признаков''' оставляют некоторое подмножество исходного набора признаков, избавляясь от признаков избыточных и слабо информативных. Основные преимущества этого класса алгоритмов:&lt;br /&gt;
*Уменьшение вероятности [[переобучение|переобучения]];&lt;br /&gt;
*Увеличение точности предсказания модели;&lt;br /&gt;
*Сокращение времени обучения;&lt;br /&gt;
*Увеличивается семантическое понимание модели.&lt;br /&gt;
&lt;br /&gt;
Все методы выбора признаков можно разделить на 5 типов, которые отличаются алгоритмами выбора лишних признаков.&lt;br /&gt;
===Фильтры===&lt;br /&gt;
'''Фильтры''' (англ. ''filter methods'') измеряют релевантность признаков на основе функции $\mu$, и затем решают по правилу $\kappa$, какие признаки оставить в результирующем множестве.&lt;br /&gt;
&lt;br /&gt;
Фильтры могут быть:&lt;br /&gt;
*Одномерные (англ. ''univariate'') {{---}} функция $\mu$ определяет релевантность одного признака по отношению к выходным меткам. В таком случае обычно измеряют &amp;quot;качество&amp;quot; каждого признака и удаляют худшие;&lt;br /&gt;
*Многомерные (англ. ''multivariate'') {{---}} функция $\mu$ определяет релевантность некоторого подмножества исходного множества признаков относительно выходных меток.&lt;br /&gt;
&lt;br /&gt;
Распространенными вариантами для $\mu$ являются:&lt;br /&gt;
*Коэффициент ранговой корреляции Спирмена &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient Определение коэффициента ранговой корреляции Спирмена]&amp;lt;/ref&amp;gt;(англ. ''Spearman's rank correlation coefficient''): $p(x, y)=\displaystyle \frac{\sum_{i, j}(x_{ij}-\bar{x_j})(y_i-\bar{y})}{\sqrt{\sum_{i, j}(x_{ij}-\bar{x_j})^2\sum_i(y_i-\bar{y})^2}}$;&lt;br /&gt;
*Information gain&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Information_gain_in_decision_trees Определение information gain]&amp;lt;/ref&amp;gt;: $IG(x, y)=\displaystyle -\sum_{i=1}^kp(c_i)\log_2{(p(c_i))}+\sum_{i=1}^{n}p(t_i)\sum_{j=1}^kp(c_j|t_i)log_2{(p(c_j|t_i))}$, и другие.&lt;br /&gt;
&lt;br /&gt;
Преимуществом группы фильтров является простота вычисления релевантности признаков в наборе данных, но недостатком в таком подходе является игнорирование возможных зависимостей между признаками.&lt;br /&gt;
===Оберточные методы===&lt;br /&gt;
[[File:Feature_selection_wrapper_rus.png|450px|thumb|right|Процесс работы оберточных методов]]&lt;br /&gt;
'''Оберточные методы''' (англ. ''wrapper methods'') находят подмножество искомых признаков последовательно, используя некоторый классификатор как источник оценки качества выбранных признаков, т.е. этот процесс является циклическим и продолжается до тех пор, пока не будут достигнуты заданные условия останова. Оберточные методы учитывают зависимости между признаками, что является преимуществом по сравнению с фильтрами, к тому же показывают большую точность, но вычисления занимают длительное время, и повышается риск [[переобучение|переобучения]]. &lt;br /&gt;
&lt;br /&gt;
Существует несколько типов оберточных методов: детерминированные, которые изменяют множество признаков по определенному правилу, а также рандомизированные, которые используют генетические алгоритмы для выбора искомого подмножества признаков. Среди детерминированных алгоритмов самыми простыми являются:&lt;br /&gt;
*SFS (Sequential Forward Selection) {{---}} жадный алгоритм, который начинает с пустого множества признаков, на каждом шаге добавляя лучший из еще не выбранных признаков в результирующее множество;&lt;br /&gt;
*SBS (Sequential Backward Selection) {{---}} алгоритм обратный SFS, который начинает с изначального множества признаков, и удаляет по одному или несколько худших признаков на каждом шаге.&lt;br /&gt;
&lt;br /&gt;
Популярным оберточным методом является SVM-RFE (SVM-based Recursive Feature Elimination), который иногда также обозначается как встроенный &amp;lt;ref&amp;gt;[https://benthamopen.com/FULLTEXT/TOBIOIJ-11-117/ C. Embedded method]&amp;lt;/ref&amp;gt;. Этот метод использует как классификатор [[Метод опорных векторов (SVM)| SVM]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt; и работает итеративно: начиная с полного множества признаков обучает классификатор, ранжирует признаки по весам, которые им присвоил классификатор, убирает какое-то число признаков и повторяет процесс с оставшегося подмножества фичей, если не было достигнуто их требуемое количество. Таким образом, этот метод очень похож на встроенный, потому что непосредственно использует знание того, как устроен классификатор.&lt;br /&gt;
&lt;br /&gt;
===Встроенные методы===&lt;br /&gt;
[[File:Feature_selection_embedded_rus.png|450px|thumb|right|Процесс работы встроенных методов]]&lt;br /&gt;
Группа '''встроенных методов''' (англ. ''embedded methods'') очень похожа на оберточные методы, но для выбора признаков используется непосредственно структуру некоторого классификатора. В оберточных методах классификатор служит только для оценки работы на данном множестве признаков, тогда как встроенные методы используют какую-то информацию о признаках, которую классификаторы присваивают во время обучения. &lt;br /&gt;
&lt;br /&gt;
Одним из примеров встроенного метода является реализация на [[Дерево решений и случайный лес| случайном лесе]]: каждому дереву на вход подаются случайное подмножество данных из датасета с каким-то случайным набор признаков, в процессе обучения каждое из деревьев решений производит &amp;quot;голосование&amp;quot; за релевантность его признаков, эти данные агрегируются, и на выходе получаются значения важности каждого признака набора данных. Дальнейший выбор нужных нам признаков уже зависит от выбранного критерия отбора.&lt;br /&gt;
&lt;br /&gt;
Встроенные методы используют преимущества оберточных методов и являются более эффективными, при этом на отбор тратится меньше времени, уменьшается риск [[переобучение|переобучения]], но т.к. полученный набор признаков был отобран на основе знаний о классификаторе, то есть вероятность, что для другого классификатора это множество признаков уже не будет настолько же релевантным.&lt;br /&gt;
&lt;br /&gt;
===Другие методы===&lt;br /&gt;
[[File:Feature_selection_ensemble_rus.png|thumb|Один из примеров процесса работы ансамблевых методов]]&lt;br /&gt;
Есть и другие методы выбора признаков: '''гибридные''' (англ. ''hybrid methods'') и '''ансамблевые''' (англ. ''ensemble methods''). '''Гибридные методы''' комбинируют несколько разных методов выбора признаков, например, некоторое множество фильтров, а потом запускают оберточный или встроенный метод. Таким образом, гибридные методы сочетают в себе преимущества сразу нескольких методов, и на практике повышают эффективность выбора признаков.&lt;br /&gt;
&lt;br /&gt;
'''Ансамблевые методы''' применяются больше для наборов данных с очень большим числом признаков. В данном подходе для начального множества признаков создается несколько подмножеств признаков, и эти группы каким-то образом объединяются, чтобы получить набор самых релевантных признаков. Это довольно гибкая группа методов, т.к. для нее можно применять различные способы выбора признаков и объединения их подмножеств.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:{{{1|both}}};&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Примеры кода scikit-learn===&lt;br /&gt;
Пример кода, реализующего функцию оценки фильтра на основе коэффициента ранговой корреляции:&lt;br /&gt;
  # Импорт библиотек&lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  &lt;br /&gt;
  # Вспомогательная функция для расчета корреляции&lt;br /&gt;
  def correlation(X, Y):&lt;br /&gt;
      return np.cov(X, Y) / np.sqrt(np.var(X) * np.var(Y))&lt;br /&gt;
&lt;br /&gt;
  # Сам фильтр на основе метрики ранговой корреляции&lt;br /&gt;
  # Аргументы X -- значения объектов датасета для какой-то фичи, Y -- метки этих объектов&lt;br /&gt;
  def measure_spearmans(X, Y):&lt;br /&gt;
      xr = pd.Series(X).rank()&lt;br /&gt;
      yr = pd.Series(Y).rank()&lt;br /&gt;
      return correlation(xr, yr)&lt;br /&gt;
&lt;br /&gt;
Пример кода, реализующего SVM-RFE wrapper:&lt;br /&gt;
  # Импорт библиотек&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  from sklearn import svm&lt;br /&gt;
&lt;br /&gt;
  # X -- наш датасет, Y -- массив меток&lt;br /&gt;
  # N -- число признаков, которые хотим оставить, step -- сколько фичей удаляется на каждой итерации&lt;br /&gt;
  # Возвращает массив из булевых переменных размерностью 1x[число признаков], показывающий, отбрасываем признак или нет&lt;br /&gt;
  def RFE(X, Y, N, step = 10):&lt;br /&gt;
        # cache_size нужен, если набор данных большой, иначе можно опустить&lt;br /&gt;
        clfRFE = svm.SVC(kernel='linear', cache_size=1024)&lt;br /&gt;
        featureCount = X.shape[1]&lt;br /&gt;
        featureList = np.arange(0, featureCount )&lt;br /&gt;
        included = np.full(featureCount, True)&lt;br /&gt;
        curCount = featureCount&lt;br /&gt;
        while curCount &amp;gt; N:&lt;br /&gt;
            actualFeatures = featureList[included]&lt;br /&gt;
            Xnew = X[:, actualFeatures]&lt;br /&gt;
            &lt;br /&gt;
            clfRFE.fit(Xnew, Y)&lt;br /&gt;
            curStep = min(step, curCount - N)&lt;br /&gt;
            elim = np.argsort(np.abs(clfRFE.coef_[0]))[:curStep]&lt;br /&gt;
            included[actualFeatures[elim]] = False&lt;br /&gt;
            curCount -= curStep&lt;br /&gt;
        return included&lt;br /&gt;
==Выделение признаков==&lt;br /&gt;
Другим способом уменьшить размерность входных данных является выделение признаков. Эти методы каким-то образом составляют из уже исходных признаков новые, все также полностью описывающие пространство набора данных, но уменьшая его размерность и теряя в репрезентативности данных, т.к. становится непонятно, за что отвечают новые признаки.&lt;br /&gt;
Все методы feature extraction можно разделить на '''линейные''' и '''нелинейные'''.&lt;br /&gt;
&lt;br /&gt;
Одним из самых известных методов '''линейного''' выделения признаков является [[Метод главных компонент (PCA)| PCA]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt; (Principal Component Analysis, рус. ''метод главных компонент''). Основной идеей этого метода является поиск такой гиперплоскости, на которую при ортогональной проекции всех признаков максимизируется дисперсия. Данное преобразование может быть произведено с помощью сингулярного разложения матриц и создает проекцию только на линейные многомерные плоскости, поэтому и метод находится в категории линейных.&lt;br /&gt;
&lt;br /&gt;
К '''нелинейным''' методам, например, могут быть отнесены методы отображающие исходное пространство признаков на нелинейные поверхности или топологические многообразия. Одним из таких алгоритмов является [[Стохастическое вложение соседей с t-распределением |t-SNE]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt; (t-distributed Stochastic Neighbor Embedding, рус. ''стохастическое вложение соседей с t-распределением''). Данный метод состоит из двух шагов: изначально строится распределение вероятностей по всем парам точек набора данных, каждая условная вероятность $p_{j|i}$ которого означает насколько точка $X_j$ близка к точке $X_i$ при гауссовом распределении вокруг $X_i$. Данное распределение как метрику похожести использует евклидово расстояние. Алгоритм старается получить отображение из точек размерности $\mathbb{R}^k$ в меньшую размерность $\mathbb{R}^d$, для этого вводится еще одно распределение, описывающее насколько точки из нового пространства похожи друг на друга, но используя при этом t-распределение Стьюдента с одной степенью свободы. Как метрику похожести двух распределений используется дивергенция Кульбака-Лейблера&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence Дивергенция Кульбака-Лейблера]&amp;lt;/ref&amp;gt;, и чтобы найти точки новой размерности $d$ запускается градиентный спуск для минимизации этой величины. &lt;br /&gt;
===Пример кода scikit-learn===&lt;br /&gt;
Пример выделения признаков с помощью PCA в scikit-learn:&lt;br /&gt;
  # Импорт библиотек&lt;br /&gt;
  from sklearn.decomposition import PCA&lt;br /&gt;
  from sklearn.model_selection import train_test_split&lt;br /&gt;
&lt;br /&gt;
  X = ... # загрузка X&lt;br /&gt;
  Y = ... # загрузка Y&lt;br /&gt;
  # Разделение данных на train и test&lt;br /&gt;
  Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, Y)&lt;br /&gt;
&lt;br /&gt;
  clf = ... # берем какой-то классификатор&lt;br /&gt;
  # Обучаем PCA для выделения 5 признаков&lt;br /&gt;
  pca = PCA(n_components=5)&lt;br /&gt;
  pca.fit(Xtrain)&lt;br /&gt;
  # Изменяем наши наборы данных под выбранные признаки&lt;br /&gt;
  Xtrain = pca.transform(Xtrain)&lt;br /&gt;
  Xtest = pca.transform(Xtest)&lt;br /&gt;
  # Обучаем классификатор и проверяем точность его работы&lt;br /&gt;
  clf.fit(Xtrain, Ytrain)&lt;br /&gt;
  print (&amp;quot;Score: %.6f&amp;quot; % clf.score(Xtest, Ytest))&lt;br /&gt;
  &lt;br /&gt;
===Пример на языке Scala===&lt;br /&gt;
SBT зависимость:&lt;br /&gt;
  libraryDependencies '''+=''' &amp;quot;com.github.haifengl&amp;quot; '''%%''' &amp;quot;smile-scala&amp;quot; '''%''' &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
Пример уменьшение размерности используя smile.feature.GAFeatureSelection&amp;lt;ref&amp;gt;[https://haifengl.github.io/smile/feature.html#genetic-algorithm-feature-selection Smile, Genetic Algorithm Based Feature Selection]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  '''import '''smile.classification._&lt;br /&gt;
  '''import '''smile.data._&lt;br /&gt;
  '''import '''smile.feature.GAFeatureSelection&lt;br /&gt;
  '''import '''smile.read&lt;br /&gt;
  '''import '''smile.validation.Accuracy&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;// Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  '''val '''data = read.arff(&amp;quot;data/weka/segment-test.arff&amp;quot;, 19)&lt;br /&gt;
  '''val '''(x, y) = data.unzipInt&lt;br /&gt;
  '''val '''trainer = '''new '''GradientTreeBoost.Trainer(100)&lt;br /&gt;
  '''val '''measure = '''new '''Accuracy&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;// Cоздание генетического алгоритма и его настройка.&amp;lt;/span&amp;gt;&lt;br /&gt;
  '''val '''selector = '''new '''GAFeatureSelection&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;// Размер популяции - 50, количество поколений - 20 &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;// Каждая возращаемая BitString содержит фичи и их качество.&amp;lt;/span&amp;gt;&lt;br /&gt;
  '''val '''result = selector.learn(50, 20, trainer, measure, x, y, 5)&lt;br /&gt;
  result.foreach { bits =&amp;gt;&lt;br /&gt;
    print(100*bits.fitness)&lt;br /&gt;
    println(bits.bits.mkString(&amp;quot; &amp;quot;))&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Пример на языке Java===&lt;br /&gt;
Пример уменьшения размерности датасета с применением &amp;lt;code&amp;gt;weka.attributeSelection.PrincipalComponents&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://weka.sourceforge.net/doc.dev/weka/attributeSelection/PrincipalComponents.html/ Weka, PCA]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Maven&amp;lt;/code&amp;gt; зависимость:&lt;br /&gt;
  &amp;lt;dependency&amp;gt;&lt;br /&gt;
    &amp;lt;groupId&amp;gt;nz.ac.waikato.cms.weka&amp;lt;/groupId&amp;gt;&lt;br /&gt;
    &amp;lt;artifactId&amp;gt;weka-stable&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;3.8.0&amp;lt;/version&amp;gt;&lt;br /&gt;
  &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  '''import''' weka.attributeSelection.PrincipalComponents;&lt;br /&gt;
  '''import''' weka.core.Instances;&lt;br /&gt;
  '''import''' weka.filters.Filter;&lt;br /&gt;
  '''import''' weka.filters.unsupervised.attribute.NumericToNominal;&lt;br /&gt;
  '''import''' java.io.BufferedReader;&lt;br /&gt;
  '''import''' java.io.FileReader;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// load dataset&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''var''' data = new Instances(new BufferedReader(new FileReader(&amp;quot;data/bank-data.arff&amp;quot;)));&lt;br /&gt;
  '''var''' filter = new NumericToNominal();&lt;br /&gt;
  filter.setInputFormat(data);&lt;br /&gt;
  data = Filter.useFilter(data, filter);&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// initialize the PCA-based selector&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''var''' pca = new PrincipalComponents();&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// dimensionality reduction is achieved through selecting enough eigenvectors to account&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// for some percantege of the variance in the original data&amp;lt;/font&amp;gt;&lt;br /&gt;
  pca.setVarianceCovered(0.95);&lt;br /&gt;
  pca.buildEvaluator(data);&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// transform the dataset&amp;lt;/font&amp;gt;&lt;br /&gt;
  data = pca.transformedData(data);&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[Переобучение]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)| SVM]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[Дерево решений и случайный лес| Случайный лес]]&lt;br /&gt;
*[[Метод главных компонент (PCA)| PCA]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
*[[Стохастическое вложение соседей с t-распределением |t-SNE]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l11.pdf Sequential feature selection] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Feature_selection Feature selection] {{---}} статья про Feature Selection в Wikipedia&lt;br /&gt;
#[https://benthamopen.com/FULLTEXT/TOBIOIJ-11-117 Публикация про feature selection]&lt;br /&gt;
#[https://towardsdatascience.com/feature-selection-using-random-forest-26d7b747597f Embedded random forest]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=72392</id>
		<title>Уменьшение размерности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=72392"/>
				<updated>2020-01-22T23:55:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: PCA v0.0.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) &amp;lt;ref&amp;gt;[https://zenodo.org/record/1430636 Pearson, K. (1901). &amp;quot;On Lines and Planes of Closest Fit to Systems of Points in Space&amp;quot;]&amp;lt;/ref&amp;gt; в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''Karhunen-Loeve'') &amp;lt;ref&amp;gt;[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]&amp;lt;/ref&amp;gt; или преобразованием Хотеллинга (англ. ''Hotelling transform'').&lt;br /&gt;
&lt;br /&gt;
==Формальная постановка задачи==&lt;br /&gt;
[[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (1901): даны точки &amp;lt;tex&amp;gt; P_i&amp;lt;/tex&amp;gt; на плоскости, &amp;lt;tex&amp;gt;  p_i&amp;lt;/tex&amp;gt; — расстояние от &amp;lt;tex&amp;gt;  P_i&amp;lt;/tex&amp;gt; до прямой &amp;lt;tex&amp;gt; AB&amp;lt;/tex&amp;gt;. Ищется прямая &amp;lt;tex&amp;gt;  AB&amp;lt;/tex&amp;gt;, минимизирующая сумму &amp;lt;tex&amp;gt;\sum_i p_i^2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть имеется $n$ числовых признаков $f_j(x), j = 1, ... , n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \equiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, строки которой соответствуют признаковым описаниям обучающих объектов:&lt;br /&gt;
$$F_{l \times n} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; ... &amp;amp; f_n(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
f_1(x_l) &amp;amp; ... &amp;amp; f_n(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
x_1\\&lt;br /&gt;
...\\&lt;br /&gt;
x_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Обозначим через $z_i = (g_1(x_i), ..., g_m(x_i))$ признаковые описания тех же объектов в новом пространстве $Z = \mathbb{R}^{m}$ меньшей размерности, $m &amp;lt; n$:&lt;br /&gt;
&lt;br /&gt;
$$G_{l \times m} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
g_1(x_1) &amp;amp; ... &amp;amp; g_m(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
g_1(x_l) &amp;amp; ... &amp;amp; g_m(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_1\\&lt;br /&gt;
...\\&lt;br /&gt;
z_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Потребуем, чтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U = (u_{js})_{n \times m}$:&lt;br /&gt;
&lt;br /&gt;
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$&lt;br /&gt;
&lt;br /&gt;
или в векторной записи: $\hat{x} = z U^T$. Восстановленное описание $\hat{x}$ не обязано в точности совпадать с исходным описанием $x$, но их отличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Будем искать одновременно и матрицу новых признаковых описаний $G$, и матрицу линейного преобразования $U$, при которых суммарная невязка восстановленных описаний минимальна:&lt;br /&gt;
&lt;br /&gt;
$$\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},$$&lt;br /&gt;
&lt;br /&gt;
где все нормы евклидовы.&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что матрицы $G$ и $U$ невырождены: $rank \, G = rank \, U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, меньшим $m$. Поэтому интересны лишь случаи, когда $m \leq rank \, F$.&lt;br /&gt;
&lt;br /&gt;
==Решение==&lt;br /&gt;
&lt;br /&gt;
Исчерпывающее решение сформулированной задачи даёт следующая теорема.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.&lt;br /&gt;
&lt;br /&gt;
|proof = Запишем необходимые условия минимума:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку искомые матрицы $G$ и $U$ невырождены, отсюда следует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Пусть $\tilde{G} \tilde{U}^T$ {{---}} произвольное решение задачи.&lt;br /&gt;
&lt;br /&gt;
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ {{---}} диагональная матрица. По определению ортогональности $T^T T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U;\\ U \Lambda = F^T G.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$.  Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.&lt;br /&gt;
&lt;br /&gt;
Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям.&lt;br /&gt;
&lt;br /&gt;
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где $\lambda_1 , ..., \lambda_n$ -  все собственные значения матрицы $F^T F$.  Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений.&lt;br /&gt;
&lt;br /&gt;
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства==&lt;br /&gt;
&lt;br /&gt;
===Связь с сингулярным разложением===&lt;br /&gt;
&lt;br /&gt;
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.&lt;br /&gt;
&lt;br /&gt;
Если $m &amp;lt; n$, то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.&lt;br /&gt;
&lt;br /&gt;
===Преобразование Карунена–Лоэва===&lt;br /&gt;
&lt;br /&gt;
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на объектах из обучающей выборки. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.&lt;br /&gt;
&lt;br /&gt;
===Эффективная размерность===&lt;br /&gt;
&lt;br /&gt;
Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'' задачи. На практике её определяют следующим образом. Все собственные значения матрицы $F^T F$ упорядочиваются по убыванию: $\lambda_1 \geq ... \geq \lambda_n \geq 0$. Задаётся пороговое значение $\epsilon \in [0, 1]$, достаточно близкое к нулю, и определяется наименьшее целое $m$, при котором относительная погрешность приближения матрицы $F$ не превышает $\epsilon$:&lt;br /&gt;
&lt;br /&gt;
$$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ... + \lambda_n}{\lambda_1 + ... + \lambda_n} \leq \epsilon .$$&lt;br /&gt;
&lt;br /&gt;
Величина $E(m)$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$. Метод главных компонент особенно эффективен в тех случаях, когда $E(m)$ оказывается малым уже при малых значениях $m$. Если задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.  На графике $E(m)$ отмечается то значение $m$, при котором происходит резкий скачок: $E(m - 1) \gg E(m)$, при условии, что $E(m)$ уже достаточно мало.&lt;br /&gt;
&lt;br /&gt;
==Визуализация многомерных данных==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m = 2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i = 1, ..., l$,  наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется&lt;br /&gt;
с целью понимания данных. Аналогичную роль играют многомерное шкалирование &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]&amp;lt;/ref&amp;gt; и карты Кохонена &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример кода scikit-learn==&lt;br /&gt;
Пример применения PCA к датасету Iris для уменьшения размерности:&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Импорт библиотек&amp;lt;/span&amp;gt;&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from sklearn import decomposition&lt;br /&gt;
  from sklearn import datasets&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  centers = [[1, 1], [-1, -1], [1, -1]]&lt;br /&gt;
  iris = datasets.load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  y = iris.target&lt;br /&gt;
&lt;br /&gt;
  [[File:Pca iris example.png|275px|thumb|right|Применения PCA к датасету Iris]]&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Преобразование данных датасета Iris, уменьшающее размерность до 2&amp;lt;/span&amp;gt;&lt;br /&gt;
  pca = decomposition.PCA(n_components=3)&lt;br /&gt;
  pca.fit(X)&lt;br /&gt;
  X = pca.transform(X)&lt;br /&gt;
  y = np.choose(y, [1, 2, 0]).astype(np.float)&lt;br /&gt;
  plt.clf()&lt;br /&gt;
  plt.cla()&lt;br /&gt;
  plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k')&lt;br /&gt;
  plt.xlabel(&amp;quot;PC1&amp;quot;)&lt;br /&gt;
  plt.ylabel(&amp;quot;PC2&amp;quot;)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Сингулярное разложение]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]&lt;br /&gt;
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция &amp;quot;Регрессионный анализ и метод главных компонентов&amp;quot;] {{---}} К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l9.pdf PCA] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Principal_component_analysis Principal Component Analysis] {{---}} статья про Principal Component Analysis в Wikipedia&lt;br /&gt;
#[https://towardsdatascience.com/understanding-pca-fae3e243731d Understanding PCA]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;br /&gt;
[[Категория: Метод главных компонент]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pca_iris_example.png&amp;diff=72391</id>
		<title>Файл:Pca iris example.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pca_iris_example.png&amp;diff=72391"/>
				<updated>2020-01-22T23:50:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82&amp;diff=72330</id>
		<title>Категория:Метод главных компонент</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82&amp;diff=72330"/>
				<updated>2020-01-22T01:27:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: Новая страница: «Категория: Машинное обучение»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=72329</id>
		<title>Категория:Уменьшение размерности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=72329"/>
				<updated>2020-01-22T01:27:18Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: Новая страница: «Категория: Машинное обучение»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72328</id>
		<title>Метод главных компонент (PCA)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82_(PCA)&amp;diff=72328"/>
				<updated>2020-01-22T01:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: PCA v0.0.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) &amp;lt;ref&amp;gt;[https://zenodo.org/record/1430636 Pearson, K. (1901). &amp;quot;On Lines and Planes of Closest Fit to Systems of Points in Space&amp;quot;]&amp;lt;/ref&amp;gt; в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. ''Karhunen-Loeve'') &amp;lt;ref&amp;gt;[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]&amp;lt;/ref&amp;gt; или преобразованием Хотеллинга (англ. ''Hotelling transform'').&lt;br /&gt;
&lt;br /&gt;
==Формальная постановка задачи==&lt;br /&gt;
[[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (1901): даны точки &amp;lt;tex&amp;gt; P_i&amp;lt;/tex&amp;gt; на плоскости, &amp;lt;tex&amp;gt;  p_i&amp;lt;/tex&amp;gt; — расстояние от &amp;lt;tex&amp;gt;  P_i&amp;lt;/tex&amp;gt; до прямой &amp;lt;tex&amp;gt; AB&amp;lt;/tex&amp;gt;. Ищется прямая &amp;lt;tex&amp;gt;  AB&amp;lt;/tex&amp;gt;, минимизирующая сумму &amp;lt;tex&amp;gt;\sum_i p_i^2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Пусть имеется $n$ числовых признаков $f_j(x), j = 1, ... , n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \equiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, строки которой соответствуют признаковым описаниям обучающих объектов:&lt;br /&gt;
$$F_{l \times n} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; ... &amp;amp; f_n(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
f_1(x_l) &amp;amp; ... &amp;amp; f_n(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
x_1\\&lt;br /&gt;
...\\&lt;br /&gt;
x_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Обозначим через $z_i = (g_1(x_i), ..., g_m(x_i))$ признаковые описания тех же объектов в новом пространстве $Z = \mathbb{R}^{m}$ меньшей размерности, $m &amp;lt; n$:&lt;br /&gt;
&lt;br /&gt;
$$G_{l \times m} =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
g_1(x_1) &amp;amp; ... &amp;amp; g_m(x_1)\\&lt;br /&gt;
... &amp;amp; ... &amp;amp; ...\\&lt;br /&gt;
g_1(x_l) &amp;amp; ... &amp;amp; g_m(x_l)&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
z_1\\&lt;br /&gt;
...\\&lt;br /&gt;
z_l&lt;br /&gt;
\end{pmatrix}.$$&lt;br /&gt;
&lt;br /&gt;
Потребуем, чтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U = (u_{js})_{n \times m}$:&lt;br /&gt;
&lt;br /&gt;
$$\hat{f}_j(x) = \sum_{s = 1}^{m} g_s(x)u_{js}, \; j = 1, ..., n, \; x \in X,$$&lt;br /&gt;
&lt;br /&gt;
или в векторной записи: $\hat{x} = z U^T$. Восстановленное описание $\hat{x}$ не обязано в точности совпадать с исходным описанием $x$, но их отличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Будем искать одновременно и матрицу новых признаковых описаний $G$, и матрицу линейного преобразования $U$, при которых суммарная невязка восстановленных описаний минимальна:&lt;br /&gt;
&lt;br /&gt;
$$\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},$$&lt;br /&gt;
&lt;br /&gt;
где все нормы евклидовы.&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что матрицы $G$ и $U$ невырождены: $rank \, G = rank \, U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, меньшим $m$. Поэтому интересны лишь случаи, когда $m \leq rank \, F$.&lt;br /&gt;
&lt;br /&gt;
==Решение==&lt;br /&gt;
&lt;br /&gt;
Исчерпывающее решение сформулированной задачи даёт следующая теорема.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.&lt;br /&gt;
&lt;br /&gt;
|proof = Запишем необходимые условия минимума:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку искомые матрицы $G$ и $U$ невырождены, отсюда следует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Пусть $\tilde{G} \tilde{U}^T$ - произвольное решение задачи.&lt;br /&gt;
&lt;br /&gt;
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ - диагональная матрица. По определению ортогональности $T^T T = I_m$.&lt;br /&gt;
&lt;br /&gt;
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума. Подставим матрицы $G$ и $U$ в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
G = F U;\\ U \Lambda = F^T G.&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$.  Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.&lt;br /&gt;
&lt;br /&gt;
Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям.&lt;br /&gt;
&lt;br /&gt;
Подставляя $G$ и $U$ в функционал $\Delta^2(G, U)$, находим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где $\lambda_1 , ..., \lambda_n$ -  все собственные значения матрицы $F^T F$.  Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ - наибольшие $m$ из $n$ собственных значений.&lt;br /&gt;
&lt;br /&gt;
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Свойства==&lt;br /&gt;
&lt;br /&gt;
===Связь с сингулярным разложением===&lt;br /&gt;
&lt;br /&gt;
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.&lt;br /&gt;
&lt;br /&gt;
Если $m &amp;lt; n$, то то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.&lt;br /&gt;
&lt;br /&gt;
===Преобразование Карунена–Лоэва===&lt;br /&gt;
&lt;br /&gt;
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на обучающих объектах. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–&lt;br /&gt;
Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.&lt;br /&gt;
&lt;br /&gt;
===Эффективная размерность===&lt;br /&gt;
&lt;br /&gt;
Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'' задачи. На практике её определяют следующим образом. Все собственные значения матрицы $F^T F$ упорядочиваются по убыванию: $\lambda_1 \geq ... \geq \lambda_n \geq 0$. Задаётся пороговое значение $\epsilon \in [0, 1]$, достаточно близкое к нулю, и определяется наименьшее целое $m$, при котором относительная погрешность приближения матрицы $F$ не превышает $\epsilon$:&lt;br /&gt;
&lt;br /&gt;
$$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ... + \lambda_n}{\lambda_1 + ... + \lambda_n} \leq \epsilon .$$&lt;br /&gt;
&lt;br /&gt;
Величина $E(m)$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$. Метод главных компонент особенно эффективен в тех случаях, когда $E(m)$ оказывается малым уже при малых значениях $m$. Если задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.  На графике $E(m)$ отмечается то значение $m$, при котором происходит резкий скачок: $E(m - 1) \gg E(m)$, при условии, что $E(m)$ уже достаточно мало.&lt;br /&gt;
&lt;br /&gt;
==Визуализация многомерных данных==&lt;br /&gt;
&lt;br /&gt;
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m = 2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i = 1, ..., l$,  наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется&lt;br /&gt;
с целью понимания данных. Аналогичную роль играют многомерное шкалирование &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]&amp;lt;/ref&amp;gt; и карты Кохонена &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример кода scikit-learn==&lt;br /&gt;
Пример применения PCA к датасету Iris для уменьшения размерности:&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Импорт библиотек&amp;lt;/span&amp;gt;&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  from mpl_toolkits.mplot3d import Axes3D&lt;br /&gt;
  from sklearn import decomposition&lt;br /&gt;
  from sklearn import datasets&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Загрузка данных&amp;lt;/span&amp;gt;&lt;br /&gt;
  centers = [[1, 1], [-1, -1], [1, -1]]&lt;br /&gt;
  iris = datasets.load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  y = iris.target&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Инициализация графика&amp;lt;/span&amp;gt;&lt;br /&gt;
  fig = plt.figure(1, figsize=(4, 3))&lt;br /&gt;
  plt.clf()&lt;br /&gt;
  ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)&lt;br /&gt;
  plt.cla()&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Преобразование данных датасета Iris, уменьшающее размерность до 3&amp;lt;/span&amp;gt;&lt;br /&gt;
  pca = decomposition.PCA(n_components=3)&lt;br /&gt;
  pca.fit(X)&lt;br /&gt;
  X = pca.transform(X)&lt;br /&gt;
&lt;br /&gt;
  [[File:Sklearn pca plot.png|300px|thumb|right|Применения PCA к датасету Iris]]&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#3D9970&amp;gt;# Отображение меток и преобразованных данных на графике&amp;lt;/span&amp;gt;&lt;br /&gt;
  for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:&lt;br /&gt;
      ax.text3D(X[y == label, 0].mean(),&lt;br /&gt;
                X[y == label, 1].mean() + 1.5,&lt;br /&gt;
                X[y == label, 2].mean(), name,&lt;br /&gt;
                horizontalalignment='center',&lt;br /&gt;
                bbox=dict(alpha=.5, edgecolor='w', facecolor='w'))&lt;br /&gt;
  y = np.choose(y, [1, 2, 0]).astype(np.float)&lt;br /&gt;
  ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.nipy_spectral,&lt;br /&gt;
             edgecolor='k')&lt;br /&gt;
  ax.w_xaxis.set_ticklabels([])&lt;br /&gt;
  ax.w_yaxis.set_ticklabels([])&lt;br /&gt;
  ax.w_zaxis.set_ticklabels([])&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Сингулярное разложение]]&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]&lt;br /&gt;
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция &amp;quot;Регрессионный анализ и метод главных компонентов&amp;quot;] {{---}} К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014&lt;br /&gt;
#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l9.pdf PCA] {{---}} курс ML Texas A&amp;amp;M University&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Principal_component_analysis Principal Component Analysis] {{---}} статья про Principal Component Analysis в Wikipedia&lt;br /&gt;
#[https://towardsdatascience.com/understanding-pca-fae3e243731d Understanding PCA]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Уменьшение размерности]]&lt;br /&gt;
[[Категория: Метод главных компонент]]&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Sklearn_pca_plot.png&amp;diff=72327</id>
		<title>Файл:Sklearn pca plot.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Sklearn_pca_plot.png&amp;diff=72327"/>
				<updated>2020-01-22T01:20:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pearson_pca_example.jpg&amp;diff=72326</id>
		<title>Файл:Pearson pca example.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pearson_pca_example.jpg&amp;diff=72326"/>
				<updated>2020-01-22T01:17:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ile86171: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ile86171</name></author>	</entry>

	</feed>