<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DevbunovaViliana</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DevbunovaViliana"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%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/DevbunovaViliana"/>
	<updated>2026-10-22T16:05:07Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28477</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28477"/>
		<updated>2020-12-04T12:12:42Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Программная реализация алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
 &lt;br /&gt;
[[Файл:Блок-схема алгоритма.png|мини|центр|Блок-схема алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[[Файл:Информационный граф умножения матрицы на вектор.png|мини|центр|Информационный граф умножения матрицы на вектор]]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[[Файл:Fig1.svg|мини|центр|Информационный граф перемножения матриц]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Если посмотреть на блок-схему алгоритма, то видно, что он строго последовательный на макроуровне, но отдельно взятые операции можно распараллелить. Причем они могут быть распараллелены покоординатно (так как имеют независимость итераций в некоторых циклах): умножение матриц, деление вектора на константу, умножение вектора на константу, транспонирование матрицы, вычитание матриц, умножение матрицы на число. К примеру, для умножения квадратной матрицы &amp;lt;math&amp;gt;R^{d×d}&amp;lt;/math&amp;gt; на вектор &amp;lt;math&amp;gt;R^d&amp;lt;/math&amp;gt; нужно последовательно выполнить по &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом ярусе &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; операций. Для алгоритма умножения матриц &amp;lt;math&amp;gt;R^{d×n}&amp;lt;/math&amp;gt; на &amp;lt;math&amp;gt;R^{n×d}&amp;lt;/math&amp;gt; требуется последовательно выполнить по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом из ярусов &amp;lt;math&amp;gt;d^2&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
На вход алгоритма поступает матрица &amp;lt;math&amp;gt;M \in R^{n×d}&amp;lt;/math&amp;gt;, где по строкам записано признаковое представление объектов и число k до какого размера мы хотим сократить размерность пространства признаков (обычно &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;).&lt;br /&gt;
На выходе мы получаем  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; векторов и соответствующих им собственных значений матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, отсортированных в порядке убывания. Проекция объектов из &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;  на эти вектора  дает новое представление этих объектов, но в пространстве размерности  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и это есть наилучшее представление для данной размерности (потеряли наименьшее количество информации при переходе).&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Время работы PCA.jpg|мини|центр|Время работы PCA относительно количества потоков и размерности пространства признаков ]]&lt;br /&gt;
&lt;br /&gt;
К сожалению, мы не можем рассчитать в GFlops, потому что не можем точно сказать количество операций (не знаем за сколько шагов у нас сойдется собственное значение и собственный векторв).&lt;br /&gt;
&lt;br /&gt;
Проведем оценку масштабируемости:&lt;br /&gt;
*1. По количеству потоков: При увеличении количества потоков время работы алгоритма уменьшается. Отметим, что с каждым увеличением количества потоков уменьшается скорость роста времени работы при фиксированном колличестве потоков и увеличении  размера признакого пространства.&lt;br /&gt;
*2. По размеру пространства признаков: С увеличением размера данных задача считается дольше.  Аналогично, заметим, что если брать график времени работы относительно фиксированного размера признаков: берем график времени в зависимости от количества потоков при 10 тысячах признаков, потом при 15, 20 и так далее, увидим, что скорость падения нашей функции с ростом размерности пространства увеличивается.&lt;br /&gt;
*3. По двум напрвлениям сразу:  Время работы алгоритма монотонно уменьшается с увеличением количества потоков и уменьшением размера признакого пространства одновременно. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Есть реализация метода главных компонент в библиотеке [https://scikit-learn.org/ scikit-learn] для Python. [https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html Ссылка на библиотечный метод]. Но сам код реализации посмотреть невозможно, потому что это библиотека с закрытым кодом.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%92%D1%80%D0%B5%D0%BC%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_PCA.jpg&amp;diff=28476</id>
		<title>Файл:Время работы PCA.jpg</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%92%D1%80%D0%B5%D0%BC%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_PCA.jpg&amp;diff=28476"/>
		<updated>2020-12-04T12:10:51Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Время работы PCA относительно количества потоков и размера данных&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28475</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28475"/>
		<updated>2020-12-04T12:07:19Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
 &lt;br /&gt;
[[Файл:Блок-схема алгоритма.png|мини|центр|Блок-схема алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[[Файл:Информационный граф умножения матрицы на вектор.png|мини|центр|Информационный граф умножения матрицы на вектор]]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[[Файл:Fig1.svg|мини|центр|Информационный граф перемножения матриц]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Если посмотреть на блок-схему алгоритма, то видно, что он строго последовательный на макроуровне, но отдельно взятые операции можно распараллелить. Причем они могут быть распараллелены покоординатно (так как имеют независимость итераций в некоторых циклах): умножение матриц, деление вектора на константу, умножение вектора на константу, транспонирование матрицы, вычитание матриц, умножение матрицы на число. К примеру, для умножения квадратной матрицы &amp;lt;math&amp;gt;R^{d×d}&amp;lt;/math&amp;gt; на вектор &amp;lt;math&amp;gt;R^d&amp;lt;/math&amp;gt; нужно последовательно выполнить по &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом ярусе &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; операций. Для алгоритма умножения матриц &amp;lt;math&amp;gt;R^{d×n}&amp;lt;/math&amp;gt; на &amp;lt;math&amp;gt;R^{n×d}&amp;lt;/math&amp;gt; требуется последовательно выполнить по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом из ярусов &amp;lt;math&amp;gt;d^2&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
На вход алгоритма поступает матрица &amp;lt;math&amp;gt;M \in R^{n×d}&amp;lt;/math&amp;gt;, где по строкам записано признаковое представление объектов и число k до какого размера мы хотим сократить размерность пространства признаков (обычно &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;).&lt;br /&gt;
На выходе мы получаем  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; векторов и соответствующих им собственных значений матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, отсортированных в порядке убывания. Проекция объектов из &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;  на эти вектора  дает новое представление этих объектов, но в пространстве размерности  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и это есть наилучшее представление для данной размерности (потеряли наименьшее количество информации при переходе).&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[https://wmpics.pics/di-ANZL.jpg График производительности]&lt;br /&gt;
&lt;br /&gt;
К сожалению, мы не можем рассчитать в GFlops, потому что не можем точно сказать количество операций (не знаем за сколько шагов у нас сойдется собственное значение и собственный векторв).&lt;br /&gt;
&lt;br /&gt;
Проведем оценку масштабируемости:&lt;br /&gt;
*1. По количеству потоков: При увеличении количества потоков время работы алгоритма уменьшается. Отметим, что с каждым увеличением количества потоков уменьшается скорость роста времени работы при фиксированном колличестве потоков и увеличении  размера признакого пространства.&lt;br /&gt;
*2. По размеру пространства признаков: С увеличением размера данных задача считается дольше.  Аналогично, заметим, что если брать график времени работы относительно фиксированного размера признаков: берем график времени в зависимости от количества потоков при 10 тысячах признаков, потом при 15, 20 и так далее, увидим, что скорость падения нашей функции с ростом размерности пространства увеличивается.&lt;br /&gt;
*3. По двум напрвлениям сразу:  Время работы алгоритма монотонно уменьшается с увеличением количества потоков и уменьшением размера признакого пространства одновременно. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Есть реализация метода главных компонент в библиотеке [https://scikit-learn.org/ scikit-learn] для Python. [https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html Ссылка на библиотечный метод]. Но сам код реализации посмотреть невозможно, потому что это библиотека с закрытым кодом.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84_%D1%83%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80.png&amp;diff=28474</id>
		<title>Файл:Информационный граф умножения матрицы на вектор.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84_%D1%83%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80.png&amp;diff=28474"/>
		<updated>2020-12-04T12:03:13Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Информационный граф умножения матрицы на вектор&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0.png&amp;diff=28471</id>
		<title>Файл:Блок-схема алгоритма.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0.png&amp;diff=28471"/>
		<updated>2020-12-04T11:54:02Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Блок-схема алгоритма&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28448</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28448"/>
		<updated>2020-12-03T14:46:30Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Программная реализация алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[https://wmpics.pics/di-PC11.png Информационный граф операции умножения матрицы на вектор]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[https://algowiki-project.org/algowiki/pool/images/f/f5/Fig1.svg Информационный граф перемножения матриц]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Если посмотреть на блок-схему алгоритма, то видно, что он строго последовательный на макроуровне, но отдельно взятые операции можно распараллелить. Причем они могут быть распараллелены покоординатно (так как имеют независимость итераций в некоторых циклах): умножение матриц, деление вектора на константу, умножение вектора на константу, транспонирование матрицы, вычитание матриц, умножение матрицы на число. К примеру, для умножения квадратной матрицы &amp;lt;math&amp;gt;R^{d×d}&amp;lt;/math&amp;gt; на вектор &amp;lt;math&amp;gt;R^d&amp;lt;/math&amp;gt; нужно последовательно выполнить по &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом ярусе &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; операций. Для алгоритма умножения матриц &amp;lt;math&amp;gt;R^{d×n}&amp;lt;/math&amp;gt; на &amp;lt;math&amp;gt;R^{n×d}&amp;lt;/math&amp;gt; требуется последовательно выполнить по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом из ярусов &amp;lt;math&amp;gt;d^2&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
На вход алгоритма поступает матрица &amp;lt;math&amp;gt;M \in R^{n×d}&amp;lt;/math&amp;gt;, где по строкам записано признаковое представление объектов и число k до какого размера мы хотим сократить размерность пространства признаков (обычно &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;).&lt;br /&gt;
На выходе мы получаем  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; векторов и соответствующих им собственных значений матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, отсортированных в порядке убывания. Проекция объектов из &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;  на эти вектора  дает новое представление этих объектов, но в пространстве размерности  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и это есть наилучшее представление для данной размерности (потеряли наименьшее количество информации при переходе).&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[https://wmpics.pics/di-ANZL.jpg График производительности]&lt;br /&gt;
&lt;br /&gt;
К сожалению, мы не можем рассчитать в GFlops, потому что не можем точно сказать количество операций (не знаем за сколько шагов у нас сойдется собственное значение и собственный векторв).&lt;br /&gt;
&lt;br /&gt;
Проведем оценку масштабируемости:&lt;br /&gt;
*1. По количеству потоков: При увеличении количества потоков время работы алгоритма уменьшается. Отметим, что с каждым увеличением количества потоков уменьшается скорость роста времени работы при фиксированном колличестве потоков и увеличении  размера признакого пространства.&lt;br /&gt;
*2. По размеру пространства признаков: С увеличением размера данных задача считается дольше.  Аналогично, заметим, что если брать график времени работы относительно фиксированного размера признаков: берем график времени в зависимости от количества потоков при 10 тысячах признаков, потом при 15, 20 и так далее, увидим, что скорость падения нашей функции с ростом размерности пространства увеличивается.&lt;br /&gt;
*3. По двум напрвлениям сразу:  Время работы алгоритма монотонно уменьшается с увеличением количества потоков и уменьшением размера признакого пространства одновременно. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Есть реализация метода главных компонент в библиотеке [https://scikit-learn.org/ scikit-learn] для Python. [https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html Ссылка на библиотечный метод]. Но сам код реализации посмотреть невозможно, потому что это библиотека с закрытым кодом.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28442</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28442"/>
		<updated>2020-12-02T21:10:05Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[https://wmpics.pics/di-PC11.png Информационный граф операции умножения матрицы на вектор]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[https://algowiki-project.org/algowiki/pool/images/f/f5/Fig1.svg Информационный граф перемножения матриц]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Если посмотреть на блок-схему алгоритма, то видно, что он строго последовательный на макроуровне, но отдельно взятые операции можно распараллелить. Причем они могут быть распараллелены покоординатно (так как имеют независимость итераций в некоторых циклах): умножение матриц, деление вектора на константу, умножение вектора на константу, транспонирование матрицы, вычитание матриц, умножение матрицы на число. К примеру, для умножения квадратной матрицы &amp;lt;math&amp;gt;R^{d×d}&amp;lt;/math&amp;gt; на вектор &amp;lt;math&amp;gt;R^d&amp;lt;/math&amp;gt; нужно последовательно выполнить по &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом ярусе &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; операций. Для алгоритма умножения матриц &amp;lt;math&amp;gt;R^{d×n}&amp;lt;/math&amp;gt; на &amp;lt;math&amp;gt;R^{n×d}&amp;lt;/math&amp;gt; требуется последовательно выполнить по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом из ярусов &amp;lt;math&amp;gt;d^2&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
На вход алгоритма поступает матрица &amp;lt;math&amp;gt;M \in R^{n×d}&amp;lt;/math&amp;gt;, где по строкам записано признаковое представление объектов и число k до какого размера мы хотим сократить размерность пространства признаков (обычно &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;).&lt;br /&gt;
На выходе мы получаем  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; векторов и соответствующих им собственных значений матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, отсортированных в порядке убывания. Проекция объектов из &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;  на эти вектора  дает новое представление этих объектов, но в пространстве размерности  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и это есть наилучшее представление для данной размерности (потеряли наименьшее количество информации при переходе).&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Есть реализация метода главных компонент в библиотеке [https://scikit-learn.org/ scikit-learn] для Python. [https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html Ссылка на библиотечный метод]. Но сам код реализации посмотреть невозможно, потому что это библиотека с закрытым кодом.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28441</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28441"/>
		<updated>2020-12-02T12:48:38Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[https://wmpics.pics/di-PC11.png Информационный граф операции умножения матрицы на вектор]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[https://algowiki-project.org/algowiki/pool/images/f/f5/Fig1.svg Информационный граф перемножения матриц]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Если посмотреть на блок-схему алгоритма, то видно, что он строго последовательный на макроуровне, но отдельно взятые операции можно распараллелить. Причем они могут быть распараллелены покоординатно (так как имеют независимость итераций в некоторых циклах): умножение матриц, деление вектора на константу, умножение вектора на константу, транспонирование матрицы, вычитание матриц, умножение матрицы на число. К примеру, для умножения квадратной матрицы &amp;lt;math&amp;gt;R^{d×d}&amp;lt;/math&amp;gt; на вектор &amp;lt;math&amp;gt;R^d&amp;lt;/math&amp;gt; нужно последовательно выполнить по &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом ярусе &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; операций. Для алгоритма умножения матриц &amp;lt;math&amp;gt;R^{d×n}&amp;lt;/math&amp;gt; на &amp;lt;math&amp;gt;R^{n×d}&amp;lt;/math&amp;gt; требуется последовательно выполнить по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений, где в каждом из ярусов &amp;lt;math&amp;gt;d^2&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
На вход алгоритма поступает матрица &amp;lt;math&amp;gt;M \in R^{n×d}&amp;lt;/math&amp;gt;, где по строкам записано признаковое представление объектов и число k до какого размера мы хотим сократить размерность пространства признаков (обычно &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;).&lt;br /&gt;
На выходе мы получаем  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; векторов и соответствующих им собственных значений матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, отсортированных в порядке убывания. Проекция объектов из &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;  на эти вектора  дает новое представление этих объектов, но в пространстве размерности  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и это есть наилучшее представление для данной размерности (потеряли наименьшее количество информации при переходе).&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28440</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28440"/>
		<updated>2020-12-01T21:04:56Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[https://wmpics.pics/di-PC11.png Информационный граф операции умножения матрицы на вектор]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[https://algowiki-project.org/algowiki/pool/images/f/f5/Fig1.svg Информационный граф перемножения матриц]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Если посмотреть на блок-схему алгоритма, то видно, что он строго последовательный на макроуровне, но отдельно взятые операции можно распараллелить. Причем они могут быть распараллелены покоординатно (так как имеют независимость итераций в некоторых циклах): умножение матриц, деление вектора на константу, умножение вектора на константу, транспонирование матрицы, вычитание матриц, умножение матрицы на число.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
На вход алгоритма поступает матрица &amp;lt;math&amp;gt;M \in R^{n×d}&amp;lt;/math&amp;gt;, где по строкам записано признаковое представление объектов и число k до какого размера мы хотим сократить размерность пространства признаков (обычно &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;).&lt;br /&gt;
На выходе мы получаем  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; векторов и соответствующих им собственных значений матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, отсортированных в порядке убывания. Проекция объектов из &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;  на эти вектора  дает новое представление этих объектов, но в пространстве размерности  &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, и это есть наилучшее представление для данной размерности (потеряли наименьшее количество информации при переходе).&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28439</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28439"/>
		<updated>2020-12-01T20:46:08Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[https://wmpics.pics/di-PC11.png Информационный граф операции умножения матрицы на вектор]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[https://algowiki-project.org/algowiki/pool/images/f/f5/Fig1.svg Информационный граф перемножения матриц]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Если посмотреть на блок-схему алгоритма, то видно, что он строго последовательный на макроуровне, но отдельно взятые операции можно распараллелить. Причем они могут быть распараллелены покоординатно (так как имеют независимость итераций в некоторых циклах): умножение матриц, деление вектора на константу, умножение вектора на константу, транспонирование матрицы, вычитание матриц, умножение матрицы на число.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28438</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28438"/>
		<updated>2020-12-01T20:29:36Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Так как алгоритм очень объемный и его не возможно представить в 3-ех мерном пространстве, то изобразим информационный граф самой частой операции в алгоритме: умножение матрицы на вектор.&lt;br /&gt;
[https://wmpics.pics/di-PC11.png Информационный граф операции умножения матрицы на вектор]&lt;br /&gt;
Одной из самых сложных операций в алгоритме является операция перемножения матриц, ее информационный граф выглядит следующим образом:&lt;br /&gt;
[https://algowiki-project.org/algowiki/pool/images/f/f5/Fig1.svg Информационный граф перемножения матриц]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28437</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28437"/>
		<updated>2020-12-01T19:31:02Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Оценим сложности операций. Пусть &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; -- количество объектов в выборке, &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; -- размерность пространства признаков, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; -- размерность итогового пространства (но так как основной смысл задачи -- это понижение размерности, то &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; d&amp;lt;/math&amp;gt;, поэтому мы не будем учитывать его при подсчете асимптотической сложности), тогда: нахождение транспонированной матрицы &amp;lt;math&amp;gt;O(n*d)&amp;lt;/math&amp;gt;,&lt;br /&gt;
перемножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;имеет сложность &amp;lt;math&amp;gt;O(n*d^2)&amp;lt;/math&amp;gt;, случайная генерация вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, вычисление &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; состоит из перемножения матрицы на вектор, что занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычисление нормы вектора &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt; и покомпонентного деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. Подсчет &amp;lt;math&amp;gt;\lambda_k&amp;lt;/math&amp;gt; использует уже посчитанное для &amp;lt;math&amp;gt;E_k&amp;lt;/math&amp;gt; умножение матрицы на вектор, дополнительно происходит два раза скалярное произведение над векторами &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;, и поэлементное деление вектора на константу &amp;lt;math&amp;gt;O(d)&amp;lt;/math&amp;gt;. &lt;br /&gt;
Вычисление &amp;lt;math&amp;gt;\lambda_k E_k E_k^T&amp;lt;/math&amp;gt; занимает &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;, вычитание матриц имеет сложность &amp;lt;math&amp;gt;O(d^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28436</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28436"/>
		<updated>2020-12-01T15:00:51Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k+1} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28435</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28435"/>
		<updated>2020-12-01T14:58:34Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt; в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28434</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28434"/>
		<updated>2020-12-01T14:20:53Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью нахождения подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать метод степенных итераций&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений метод степенных итераций ====&lt;br /&gt;
Метод степенных итераций - это итерационный метод вычисления собственных значений и собственных векторов вещественной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Задача нахождения подпространства меньшей размерности ====&lt;br /&gt;
 &lt;br /&gt;
Будем искать подпространство меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально. Будем использовать жадную стратегию:&lt;br /&gt;
Будем подбирать единичные вектора &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;, такие что норма проекций на этот вектор будет максимальна.&lt;br /&gt;
*1.&amp;lt;math&amp;gt;||M E_1||^2 → max_{E_1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*2. &amp;lt;math&amp;gt; |M E_2||^2 → max_{E_2}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_1&amp;lt;/math&amp;gt; ортогонален &amp;lt;math&amp;gt;E_2&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. и т.д.&lt;br /&gt;
Запишем задачу Лагранжа:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d}{dE_1}(E_1^TM^TME_1 - \lambda(E_1^TE_1 -1) = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M^TME_1 - \lambda E_1 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Значит, задача сводится к последовательному нахождению собственных векторов, отвечающих максимальным собственным значениям матрицы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя аметод степенных итераций.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений. И взять первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов, отвечающих максимальным собственным значениям.&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
Мы будем внешне задавать размерность признанного пространства, которое  хотим получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Макроструктура алгоритма:&lt;br /&gt;
*1. Вычислить &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. В цикле до сходимости вычислять:&lt;br /&gt;
&amp;lt;math&amp;gt; E_{k+1} = \frac{M^TME_k}{\|M^TME_k\|} &amp;lt;/math&amp;gt; -- сойдется к собственному вектору, отвечающему максимальному значению, тогда последовательность&lt;br /&gt;
&amp;lt;math&amp;gt;\lambda_{k} = \frac{(E_k,M^TME_k)}{(E_k,E_k)}&amp;lt;/math&amp;gt; сойдется к максимальному собственному значению.&lt;br /&gt;
*4. Теперь вместо выражения M^TM в пункте 3 используем&lt;br /&gt;
&amp;lt;math&amp;gt; M^TM - \lambda_k E_k E_k^T&amp;lt;/math&amp;gt; &lt;br /&gt;
*5. Повторяем пункт 3 и 4 столько раз, какой размерности хотим получить новое пространство.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
[https://wmpics.pics/di-2ZK0.png Блок схема алгоритма]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28425</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28425"/>
		<updated>2020-11-29T11:27:23Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью сингулярной декомпозиции значений, или сокращенно SVD. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать алгоритм собственных значений Якоби &lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений методом Якоби ====&lt;br /&gt;
Алгоритм собственных значений Якоби - это итерационный метод вычисления собственных значений и собственных векторов вещественной симметричной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Сингулярная декомпозиция (SVD) ====&lt;br /&gt;
Сингулярная декомпозиция, или сокращенно SVD, - это метод матричного разложения для сведения матрицы к ее составным частям с целью упрощения некоторых последующих матричных вычислений.&lt;br /&gt;
SVD матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; - это факторизация &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; в произведение трех матриц &amp;lt;math&amp;gt;M = U \Sigma V^T&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; ортонормированы, а матрица &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; диагональна с положительными вещественными числами. Учитывая, что &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; - действительная матрица &amp;lt;math&amp;gt;m × n&amp;lt;/math&amp;gt;, которую мы хотим разложить, &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; - матрица &amp;lt;math&amp;gt;m × m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; - диагональная матрица &amp;lt;math&amp;gt;m × n&amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt;V^T&amp;lt;/math&amp;gt; - транспонирование матрицы &amp;lt;math&amp;gt;n × n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SVD является наиболее известным и широко используемым методом декомпозиции матриц. Все матрицы имеют сингулярное разложение, которое делает их более стабильными. Он часто используется в широком спектре приложений, включая сжатие, шумоподавление и сокращение данных.&lt;br /&gt;
&lt;br /&gt;
Алгоритм разложения матрицы с помощью SVD:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя алгоритм Якоби.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений.&lt;br /&gt;
*5. Взять квадратный корень из собственных значений, чтобы получить сингулярные значения матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*6. Построить диагональную матрицу &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;, расположив сингулярные значения в порядке убывания вдоль ее диагонали. Заметим, что размер &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; есть &amp;lt;math&amp;gt;m × n&amp;lt;/math&amp;gt;, таким образом, помещает верхние &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; сингулярных значений на диагональ и отбрасывает остальные &amp;lt;math&amp;gt;(r = min(m, n))&amp;lt;/math&amp;gt; и блок с &amp;lt;math&amp;gt;m - r&amp;lt;/math&amp;gt; строками и &amp;lt;math&amp;gt;n - r&amp;lt;/math&amp;gt; столбцами содержит нули. Также вычислить &amp;lt;math&amp;gt;\Sigma^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*7. Отсортированные столбцы собственных векторов представляют матрицу &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Вычислить ее транспонирование &amp;lt;math&amp;gt;V^T&amp;lt;/math&amp;gt;&lt;br /&gt;
*8. Вычислить матрицу &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;, как &amp;lt;math&amp;gt;U = M V \Sigma ^{-1}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
&lt;br /&gt;
Алгоритм вычисления главных компонент:&lt;br /&gt;
*1. Входной набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; c &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; объектами и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; признаками, т. е. размерность &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;s × f&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Получить собственные значения с помощью алгоритма Якоби и &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; путем сингулярного векторного разложения матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (или альтернативной матрицы &amp;lt;math&amp;gt;D^T&amp;lt;/math&amp;gt; ).&lt;br /&gt;
*3. Выбрать &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; столбцов матрицы &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;, соответствующие &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; наибольшим собственным значениям. Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число измерений нового подпространства объектов &amp;lt;math&amp;gt;(k ≤ f)&amp;lt;/math&amp;gt;&lt;br /&gt;
*4. Построить проекции матрицы &amp;lt;math&amp;gt;W^T&amp;lt;/math&amp;gt; главных компонент на выбранные &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов.&lt;br /&gt;
*5. Преобразовать исходный набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; и получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-мерное подпространство признаков &amp;lt;math&amp;gt;\hat{D}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Обратите внимание, что значения во входном наборе данных D должны быть стандартизированы.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28401</id>
		<title>DevbunovaViliana / Метод главных компонент (PСA)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=DevbunovaViliana_/_%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_(P%D0%A1A)&amp;diff=28401"/>
		<updated>2020-10-21T12:15:28Z</updated>

		<summary type="html">&lt;p&gt;DevbunovaViliana: Новая страница: «Автор: Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)  == Свойства и структура алгори...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор:&lt;br /&gt;
Девбунова Вилиана Олеговна, студент ММП ВМК МГУ (417)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Главных Компонент (англ. Principal Components Analysis, PCA) — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ.Karl Pearson) в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т. п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к сингулярному разложению матрицы данных. &lt;br /&gt;
&lt;br /&gt;
Иногда метод главных компонент называют преобразованием Кархунена-Лоэва (англ. Karhunen-Loeve)или преобразованием Хотеллинга (англ. Hotelling transform). Другие способы уменьшения размерности данных — это метод независимых компонент, многомерное шкалирование, а также многочисленные нелинейные обобщения: метод главных кривых и многообразий, поиск наилучшей проекции (англ. Projection Pursuit), нейросетевые методы «узкого горла», самоорганизующиеся карты Кохонена и др.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Приводится математическое описание решаемой задачи в виде совокупности формул и соотношений, как это принято в книгах и учебниках. По возможности, используются общепринятые обозначения и способы записи. Должны быть явно определены все использованные обозначения и описаны свойства входных данных. Представленное описание должно быть достаточным для однозначного понимания постановки решаемой задачи для человека, знающего математику.&lt;br /&gt;
&lt;br /&gt;
Задача анализа главных компонент имеет много версий, вот базовые из них:&lt;br /&gt;
* аппроксимировать данные линейными многообразиями меньшей размерности;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые разброс данных максимален;&lt;br /&gt;
* найти подпространства меньшей размерности, в ортогональной проекции на которые среднеквадратичное расстояние между точками максимально;&lt;br /&gt;
* для данной многомерной случайной величины построить такое ортогональное преобразование координат, в результате которого корреляции между отдельными координатами обратятся в нуль.&lt;br /&gt;
&lt;br /&gt;
Мы будем рассматривать только один вариант.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Мы будем реализовывать PCA с помощью сингулярной декомпозиции значений, или сокращенно SVD. Для вычисления собственных значений и соответствующих им собственных векторов будем использовать алгоритм собственных значений Якоби &lt;br /&gt;
&lt;br /&gt;
==== Алгоритм вычисления собственных значений методом Якоби ====&lt;br /&gt;
Алгоритм собственных значений Якоби - это итерационный метод вычисления собственных значений и собственных векторов вещественной симметричной матрицы.&lt;br /&gt;
Алгоритм вычисляет вектор &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt;, содержащий собственные значения , и матрицу &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt;, содержащую соответствующие собственные векторы, т. е. &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;-собственное значение, а столбец &amp;lt;math&amp;gt;E_i&amp;lt;/math&amp;gt;-ортонормированный собственный вектор для &amp;lt;math&amp;gt;e_i&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;i = 1,...,n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Сингулярная декомпозиция (SVD) ====&lt;br /&gt;
Сингулярная декомпозиция, или сокращенно SVD, - это метод матричного разложения для сведения матрицы к ее составным частям с целью упрощения некоторых последующих матричных вычислений.&lt;br /&gt;
SVD матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; - это факторизация &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; в произведение трех матриц &amp;lt;math&amp;gt;M = U \Sigma V^T&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; ортонормированы, а матрица &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; диагональна с положительными вещественными числами. Учитывая, что &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; - действительная матрица &amp;lt;math&amp;gt;m × n&amp;lt;/math&amp;gt;, которую мы хотим разложить, &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; - матрица &amp;lt;math&amp;gt;m × m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; - диагональная матрица &amp;lt;math&amp;gt;m × n&amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt;V^T&amp;lt;/math&amp;gt; - транспонирование матрицы &amp;lt;math&amp;gt;n × n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
SVD является наиболее известным и широко используемым методом декомпозиции матриц. Все матрицы имеют сингулярное разложение, которое делает их более стабильными. Он часто используется в широком спектре приложений, включая сжатие, шумоподавление и сокращение данных.&lt;br /&gt;
&lt;br /&gt;
Алгоритм разложения матрицы с помощью SVD:&lt;br /&gt;
*1. Вычислить эрмитов матрицу (найти сопряженную транспонированную), &amp;lt;math&amp;gt;M^T&amp;lt;/math&amp;gt; из матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Вычислить умножение &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;&lt;br /&gt;
*3. Вычислить собственные значения и собственные векторы &amp;lt;math&amp;gt;M^TM&amp;lt;/math&amp;gt;, используя алгоритм Якоби.&lt;br /&gt;
*4. Отсортировать собственные значения и соответствующие столбцы собственных векторов в порядке убывания собственных значений.&lt;br /&gt;
*5. Взять квадратный корень из собственных значений, чтобы получить сингулярные значения матрицы &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;.&lt;br /&gt;
*6. Построить диагональную матрицу &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;, расположив сингулярные значения в порядке убывания вдоль ее диагонали. Заметим, что размер &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; есть &amp;lt;math&amp;gt;m × n&amp;lt;/math&amp;gt;, таким образом, помещает верхние &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; сингулярных значений на диагональ и отбрасывает остальные &amp;lt;math&amp;gt;(r = min(m, n))&amp;lt;/math&amp;gt; и блок с &amp;lt;math&amp;gt;m - r&amp;lt;/math&amp;gt; строками и &amp;lt;math&amp;gt;n - r&amp;lt;/math&amp;gt; столбцами содержит нули. Также вычислить &amp;lt;math&amp;gt;\Sigma^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
*7. Отсортированные столбцы собственных векторов представляют матрицу &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Вычислить ее транспонирование &amp;lt;math&amp;gt;V^T&amp;lt;/math&amp;gt;&lt;br /&gt;
*8. Вычислить матрицу &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;, как &amp;lt;math&amp;gt;U = M V \Sigma ^{-1}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Анализ основных компонентов (PCA) ====&lt;br /&gt;
Анализ главных компонент, или сокращенно PCA, - это математическая процедура, которая преобразует набор (возможно коррелированных) переменных в меньшее число некоррелированных переменных, которые называют главными компонентами. Цель анализа главных компонент состоит в том, чтобы уменьшить размерность (количество признаков) набора данных, но сохранить как можно больше исходной изменчивости в данных. На первый основной компонент приходится большая часть изменчивости данных, на второй основной компонент приходится большая часть оставшейся изменчивости и т. д.&lt;br /&gt;
PCA можно рассматривать как метод проекции, при котором данные с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-признаками проецируются на подпространство с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (или меньшим количеством) признаков, сохраняя при этом большую часть информации.&lt;br /&gt;
&lt;br /&gt;
Алгоритм вычисления главных компонент:&lt;br /&gt;
*1. Входной набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; c &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; объектами и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; признаками, т. е. размерность &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;s × f&amp;lt;/math&amp;gt;.&lt;br /&gt;
*2. Получить собственные значения с помощью алгоритма Якоби и &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; путем сингулярного векторного разложения матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (или альтернативной матрицы &amp;lt;math&amp;gt;D^T&amp;lt;/math&amp;gt; ).&lt;br /&gt;
*3. Выбрать &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; столбцов матрицы &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;, соответствующие &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; наибольшим собственным значениям. Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - число измерений нового подпространства объектов &amp;lt;math&amp;gt;(k ≤ f)&amp;lt;/math&amp;gt;&lt;br /&gt;
*4. Построить проекции матрицы &amp;lt;math&amp;gt;W^T&amp;lt;/math&amp;gt; главных компонент на выбранные &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; собственных векторов.&lt;br /&gt;
*5. Преобразовать исходный набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; и получить &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-мерное подпространство признаков &amp;lt;math&amp;gt;\hat{D}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Обратите внимание, что значения во входном наборе данных D должны быть стандартизированы.&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&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;
[1] Wikipedia contributors. Principal component analysis. In Wikipedia, The Free Encyclopedia from https://en.wikipedia.org/wiki/Principal_component_analysis&lt;br /&gt;
&lt;br /&gt;
[[en:Multidimensional scaling]]&lt;/div&gt;</summary>
		<author><name>DevbunovaViliana</name></author>
	</entry>
</feed>