<?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=%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0+%D0%AE%D0%BB%D0%B8%D1%8F</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=%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0+%D0%AE%D0%BB%D0%B8%D1%8F"/>
	<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/%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0_%D0%AE%D0%BB%D0%B8%D1%8F"/>
	<updated>2026-10-23T01:06:16Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11350</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11350"/>
		<updated>2016-10-15T19:16:46Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Тодуа_Антон | Тодуа А.Р.]],[[Участник:Гусева_Юлия |Гусева Ю.В.]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; (Partitioning Around Medoids) был предложен Чарли Кауфаманом (Charlie Kaufman) и Питером Русивом (Peter Rousseeuw) в 1987&amp;lt;ref&amp;gt;Kaufman, L. and P.J. Rousseeuw, Clustering by means of medoids, in: Y. Dodge (Ed.), Statistical Data Analysis based on the L1 Norm (North-Holland, Amsterdam, 1987) 405 — 416.&amp;lt;/ref&amp;gt;. Алгоритм является одним из распространённых вариантов реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PAM&#039;&#039; используется для выполнения кластеризации[https://en.wikipedia.org/wiki/Hierarchical_clustering] объектов — процесса автоматического разбиения некоторого множества объектов на кластеры (множества) на основе их схожести (наиболее схожие объекты, как правило, располагаются в одном кластере). В качестве исходных данных алгоритму необходима симметрическая матрица с нолями на главной диагонали (dissimilarity matrix), задающая расстояние (в смысле похожести) между объектами, для которых выполняется кластеризация и число кластеров, по которым следует распределить объекты. Стоит отметить, что не все алгоритмы кластеризации требует задания количества кластеров, например, методы иерархической[https://en.wikipedia.org/wiki/Hierarchical_clustering] кластеризации свободны от данного ограничения.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; для каждого кластера в качестве его характерного представителя выбирает наиболее подходящий из объектов кластеризации. Выбранные объекты называются медоидами (medoids). Алгоритм состоит из двух стадий. Первая стадия – &#039;&#039;BUILD&#039;&#039; предназначена для выбора исходного множества медоидов. Вторая стадия – &#039;&#039;SWAP&#039;&#039; является итерационной. На каждой итерации стадии &#039;&#039;SWAP&#039;&#039; алгоритм пытается улучшить выбранное множество медоидов с помощью выполнения операции &#039;&#039;обмена&#039;&#039;, которая представляет собой замену одного медоида на один из объектов кластеризации. Алгоритм завершает свою работу, когда ни один из возможных обменов не позволяет улучшить разбиение на кластеры. Часто на практике, условием завершения работы алгоритма также является момент, когда наилучшее возможное улучшение кластеризации меньше заранее выбранной пороговой величины. Введение данной величины позволяет сократить число итераций. Последнее, однако, снижает качество кластеризации (иногда незначительно).&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В качестве исходных данных алгоритм принимает:&lt;br /&gt;
* Симметрическую матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до каждого из остальных объектов&lt;br /&gt;
* Требуемое число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. Все медоиды относится к разных кластерам и являются их характерными представителями. Кластеры остальных объектов (не медоидов) совпадают с кластером ближайшего к ним медоида. Ближайший к &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-му объекту медоид будем коротко назвать медоидом &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта. Выбор медоидов осуществляется исходя из минимизации среднего расстояния (average dissimilarity) между объектами внутри одного кластера. От минимизации среднего расстояния можно перейти к минимизации суммы расстояний от объектов до их медоидов. Такой переход не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления. Стоит отметить, что в общем случае расстояние между объектами следует понимать как меру похожести (similarity) объектов.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида, в результате &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект&lt;br /&gt;
&lt;br /&gt;
Под &#039;&#039;обменом&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект будем понимать операцию, в результате которой &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й медоид перестаёт быть медоидом, а &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект выбирается в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp; = S - \{i\} + \{h\} \\&lt;br /&gt;
U &amp;amp; = U - \{h\} + \{i\}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто. Описание значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления будет дано при описании макроструктуры алгоритма.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, сумма расстояний от которого до всех остальных объектов минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения &#039;&#039;обмена&#039;&#039;. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. В противном случае дальнейшее улучшение кластеризации с помощью &#039;&#039;обмена&#039;&#039; невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов. Как было сказано &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й объект лежит в том же кластере, что и его медоид: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для описания значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления введём следующие обозначения (в дополнение к обозначениям, введённым в математическом описании алгоритма):&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любых объектов верно неравенство &amp;lt;math&amp;gt;D_{i} &amp;lt;= E_{i}&amp;lt;/math&amp;gt;. Отметим также, что значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут меняться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, следовательно они должны пересчитываться после добавления нового медоида или выполнения операции &#039;&#039;обмена&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; представляет собой число, на которое уменьшается значение &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида. Очевидно, что данное значение всегда неотрицательно. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом случае, когда &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{ij}&amp;lt;/math&amp;gt;, величина &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; не изменится, т.к. ближайший к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоид останется на том же расстоянии от него, следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = 0&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{ij}&amp;lt;/math&amp;gt;, ближайшим к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоидом станет новый выбранный медоид (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-ый объект), следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = D_{j} - d_{ij}&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Cij.png|thumb|center|300px|Вычисление значения &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; представляет собой число, которое добавляется к значению &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выполнения операции &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом  случае, когда &amp;lt;math&amp;gt;D_{j} = d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) может быть два варианта: &amp;lt;math&amp;gt;E_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет второго ближайший к нему медоид), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = E_{j} - D_{j}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} != d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) также может быть два варианта: &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоид &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта не изменится), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Таким образом, в первом случае (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; может быть вычислено по формуле &amp;lt;math&amp;gt;T_{ijh} = min(E_{j}, d_{jh}) - D_{j}&amp;lt;/math&amp;gt;, а во втором (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) – по формуле &amp;lt;math&amp;gt;T_{ijh} = min(d_{jh} - D_{j}, 0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Tijh.png|thumb|center|550px|Вычисление значения &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с математическим описанием алгоритм включает две стадии &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;. Рассмотрим реализацию каждой стадии. При описании реализации последовательного алгоритма на псевдокоде будем считать, что в программе поддерживаются следующие переменные:&lt;br /&gt;
 &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt; – расстояние между &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-м и &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-м объектами&lt;br /&gt;
 &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; – требуемое число кластеров&lt;br /&gt;
 &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt; – множество всех объектов&lt;br /&gt;
 &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество медоидов&lt;br /&gt;
 &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество всех объектов, кроме медоидов &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
 &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; необходимо поддерживать для вычисления значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;BUILD&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;S = &amp;lt;/math&amp;gt;&amp;amp;#8709;&lt;br /&gt;
 Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Начало цикла от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt;&lt;br /&gt;
     Добавить к &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;SWAP&#039;&#039;:&lt;br /&gt;
 Начало цикла с постусловием &lt;br /&gt;
     Вычислить значения &amp;lt;math&amp;gt;D_{i}, E_{i}&amp;lt;/math&amp;gt; для всех объектов из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычислить пару &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
     Если &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;, то выполнить обмен:&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла с постусловием &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма в соответствии с данной схемой доступа на github[https://github.com/al-pacino/Clustering/blob/master/pam.cpp].&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм &#039;&#039;PAM&#039;&#039; к алгоритмам с квадратичной сложностью по количеству &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Ниже представлены информационные графы для стадий &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;, они хорошо отражают параллельную структуру алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_build.png|thumb|center|600px|Информационный граф выбора медоида стадии &#039;&#039;BUILD&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_swap.png|thumb|center|600px|Информационный граф одной итерации стадии &#039;&#039;SWAP&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходя из предположения неограниченности ресурсов будем считать, что в нашем распоряжении имеется &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер, память каждого из которых целиком содержит матрицу расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; состоит из выбора начального (центрального) медоида и выбора &amp;lt;math&amp;gt;K - 1&amp;lt;/math&amp;gt; оставшихся медоидов. Для выбора медоида требуется вычисления &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;) для всех не выбранных объектов (из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;). Сумму в операции &amp;lt;math&amp;gt;arg\max&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt;) можно считать независимо на разных ядрах, поэтому сложность выбора одного медоида на стадии &#039;&#039;BUILD&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; (сложность вычисления суммы на одном ядре). Выбор одного медоида на стадии &#039;&#039;BUILD&#039;&#039; осуществляется &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; раз, следовательно, сложность параллельной реализации стадии &#039;&#039;BUILD&#039;&#039; (в соответствии с данным описанием) будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;. Также стоит отметить, что для выполнения стадии &#039;&#039;BUILD&#039;&#039; описанным выше образом, достаточно задействовать лишь &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, а не &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проведём аналогичные рассуждения для одной итерации стадии &#039;&#039;SWAP&#039;&#039;. Выполнение одной итерации требует вычисления &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; для каждой пары медоида и объекта. Сумму в операции &amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt; можно считать независимо на разных ядрах, поэтому сложность одной итерации стадии &#039;&#039;SWAP&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; если задействовать &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер. Если в нашем распоряжении есть только &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, то сложность операции одной итерации стадии &#039;&#039;SWAP&#039;&#039; будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведённых рассуждений можно сделать вывод о том, что сложность параллельной реализации алгоритма является линейной по числу объектов кластеризации &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt; против квадратичной сложности &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; в последовательном случае.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица расстояния (в смысле непохожести) между объектами кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности в предположении о неограниченности ресурсов в описанном выше случае является линейным (отношение квадратичной сложности к линейной).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные достоинства алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&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;
&#039;&#039;&#039;Основные недостатки алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
* Необходимо задание требуемого числа кластеров&lt;br /&gt;
* Квадратичную вычислительная сложность&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Срок сдачи продлён до 15-го ноября.&#039;&#039;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете ClusterR на языке R:&lt;br /&gt;
#* Лицензия: MIT&lt;br /&gt;
#* [https://cran.r-project.org/package=ClusterR веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;Cluster_Medoids&#039;. Отличительная особенность реализации &amp;lt;ref&amp;gt;Lampros Mouselimis [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;ClusterR&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** для задания метрики между элементами кластеризуемого множества передаётся строка, задающая одну из реализованных в алгоритме метрик. Данный подход теряет одно из преимуществ алгоритма PAM, позволяющее в качестве матрицы расстояний использовать произвольную матрицу различий.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете Cluster на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥2)&lt;br /&gt;
#* [https://cran.r-project.org/package=cluster веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;pam()&#039;. Данная реализация имеет следующие особенности &amp;lt;ref&amp;gt;Martin Maechler., etc. [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;cluster&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** функция может принимать на вход не множество точек, а матрицу расстояний между ними;&lt;br /&gt;
#** реализация более гибкая, так как принимает на вход матрицу различий элементов, а не использует какую-либо метрику;&lt;br /&gt;
#** может быть предоставлено графическое отображение.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM в пакете SPRINT (Simple Parallel R INTerface - параллельный фреймворк) на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥3)&lt;br /&gt;
#* [https://cran.r-project.org/package=sprint веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в фукции &#039;ppam()&#039;. Входные параметры данной функции схожи с параметрами, задаваемыми в линейной реализации &#039;pam()&#039; пакета Cluster языка R. Отличительной особенностью является подача на вход предвычисленной матрицы расстояний (например, с помощью функции &#039;pcor()&#039; из этой же библиотеки).&amp;lt;ref&amp;gt;University of Edinburgh SPRINT Team. [https://cran.r-project.org/web/packages/sprint/sprint.pdf Package &#039;sprint&#039;]. February 20, 2015&amp;lt;/ref&amp;gt;&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM на основе операций MapReduce на Hadoop кластере.&lt;br /&gt;
#* В рамках исследования по ускорению анализа информации о геноме были созданы реализации алгоритма PAM с использованием технологии MPI и технологии MapReduce. Реализация в открытом досупе отсутствует. &amp;lt;ref&amp;gt;[Dobrzelecki B. et al. Managing and analysing Genomic Data using HPC and Clouds //Grid and Cloud Database Management. – Springer Berlin Heidelberg, 2011. – С. 261-277.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11346</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11346"/>
		<updated>2016-10-15T19:16:25Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Тодуа_Антон | Тодуа А.Р.]],[[Участник:Гусева_Юлия |Гусева Ю.В.]]&lt;br /&gt;
(вклад равноценный)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; (Partitioning Around Medoids) был предложен Чарли Кауфаманом (Charlie Kaufman) и Питером Русивом (Peter Rousseeuw) в 1987&amp;lt;ref&amp;gt;Kaufman, L. and P.J. Rousseeuw, Clustering by means of medoids, in: Y. Dodge (Ed.), Statistical Data Analysis based on the L1 Norm (North-Holland, Amsterdam, 1987) 405 — 416.&amp;lt;/ref&amp;gt;. Алгоритм является одним из распространённых вариантов реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PAM&#039;&#039; используется для выполнения кластеризации[https://en.wikipedia.org/wiki/Hierarchical_clustering] объектов — процесса автоматического разбиения некоторого множества объектов на кластеры (множества) на основе их схожести (наиболее схожие объекты, как правило, располагаются в одном кластере). В качестве исходных данных алгоритму необходима симметрическая матрица с нолями на главной диагонали (dissimilarity matrix), задающая расстояние (в смысле похожести) между объектами, для которых выполняется кластеризация и число кластеров, по которым следует распределить объекты. Стоит отметить, что не все алгоритмы кластеризации требует задания количества кластеров, например, методы иерархической[https://en.wikipedia.org/wiki/Hierarchical_clustering] кластеризации свободны от данного ограничения.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; для каждого кластера в качестве его характерного представителя выбирает наиболее подходящий из объектов кластеризации. Выбранные объекты называются медоидами (medoids). Алгоритм состоит из двух стадий. Первая стадия – &#039;&#039;BUILD&#039;&#039; предназначена для выбора исходного множества медоидов. Вторая стадия – &#039;&#039;SWAP&#039;&#039; является итерационной. На каждой итерации стадии &#039;&#039;SWAP&#039;&#039; алгоритм пытается улучшить выбранное множество медоидов с помощью выполнения операции &#039;&#039;обмена&#039;&#039;, которая представляет собой замену одного медоида на один из объектов кластеризации. Алгоритм завершает свою работу, когда ни один из возможных обменов не позволяет улучшить разбиение на кластеры. Часто на практике, условием завершения работы алгоритма также является момент, когда наилучшее возможное улучшение кластеризации меньше заранее выбранной пороговой величины. Введение данной величины позволяет сократить число итераций. Последнее, однако, снижает качество кластеризации (иногда незначительно).&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В качестве исходных данных алгоритм принимает:&lt;br /&gt;
* Симметрическую матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до каждого из остальных объектов&lt;br /&gt;
* Требуемое число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. Все медоиды относится к разных кластерам и являются их характерными представителями. Кластеры остальных объектов (не медоидов) совпадают с кластером ближайшего к ним медоида. Ближайший к &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-му объекту медоид будем коротко назвать медоидом &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта. Выбор медоидов осуществляется исходя из минимизации среднего расстояния (average dissimilarity) между объектами внутри одного кластера. От минимизации среднего расстояния можно перейти к минимизации суммы расстояний от объектов до их медоидов. Такой переход не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления. Стоит отметить, что в общем случае расстояние между объектами следует понимать как меру похожести (similarity) объектов.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида, в результате &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект&lt;br /&gt;
&lt;br /&gt;
Под &#039;&#039;обменом&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект будем понимать операцию, в результате которой &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й медоид перестаёт быть медоидом, а &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект выбирается в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp; = S - \{i\} + \{h\} \\&lt;br /&gt;
U &amp;amp; = U - \{h\} + \{i\}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто. Описание значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления будет дано при описании макроструктуры алгоритма.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, сумма расстояний от которого до всех остальных объектов минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения &#039;&#039;обмена&#039;&#039;. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. В противном случае дальнейшее улучшение кластеризации с помощью &#039;&#039;обмена&#039;&#039; невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов. Как было сказано &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й объект лежит в том же кластере, что и его медоид: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для описания значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления введём следующие обозначения (в дополнение к обозначениям, введённым в математическом описании алгоритма):&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любых объектов верно неравенство &amp;lt;math&amp;gt;D_{i} &amp;lt;= E_{i}&amp;lt;/math&amp;gt;. Отметим также, что значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут меняться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, следовательно они должны пересчитываться после добавления нового медоида или выполнения операции &#039;&#039;обмена&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; представляет собой число, на которое уменьшается значение &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида. Очевидно, что данное значение всегда неотрицательно. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом случае, когда &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{ij}&amp;lt;/math&amp;gt;, величина &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; не изменится, т.к. ближайший к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоид останется на том же расстоянии от него, следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = 0&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{ij}&amp;lt;/math&amp;gt;, ближайшим к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоидом станет новый выбранный медоид (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-ый объект), следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = D_{j} - d_{ij}&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Cij.png|thumb|center|300px|Вычисление значения &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; представляет собой число, которое добавляется к значению &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выполнения операции &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом  случае, когда &amp;lt;math&amp;gt;D_{j} = d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) может быть два варианта: &amp;lt;math&amp;gt;E_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет второго ближайший к нему медоид), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = E_{j} - D_{j}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} != d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) также может быть два варианта: &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоид &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта не изменится), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Таким образом, в первом случае (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; может быть вычислено по формуле &amp;lt;math&amp;gt;T_{ijh} = min(E_{j}, d_{jh}) - D_{j}&amp;lt;/math&amp;gt;, а во втором (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) – по формуле &amp;lt;math&amp;gt;T_{ijh} = min(d_{jh} - D_{j}, 0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Tijh.png|thumb|center|550px|Вычисление значения &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с математическим описанием алгоритм включает две стадии &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;. Рассмотрим реализацию каждой стадии. При описании реализации последовательного алгоритма на псевдокоде будем считать, что в программе поддерживаются следующие переменные:&lt;br /&gt;
 &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt; – расстояние между &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-м и &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-м объектами&lt;br /&gt;
 &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; – требуемое число кластеров&lt;br /&gt;
 &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt; – множество всех объектов&lt;br /&gt;
 &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество медоидов&lt;br /&gt;
 &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество всех объектов, кроме медоидов &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
 &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; необходимо поддерживать для вычисления значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;BUILD&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;S = &amp;lt;/math&amp;gt;&amp;amp;#8709;&lt;br /&gt;
 Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Начало цикла от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt;&lt;br /&gt;
     Добавить к &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;SWAP&#039;&#039;:&lt;br /&gt;
 Начало цикла с постусловием &lt;br /&gt;
     Вычислить значения &amp;lt;math&amp;gt;D_{i}, E_{i}&amp;lt;/math&amp;gt; для всех объектов из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычислить пару &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
     Если &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;, то выполнить обмен:&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла с постусловием &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма в соответствии с данной схемой доступа на github[https://github.com/al-pacino/Clustering/blob/master/pam.cpp].&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм &#039;&#039;PAM&#039;&#039; к алгоритмам с квадратичной сложностью по количеству &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Ниже представлены информационные графы для стадий &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;, они хорошо отражают параллельную структуру алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_build.png|thumb|center|600px|Информационный граф выбора медоида стадии &#039;&#039;BUILD&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_swap.png|thumb|center|600px|Информационный граф одной итерации стадии &#039;&#039;SWAP&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходя из предположения неограниченности ресурсов будем считать, что в нашем распоряжении имеется &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер, память каждого из которых целиком содержит матрицу расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; состоит из выбора начального (центрального) медоида и выбора &amp;lt;math&amp;gt;K - 1&amp;lt;/math&amp;gt; оставшихся медоидов. Для выбора медоида требуется вычисления &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;) для всех не выбранных объектов (из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;). Сумму в операции &amp;lt;math&amp;gt;arg\max&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt;) можно считать независимо на разных ядрах, поэтому сложность выбора одного медоида на стадии &#039;&#039;BUILD&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; (сложность вычисления суммы на одном ядре). Выбор одного медоида на стадии &#039;&#039;BUILD&#039;&#039; осуществляется &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; раз, следовательно, сложность параллельной реализации стадии &#039;&#039;BUILD&#039;&#039; (в соответствии с данным описанием) будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;. Также стоит отметить, что для выполнения стадии &#039;&#039;BUILD&#039;&#039; описанным выше образом, достаточно задействовать лишь &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, а не &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проведём аналогичные рассуждения для одной итерации стадии &#039;&#039;SWAP&#039;&#039;. Выполнение одной итерации требует вычисления &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; для каждой пары медоида и объекта. Сумму в операции &amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt; можно считать независимо на разных ядрах, поэтому сложность одной итерации стадии &#039;&#039;SWAP&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; если задействовать &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер. Если в нашем распоряжении есть только &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, то сложность операции одной итерации стадии &#039;&#039;SWAP&#039;&#039; будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведённых рассуждений можно сделать вывод о том, что сложность параллельной реализации алгоритма является линейной по числу объектов кластеризации &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt; против квадратичной сложности &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; в последовательном случае.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица расстояния (в смысле непохожести) между объектами кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности в предположении о неограниченности ресурсов в описанном выше случае является линейным (отношение квадратичной сложности к линейной).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные достоинства алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&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;
&#039;&#039;&#039;Основные недостатки алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
* Необходимо задание требуемого числа кластеров&lt;br /&gt;
* Квадратичную вычислительная сложность&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Срок сдачи продлён до 15-го ноября.&#039;&#039;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете ClusterR на языке R:&lt;br /&gt;
#* Лицензия: MIT&lt;br /&gt;
#* [https://cran.r-project.org/package=ClusterR веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;Cluster_Medoids&#039;. Отличительная особенность реализации &amp;lt;ref&amp;gt;Lampros Mouselimis [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;ClusterR&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** для задания метрики между элементами кластеризуемого множества передаётся строка, задающая одну из реализованных в алгоритме метрик. Данный подход теряет одно из преимуществ алгоритма PAM, позволяющее в качестве матрицы расстояний использовать произвольную матрицу различий.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете Cluster на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥2)&lt;br /&gt;
#* [https://cran.r-project.org/package=cluster веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;pam()&#039;. Данная реализация имеет следующие особенности &amp;lt;ref&amp;gt;Martin Maechler., etc. [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;cluster&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** функция может принимать на вход не множество точек, а матрицу расстояний между ними;&lt;br /&gt;
#** реализация более гибкая, так как принимает на вход матрицу различий элементов, а не использует какую-либо метрику;&lt;br /&gt;
#** может быть предоставлено графическое отображение.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM в пакете SPRINT (Simple Parallel R INTerface - параллельный фреймворк) на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥3)&lt;br /&gt;
#* [https://cran.r-project.org/package=sprint веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в фукции &#039;ppam()&#039;. Входные параметры данной функции схожи с параметрами, задаваемыми в линейной реализации &#039;pam()&#039; пакета Cluster языка R. Отличительной особенностью является подача на вход предвычисленной матрицы расстояний (например, с помощью функции &#039;pcor()&#039; из этой же библиотеки).&amp;lt;ref&amp;gt;University of Edinburgh SPRINT Team. [https://cran.r-project.org/web/packages/sprint/sprint.pdf Package &#039;sprint&#039;]. February 20, 2015&amp;lt;/ref&amp;gt;&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM на основе операций MapReduce на Hadoop кластере.&lt;br /&gt;
#* В рамках исследования по ускорению анализа информации о геноме были созданы реализации алгоритма PAM с использованием технологии MPI и технологии MapReduce. Реализация в открытом досупе отсутствует. &amp;lt;ref&amp;gt;[Dobrzelecki B. et al. Managing and analysing Genomic Data using HPC and Clouds //Grid and Cloud Database Management. – Springer Berlin Heidelberg, 2011. – С. 261-277.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11263</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11263"/>
		<updated>2016-10-15T19:02:35Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Тодуа_Антон | Тодуа А.Р.]],[[Участник:Гусева_Юлия |Гусева Ю.В.]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; (Partitioning Around Medoids) был предложен Чарли Кауфаманом (Charlie Kaufman) и Питером Русивом (Peter Rousseeuw) в 1987&amp;lt;ref&amp;gt;Kaufman, L. and P.J. Rousseeuw, Clustering by means of medoids, in: Y. Dodge (Ed.), Statistical Data Analysis based on the L1 Norm (North-Holland, Amsterdam, 1987) 405 — 416.&amp;lt;/ref&amp;gt;. Алгоритм является одним из распространённых вариантов реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PAM&#039;&#039; используется для выполнения кластеризации[https://en.wikipedia.org/wiki/Hierarchical_clustering] объектов — процесса автоматического разбиения некоторого множества объектов на кластеры (множества) на основе их схожести (наиболее схожие объекты, как правило, располагаются в одном кластере). В качестве исходных данных алгоритму необходима симметрическая матрица с нолями на главной диагонали (dissimilarity matrix), задающая расстояние (в смысле похожести) между объектами, для которых выполняется кластеризация и число кластеров, по которым следует распределить объекты. Стоит отметить, что не все алгоритмы кластеризации требует задания количества кластеров, например, методы иерархической[https://en.wikipedia.org/wiki/Hierarchical_clustering] кластеризации свободны от данного ограничения.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; для каждого кластера в качестве его характерного представителя выбирает наиболее подходящий из объектов кластеризации. Выбранные объекты называются медоидами (medoids). Алгоритм состоит из двух стадий. Первая стадия – &#039;&#039;BUILD&#039;&#039; предназначена для выбора исходного множества медоидов. Вторая стадия – &#039;&#039;SWAP&#039;&#039; является итерационной. На каждой итерации стадии &#039;&#039;SWAP&#039;&#039; алгоритм пытается улучшить выбранное множество медоидов с помощью выполнения операции &#039;&#039;обмена&#039;&#039;, которая представляет собой замену одного медоида на один из объектов кластеризации. Алгоритм завершает свою работу, когда ни один из возможных обменов не позволяет улучшить разбиение на кластеры. Часто на практике, условием завершения работы алгоритма также является момент, когда наилучшее возможное улучшение кластеризации меньше заранее выбранной пороговой величины. Введение данной величины позволяет сократить число итераций. Последнее, однако, снижает качество кластеризации (иногда незначительно).&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В качестве исходных данных алгоритм принимает:&lt;br /&gt;
* Симметрическую матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до каждого из остальных объектов&lt;br /&gt;
* Требуемое число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. Все медоиды относится к разных кластерам и являются их характерными представителями. Кластеры остальных объектов (не медоидов) совпадают с кластером ближайшего к ним медоида. Ближайший к &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-му объекту медоид будем коротко назвать медоидом &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта. Выбор медоидов осуществляется исходя из минимизации среднего расстояния (average dissimilarity) между объектами внутри одного кластера. От минимизации среднего расстояния можно перейти к минимизации суммы расстояний от объектов до их медоидов. Такой переход не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления. Стоит отметить, что в общем случае расстояние между объектами следует понимать как меру похожести (similarity) объектов.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида, в результате &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект&lt;br /&gt;
&lt;br /&gt;
Под &#039;&#039;обменом&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект будем понимать операцию, в результате которой &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й медоид перестаёт быть медоидом, а &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект выбирается в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp; = S - \{i\} + \{h\} \\&lt;br /&gt;
U &amp;amp; = U - \{h\} + \{i\}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто. Описание значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления будет дано при описании макроструктуры алгоритма.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, сумма расстояний от которого до всех остальных объектов минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения &#039;&#039;обмена&#039;&#039;. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. В противном случае дальнейшее улучшение кластеризации с помощью &#039;&#039;обмена&#039;&#039; невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов. Как было сказано &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й объект лежит в том же кластере, что и его медоид: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для описания значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления введём следующие обозначения (в дополнение к обозначениям, введённым в математическом описании алгоритма):&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любых объектов верно неравенство &amp;lt;math&amp;gt;D_{i} &amp;lt;= E_{i}&amp;lt;/math&amp;gt;. Отметим также, что значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут меняться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, следовательно они должны пересчитываться после добавления нового медоида или выполнения операции &#039;&#039;обмена&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; представляет собой число, на которое уменьшается значение &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида. Очевидно, что данное значение всегда неотрицательно. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом случае, когда &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{ij}&amp;lt;/math&amp;gt;, величина &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; не изменится, т.к. ближайший к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоид останется на том же расстоянии от него, следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = 0&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{ij}&amp;lt;/math&amp;gt;, ближайшим к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоидом станет новый выбранный медоид (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-ый объект), следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = D_{j} - d_{ij}&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Cij.png|thumb|center|300px|Вычисление значения &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; представляет собой число, которое добавляется к значению &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выполнения операции &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом  случае, когда &amp;lt;math&amp;gt;D_{j} = d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) может быть два варианта: &amp;lt;math&amp;gt;E_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет второго ближайший к нему медоид), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = E_{j} - D_{j}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} != d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) также может быть два варианта: &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоид &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта не изменится), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Таким образом, в первом случае (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; может быть вычислено по формуле &amp;lt;math&amp;gt;T_{ijh} = min(E_{j}, d_{jh}) - D_{j}&amp;lt;/math&amp;gt;, а во втором (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) – по формуле &amp;lt;math&amp;gt;T_{ijh} = min(d_{jh} - D_{j}, 0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Tijh.png|thumb|center|550px|Вычисление значения &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с математическим описанием алгоритм включает две стадии &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;. Рассмотрим реализацию каждой стадии. При описании реализации последовательного алгоритма на псевдокоде будем считать, что в программе поддерживаются следующие переменные:&lt;br /&gt;
 &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt; – расстояние между &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-м и &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-м объектами&lt;br /&gt;
 &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; – требуемое число кластеров&lt;br /&gt;
 &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt; – множество всех объектов&lt;br /&gt;
 &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество медоидов&lt;br /&gt;
 &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество всех объектов, кроме медоидов &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
 &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; необходимо поддерживать для вычисления значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;BUILD&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;S = &amp;lt;/math&amp;gt;&amp;amp;#8709;&lt;br /&gt;
 Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Начало цикла от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt;&lt;br /&gt;
     Добавить к &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;SWAP&#039;&#039;:&lt;br /&gt;
 Начало цикла с постусловием &lt;br /&gt;
     Вычислить значения &amp;lt;math&amp;gt;D_{i}, E_{i}&amp;lt;/math&amp;gt; для всех объектов из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычислить пару &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
     Если &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;, то выполнить обмен:&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла с постусловием &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма в соответствии с данной схемой доступа на github[https://github.com/al-pacino/Clustering/blob/master/pam.cpp].&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм &#039;&#039;PAM&#039;&#039; к алгоритмам с квадратичной сложностью по количеству &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Ниже представлены информационные графы для стадий &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;, они хорошо отражают параллельную структуру алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_build.png|thumb|center|600px|Информационный граф выбора медоида стадии &#039;&#039;BUILD&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_swap.png|thumb|center|600px|Информационный граф одной итерации стадии &#039;&#039;SWAP&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходя из предположения неограниченности ресурсов будем считать, что в нашем распоряжении имеется &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер, память каждого из которых целиком содержит матрицу расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; состоит из выбора начального (центрального) медоида и выбора &amp;lt;math&amp;gt;K - 1&amp;lt;/math&amp;gt; оставшихся медоидов. Для выбора медоида требуется вычисления &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;) для всех не выбранных объектов (из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;). Сумму в операции &amp;lt;math&amp;gt;arg\max&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt;) можно считать независимо на разных ядрах, поэтому сложность выбора одного медоида на стадии &#039;&#039;BUILD&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; (сложность вычисления суммы на одном ядре). Выбор одного медоида на стадии &#039;&#039;BUILD&#039;&#039; осуществляется &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; раз, следовательно, сложность параллельной реализации стадии &#039;&#039;BUILD&#039;&#039; (в соответствии с данным описанием) будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;. Также стоит отметить, что для выполнения стадии &#039;&#039;BUILD&#039;&#039; описанным выше образом, достаточно задействовать лишь &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, а не &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проведём аналогичные рассуждения для одной итерации стадии &#039;&#039;SWAP&#039;&#039;. Выполнение одной итерации требует вычисления &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; для каждой пары медоида и объекта. Сумму в операции &amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt; можно считать независимо на разных ядрах, поэтому сложность одной итерации стадии &#039;&#039;SWAP&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; если задействовать &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер. Если в нашем распоряжении есть только &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, то сложность операции одной итерации стадии &#039;&#039;SWAP&#039;&#039; будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведённых рассуждений можно сделать вывод о том, что сложность параллельной реализации алгоритма является линейной по числу объектов кластеризации &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt; против квадратичной сложности &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; в последовательном случае.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица расстояния (в смысле непохожести) между объектами кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности в предположении о неограниченности ресурсов в описанном выше случае является линейным (отношение квадратичной сложности к линейной).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные достоинства алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&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;
&#039;&#039;&#039;Основные недостатки алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
* Необходимо задание требуемого числа кластеров&lt;br /&gt;
* Квадратичную вычислительная сложность&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Срок сдачи продлён до 15-го ноября.&#039;&#039;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете ClusterR на языке R:&lt;br /&gt;
#* Лицензия: MIT&lt;br /&gt;
#* [https://cran.r-project.org/package=ClusterR веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;Cluster_Medoids&#039;. Отличительная особенность реализации &amp;lt;ref&amp;gt;Lampros Mouselimis [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;ClusterR&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** для задания метрики между элементами кластеризуемого множества передаётся строка, задающая одну из реализованных в алгоритме метрик. Данный подход теряет одно из преимуществ алгоритма PAM, позволяющее в качестве матрицы расстояний использовать произвольную матрицу различий.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете Cluster на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥2)&lt;br /&gt;
#* [https://cran.r-project.org/package=cluster веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;pam()&#039;. Данная реализация имеет следующие особенности &amp;lt;ref&amp;gt;Martin Maechler., etc. [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;cluster&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** функция может принимать на вход не множество точек, а матрицу расстояний между ними;&lt;br /&gt;
#** реализация более гибкая, так как принимает на вход матрицу различий элементов, а не использует какую-либо метрику;&lt;br /&gt;
#** может быть предоставлено графическое отображение.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM в пакете SPRINT (Simple Parallel R INTerface - параллельный фреймворк) на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥3)&lt;br /&gt;
#* [https://cran.r-project.org/package=sprint веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в фукции &#039;ppam()&#039;. Входные параметры данной функции схожи с параметрами, задаваемыми в линейной реализации &#039;pam()&#039; пакета Cluster языка R. Отличительной особенностью является подача на вход предвычисленной матрицы расстояний (например, с помощью функции &#039;pcor()&#039; из этой же библиотеки).&amp;lt;ref&amp;gt;University of Edinburgh SPRINT Team. [https://cran.r-project.org/web/packages/sprint/sprint.pdf Package &#039;sprint&#039;]. February 20, 2015&amp;lt;/ref&amp;gt;&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM на основе операций MapReduce на Hadoop кластере.&lt;br /&gt;
#* В рамках исследования по ускорению анализа информации о геноме были созданы реализации алгоритма PAM с использованием технологии MPI и технологии MapReduce. Реализация в открытом досупе отсутствует. &amp;lt;ref&amp;gt;[Dobrzelecki B. et al. Managing and analysing Genomic Data using HPC and Clouds //Grid and Cloud Database Management. – Springer Berlin Heidelberg, 2011. – С. 261-277.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11260</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11260"/>
		<updated>2016-10-15T19:02:13Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Тодуа_АнтонТодуа | А.Р.]],[[Участник:Гусева_Юлия |Гусева Ю.В.]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; (Partitioning Around Medoids) был предложен Чарли Кауфаманом (Charlie Kaufman) и Питером Русивом (Peter Rousseeuw) в 1987&amp;lt;ref&amp;gt;Kaufman, L. and P.J. Rousseeuw, Clustering by means of medoids, in: Y. Dodge (Ed.), Statistical Data Analysis based on the L1 Norm (North-Holland, Amsterdam, 1987) 405 — 416.&amp;lt;/ref&amp;gt;. Алгоритм является одним из распространённых вариантов реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PAM&#039;&#039; используется для выполнения кластеризации[https://en.wikipedia.org/wiki/Hierarchical_clustering] объектов — процесса автоматического разбиения некоторого множества объектов на кластеры (множества) на основе их схожести (наиболее схожие объекты, как правило, располагаются в одном кластере). В качестве исходных данных алгоритму необходима симметрическая матрица с нолями на главной диагонали (dissimilarity matrix), задающая расстояние (в смысле похожести) между объектами, для которых выполняется кластеризация и число кластеров, по которым следует распределить объекты. Стоит отметить, что не все алгоритмы кластеризации требует задания количества кластеров, например, методы иерархической[https://en.wikipedia.org/wiki/Hierarchical_clustering] кластеризации свободны от данного ограничения.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; для каждого кластера в качестве его характерного представителя выбирает наиболее подходящий из объектов кластеризации. Выбранные объекты называются медоидами (medoids). Алгоритм состоит из двух стадий. Первая стадия – &#039;&#039;BUILD&#039;&#039; предназначена для выбора исходного множества медоидов. Вторая стадия – &#039;&#039;SWAP&#039;&#039; является итерационной. На каждой итерации стадии &#039;&#039;SWAP&#039;&#039; алгоритм пытается улучшить выбранное множество медоидов с помощью выполнения операции &#039;&#039;обмена&#039;&#039;, которая представляет собой замену одного медоида на один из объектов кластеризации. Алгоритм завершает свою работу, когда ни один из возможных обменов не позволяет улучшить разбиение на кластеры. Часто на практике, условием завершения работы алгоритма также является момент, когда наилучшее возможное улучшение кластеризации меньше заранее выбранной пороговой величины. Введение данной величины позволяет сократить число итераций. Последнее, однако, снижает качество кластеризации (иногда незначительно).&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В качестве исходных данных алгоритм принимает:&lt;br /&gt;
* Симметрическую матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до каждого из остальных объектов&lt;br /&gt;
* Требуемое число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. Все медоиды относится к разных кластерам и являются их характерными представителями. Кластеры остальных объектов (не медоидов) совпадают с кластером ближайшего к ним медоида. Ближайший к &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-му объекту медоид будем коротко назвать медоидом &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта. Выбор медоидов осуществляется исходя из минимизации среднего расстояния (average dissimilarity) между объектами внутри одного кластера. От минимизации среднего расстояния можно перейти к минимизации суммы расстояний от объектов до их медоидов. Такой переход не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления. Стоит отметить, что в общем случае расстояние между объектами следует понимать как меру похожести (similarity) объектов.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида, в результате &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект&lt;br /&gt;
&lt;br /&gt;
Под &#039;&#039;обменом&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект будем понимать операцию, в результате которой &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й медоид перестаёт быть медоидом, а &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект выбирается в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp; = S - \{i\} + \{h\} \\&lt;br /&gt;
U &amp;amp; = U - \{h\} + \{i\}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто. Описание значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления будет дано при описании макроструктуры алгоритма.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, сумма расстояний от которого до всех остальных объектов минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения &#039;&#039;обмена&#039;&#039;. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. В противном случае дальнейшее улучшение кластеризации с помощью &#039;&#039;обмена&#039;&#039; невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов. Как было сказано &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й объект лежит в том же кластере, что и его медоид: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для описания значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления введём следующие обозначения (в дополнение к обозначениям, введённым в математическом описании алгоритма):&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любых объектов верно неравенство &amp;lt;math&amp;gt;D_{i} &amp;lt;= E_{i}&amp;lt;/math&amp;gt;. Отметим также, что значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут меняться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, следовательно они должны пересчитываться после добавления нового медоида или выполнения операции &#039;&#039;обмена&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; представляет собой число, на которое уменьшается значение &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида. Очевидно, что данное значение всегда неотрицательно. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом случае, когда &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{ij}&amp;lt;/math&amp;gt;, величина &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; не изменится, т.к. ближайший к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоид останется на том же расстоянии от него, следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = 0&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{ij}&amp;lt;/math&amp;gt;, ближайшим к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоидом станет новый выбранный медоид (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-ый объект), следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = D_{j} - d_{ij}&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Cij.png|thumb|center|300px|Вычисление значения &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; представляет собой число, которое добавляется к значению &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выполнения операции &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом  случае, когда &amp;lt;math&amp;gt;D_{j} = d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) может быть два варианта: &amp;lt;math&amp;gt;E_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет второго ближайший к нему медоид), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = E_{j} - D_{j}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} != d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) также может быть два варианта: &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоид &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта не изменится), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Таким образом, в первом случае (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; может быть вычислено по формуле &amp;lt;math&amp;gt;T_{ijh} = min(E_{j}, d_{jh}) - D_{j}&amp;lt;/math&amp;gt;, а во втором (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) – по формуле &amp;lt;math&amp;gt;T_{ijh} = min(d_{jh} - D_{j}, 0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Tijh.png|thumb|center|550px|Вычисление значения &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с математическим описанием алгоритм включает две стадии &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;. Рассмотрим реализацию каждой стадии. При описании реализации последовательного алгоритма на псевдокоде будем считать, что в программе поддерживаются следующие переменные:&lt;br /&gt;
 &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt; – расстояние между &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-м и &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-м объектами&lt;br /&gt;
 &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; – требуемое число кластеров&lt;br /&gt;
 &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt; – множество всех объектов&lt;br /&gt;
 &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество медоидов&lt;br /&gt;
 &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество всех объектов, кроме медоидов &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
 &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; необходимо поддерживать для вычисления значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;BUILD&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;S = &amp;lt;/math&amp;gt;&amp;amp;#8709;&lt;br /&gt;
 Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Начало цикла от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt;&lt;br /&gt;
     Добавить к &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;SWAP&#039;&#039;:&lt;br /&gt;
 Начало цикла с постусловием &lt;br /&gt;
     Вычислить значения &amp;lt;math&amp;gt;D_{i}, E_{i}&amp;lt;/math&amp;gt; для всех объектов из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычислить пару &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
     Если &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;, то выполнить обмен:&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла с постусловием &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма в соответствии с данной схемой доступа на github[https://github.com/al-pacino/Clustering/blob/master/pam.cpp].&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм &#039;&#039;PAM&#039;&#039; к алгоритмам с квадратичной сложностью по количеству &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Ниже представлены информационные графы для стадий &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;, они хорошо отражают параллельную структуру алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_build.png|thumb|center|600px|Информационный граф выбора медоида стадии &#039;&#039;BUILD&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_swap.png|thumb|center|600px|Информационный граф одной итерации стадии &#039;&#039;SWAP&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходя из предположения неограниченности ресурсов будем считать, что в нашем распоряжении имеется &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер, память каждого из которых целиком содержит матрицу расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; состоит из выбора начального (центрального) медоида и выбора &amp;lt;math&amp;gt;K - 1&amp;lt;/math&amp;gt; оставшихся медоидов. Для выбора медоида требуется вычисления &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;) для всех не выбранных объектов (из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;). Сумму в операции &amp;lt;math&amp;gt;arg\max&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt;) можно считать независимо на разных ядрах, поэтому сложность выбора одного медоида на стадии &#039;&#039;BUILD&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; (сложность вычисления суммы на одном ядре). Выбор одного медоида на стадии &#039;&#039;BUILD&#039;&#039; осуществляется &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; раз, следовательно, сложность параллельной реализации стадии &#039;&#039;BUILD&#039;&#039; (в соответствии с данным описанием) будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;. Также стоит отметить, что для выполнения стадии &#039;&#039;BUILD&#039;&#039; описанным выше образом, достаточно задействовать лишь &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, а не &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проведём аналогичные рассуждения для одной итерации стадии &#039;&#039;SWAP&#039;&#039;. Выполнение одной итерации требует вычисления &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; для каждой пары медоида и объекта. Сумму в операции &amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt; можно считать независимо на разных ядрах, поэтому сложность одной итерации стадии &#039;&#039;SWAP&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; если задействовать &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер. Если в нашем распоряжении есть только &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, то сложность операции одной итерации стадии &#039;&#039;SWAP&#039;&#039; будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведённых рассуждений можно сделать вывод о том, что сложность параллельной реализации алгоритма является линейной по числу объектов кластеризации &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt; против квадратичной сложности &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; в последовательном случае.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица расстояния (в смысле непохожести) между объектами кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности в предположении о неограниченности ресурсов в описанном выше случае является линейным (отношение квадратичной сложности к линейной).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные достоинства алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&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;
&#039;&#039;&#039;Основные недостатки алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
* Необходимо задание требуемого числа кластеров&lt;br /&gt;
* Квадратичную вычислительная сложность&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Срок сдачи продлён до 15-го ноября.&#039;&#039;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете ClusterR на языке R:&lt;br /&gt;
#* Лицензия: MIT&lt;br /&gt;
#* [https://cran.r-project.org/package=ClusterR веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;Cluster_Medoids&#039;. Отличительная особенность реализации &amp;lt;ref&amp;gt;Lampros Mouselimis [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;ClusterR&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** для задания метрики между элементами кластеризуемого множества передаётся строка, задающая одну из реализованных в алгоритме метрик. Данный подход теряет одно из преимуществ алгоритма PAM, позволяющее в качестве матрицы расстояний использовать произвольную матрицу различий.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете Cluster на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥2)&lt;br /&gt;
#* [https://cran.r-project.org/package=cluster веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;pam()&#039;. Данная реализация имеет следующие особенности &amp;lt;ref&amp;gt;Martin Maechler., etc. [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;cluster&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** функция может принимать на вход не множество точек, а матрицу расстояний между ними;&lt;br /&gt;
#** реализация более гибкая, так как принимает на вход матрицу различий элементов, а не использует какую-либо метрику;&lt;br /&gt;
#** может быть предоставлено графическое отображение.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM в пакете SPRINT (Simple Parallel R INTerface - параллельный фреймворк) на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥3)&lt;br /&gt;
#* [https://cran.r-project.org/package=sprint веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в фукции &#039;ppam()&#039;. Входные параметры данной функции схожи с параметрами, задаваемыми в линейной реализации &#039;pam()&#039; пакета Cluster языка R. Отличительной особенностью является подача на вход предвычисленной матрицы расстояний (например, с помощью функции &#039;pcor()&#039; из этой же библиотеки).&amp;lt;ref&amp;gt;University of Edinburgh SPRINT Team. [https://cran.r-project.org/web/packages/sprint/sprint.pdf Package &#039;sprint&#039;]. February 20, 2015&amp;lt;/ref&amp;gt;&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM на основе операций MapReduce на Hadoop кластере.&lt;br /&gt;
#* В рамках исследования по ускорению анализа информации о геноме были созданы реализации алгоритма PAM с использованием технологии MPI и технологии MapReduce. Реализация в открытом досупе отсутствует. &amp;lt;ref&amp;gt;[Dobrzelecki B. et al. Managing and analysing Genomic Data using HPC and Clouds //Grid and Cloud Database Management. – Springer Berlin Heidelberg, 2011. – С. 261-277.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11207</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11207"/>
		<updated>2016-10-15T18:53:37Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; (Partitioning Around Medoids) был предложен Чарли Кауфаманом (Charlie Kaufman) и Питером Русивом (Peter Rousseeuw) в 1987&amp;lt;ref&amp;gt;Kaufman, L. and P.J. Rousseeuw, Clustering by means of medoids, in: Y. Dodge (Ed.), Statistical Data Analysis based on the L1 Norm (North-Holland, Amsterdam, 1987) 405 — 416.&amp;lt;/ref&amp;gt;. Алгоритм является одним из распространённых вариантов реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PAM&#039;&#039; используется для выполнения кластеризации[https://en.wikipedia.org/wiki/Hierarchical_clustering] объектов — процесса автоматического разбиения некоторого множества объектов на кластеры (множества) на основе их схожести (наиболее схожие объекты, как правило, располагаются в одном кластере). В качестве исходных данных алгоритму необходима симметрическая матрица с нолями на главной диагонали (dissimilarity matrix), задающая расстояние (в смысле похожести) между объектами, для которых выполняется кластеризация и число кластеров, по которым следует распределить объекты. Стоит отметить, что не все алгоритмы кластеризации требует задания количества кластеров, например, методы иерархической[https://en.wikipedia.org/wiki/Hierarchical_clustering] кластеризации свободны от данного ограничения.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; для каждого кластера в качестве его характерного представителя выбирает наиболее подходящий из объектов кластеризации. Выбранные объекты называются медоидами (medoids). Алгоритм состоит из двух стадий. Первая стадия – &#039;&#039;BUILD&#039;&#039; предназначена для выбора исходного множества медоидов. Вторая стадия – &#039;&#039;SWAP&#039;&#039; является итерационной. На каждой итерации стадии &#039;&#039;SWAP&#039;&#039; алгоритм пытается улучшить выбранное множество медоидов с помощью выполнения операции &#039;&#039;обмена&#039;&#039;, которая представляет собой замену одного медоида на один из объектов кластеризации. Алгоритм завершает свою работу, когда ни один из возможных обменов не позволяет улучшить разбиение на кластеры. Часто на практике, условием завершения работы алгоритма также является момент, когда наилучшее возможное улучшение кластеризации меньше заранее выбранной пороговой величины. Введение данной величины позволяет сократить число итераций. Последнее, однако, снижает качество кластеризации (иногда незначительно).&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В качестве исходных данных алгоритм принимает:&lt;br /&gt;
* Симметрическую матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до каждого из остальных объектов&lt;br /&gt;
* Требуемое число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. Все медоиды относится к разных кластерам и являются их характерными представителями. Кластеры остальных объектов (не медоидов) совпадают с кластером ближайшего к ним медоида. Ближайший к &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-му объекту медоид будем коротко назвать медоидом &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта. Выбор медоидов осуществляется исходя из минимизации среднего расстояния (average dissimilarity) между объектами внутри одного кластера. От минимизации среднего расстояния можно перейти к минимизации суммы расстояний от объектов до их медоидов. Такой переход не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления. Стоит отметить, что в общем случае расстояние между объектами следует понимать как меру похожести (similarity) объектов.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида, в результате &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект&lt;br /&gt;
&lt;br /&gt;
Под &#039;&#039;обменом&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект будем понимать операцию, в результате которой &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й медоид перестаёт быть медоидом, а &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект выбирается в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp; = S - \{i\} + \{h\} \\&lt;br /&gt;
U &amp;amp; = U - \{h\} + \{i\}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто. Описание значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления будет дано при описании макроструктуры алгоритма.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, сумма расстояний от которого до всех остальных объектов минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения &#039;&#039;обмена&#039;&#039;. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. В противном случае дальнейшее улучшение кластеризации с помощью &#039;&#039;обмена&#039;&#039; невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов. Как было сказано &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й объект лежит в том же кластере, что и его медоид: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для описания значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления введём следующие обозначения (в дополнение к обозначениям, введённым в математическом описании алгоритма):&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любых объектов верно неравенство &amp;lt;math&amp;gt;D_{i} &amp;lt;= E_{i}&amp;lt;/math&amp;gt;. Отметим также, что значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут меняться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, следовательно они должны пересчитываться после добавления нового медоида или выполнения операции &#039;&#039;обмена&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; представляет собой число, на которое уменьшается значение &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида. Очевидно, что данное значение всегда неотрицательно. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом случае, когда &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{ij}&amp;lt;/math&amp;gt;, величина &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; не изменится, т.к. ближайший к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоид останется на том же расстоянии от него, следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = 0&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{ij}&amp;lt;/math&amp;gt;, ближайшим к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоидом станет новый выбранный медоид (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-ый объект), следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = D_{j} - d_{ij}&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Cij.png|thumb|center|300px|Вычисление значения &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; представляет собой число, которое добавляется к значению &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выполнения операции &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом  случае, когда &amp;lt;math&amp;gt;D_{j} = d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) может быть два варианта: &amp;lt;math&amp;gt;E_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет второго ближайший к нему медоид), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = E_{j} - D_{j}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} != d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) также может быть два варианта: &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоид &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта не изменится), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Таким образом, в первом случае (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; может быть вычислено по формуле &amp;lt;math&amp;gt;T_{ijh} = min(E_{j}, d_{jh}) - D_{j}&amp;lt;/math&amp;gt;, а во втором (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) – по формуле &amp;lt;math&amp;gt;T_{ijh} = min(d_{jh} - D_{j}, 0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Tijh.png|thumb|center|550px|Вычисление значения &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с математическим описанием алгоритм включает две стадии &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;. Рассмотрим реализацию каждой стадии. При описании реализации последовательного алгоритма на псевдокоде будем считать, что в программе поддерживаются следующие переменные:&lt;br /&gt;
 &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt; – расстояние между &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-м и &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-м объектами&lt;br /&gt;
 &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; – требуемое число кластеров&lt;br /&gt;
 &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt; – множество всех объектов&lt;br /&gt;
 &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество медоидов&lt;br /&gt;
 &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество всех объектов, кроме медоидов &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
 &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; необходимо поддерживать для вычисления значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;BUILD&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;S = &amp;lt;/math&amp;gt;&amp;amp;#8709;&lt;br /&gt;
 Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Начало цикла от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt;&lt;br /&gt;
     Добавить к &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;SWAP&#039;&#039;:&lt;br /&gt;
 Начало цикла с постусловием &lt;br /&gt;
     Вычислить значения &amp;lt;math&amp;gt;D_{i}, E_{i}&amp;lt;/math&amp;gt; для всех объектов из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычислить пару &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
     Если &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;, то выполнить обмен:&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла с постусловием &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма в соответствии с данной схемой доступа на github[https://github.com/al-pacino/Clustering/blob/master/pam.cpp].&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм &#039;&#039;PAM&#039;&#039; к алгоритмам с квадратичной сложностью по количеству &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Ниже представлены информационные графы для стадий &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;, они хорошо отражают параллельную структуру алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_build.png|thumb|center|600px|Информационный граф выбора медоида стадии &#039;&#039;BUILD&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_swap.png|thumb|center|600px|Информационный граф одной итерации стадии &#039;&#039;SWAP&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходя из предположения неограниченности ресурсов будем считать, что в нашем распоряжении имеется &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер, память каждого из которых целиком содержит матрицу расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; состоит из выбора начального (центрального) медоида и выбора &amp;lt;math&amp;gt;K - 1&amp;lt;/math&amp;gt; оставшихся медоидов. Для выбора медоида требуется вычисления &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;) для всех не выбранных объектов (из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;). Сумму в операции &amp;lt;math&amp;gt;arg\max&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt;) можно считать независимо на разных ядрах, поэтому сложность выбора одного медоида на стадии &#039;&#039;BUILD&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; (сложность вычисления суммы на одном ядре). Выбор одного медоида на стадии &#039;&#039;BUILD&#039;&#039; осуществляется &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; раз, следовательно, сложность параллельной реализации стадии &#039;&#039;BUILD&#039;&#039; (в соответствии с данным описанием) будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;. Также стоит отметить, что для выполнения стадии &#039;&#039;BUILD&#039;&#039; описанным выше образом, достаточно задействовать лишь &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, а не &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проведём аналогичные рассуждения для одной итерации стадии &#039;&#039;SWAP&#039;&#039;. Выполнение одной итерации требует вычисления &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; для каждой пары медоида и объекта. Сумму в операции &amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt; можно считать независимо на разных ядрах, поэтому сложность одной итерации стадии &#039;&#039;SWAP&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; если задействовать &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер. Если в нашем распоряжении есть только &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, то сложность операции одной итерации стадии &#039;&#039;SWAP&#039;&#039; будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведённых рассуждений можно сделать вывод о том, что сложность параллельной реализации алгоритма является линейной по числу объектов кластеризации &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt; против квадратичной сложности &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; в последовательном случае.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица расстояния (в смысле непохожести) между объектами кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности в предположении о неограниченности ресурсов в описанном выше случае является линейным (отношение квадратичной сложности к линейной).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные достоинства алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&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;
&#039;&#039;&#039;Основные недостатки алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
* Необходимо задание требуемого числа кластеров&lt;br /&gt;
* Квадратичную вычислительная сложность&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Срок сдачи продлён до 15-го ноября.&#039;&#039;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете ClusterR на языке R:&lt;br /&gt;
#* Лицензия: MIT&lt;br /&gt;
#* [https://cran.r-project.org/package=ClusterR веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;Cluster_Medoids&#039;. Отличительная особенность реализации &amp;lt;ref&amp;gt;Lampros Mouselimis [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;ClusterR&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** для задания метрики между элементами кластеризуемого множества передаётся строка, задающая одну из реализованных в алгоритме метрик. Данный подход теряет одно из преимуществ алгоритма PAM, позволяющее в качестве матрицы расстояний использовать произвольную матрицу различий.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете Cluster на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥2)&lt;br /&gt;
#* [https://cran.r-project.org/package=cluster веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;pam()&#039;. Данная реализация имеет следующие особенности &amp;lt;ref&amp;gt;Martin Maechler., etc. [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;cluster&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** функция может принимать на вход не множество точек, а матрицу расстояний между ними;&lt;br /&gt;
#** реализация более гибкая, так как принимает на вход матрицу различий элементов, а не использует какую-либо метрику;&lt;br /&gt;
#** может быть предоставлено графическое отображение.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM в пакете SPRINT (Simple Parallel R INTerface - параллельный фреймворк) на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥3)&lt;br /&gt;
#* [https://cran.r-project.org/package=sprint веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в фукции &#039;ppam()&#039;. Входные параметры данной функции схожи с параметрами, задаваемыми в линейной реализации &#039;pam()&#039; пакета Cluster языка R. Отличительной особенностью является подача на вход предвычисленной матрицы расстояний (например, с помощью функции &#039;pcor()&#039; из этой же библиотеки).&amp;lt;ref&amp;gt;University of Edinburgh SPRINT Team. [https://cran.r-project.org/web/packages/sprint/sprint.pdf Package &#039;sprint&#039;]. February 20, 2015&amp;lt;/ref&amp;gt;&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM на основе операций MapReduce на Hadoop кластере.&lt;br /&gt;
#* В рамках исследования по ускорению анализа информации о геноме были созданы реализации алгоритма PAM с использованием технологии MPI и технологии MapReduce. Реализация в открытом досупе отсутствует. &amp;lt;ref&amp;gt;[Dobrzelecki B. et al. Managing and analysing Genomic Data using HPC and Clouds //Grid and Cloud Database Management. – Springer Berlin Heidelberg, 2011. – С. 261-277.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11204</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=11204"/>
		<updated>2016-10-15T18:53:11Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
{{Assignment}}&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; (Partitioning Around Medoids) был предложен Чарли Кауфаманом (Charlie Kaufman) и Питером Русивом (Peter Rousseeuw) в 1987&amp;lt;ref&amp;gt;Kaufman, L. and P.J. Rousseeuw, Clustering by means of medoids, in: Y. Dodge (Ed.), Statistical Data Analysis based on the L1 Norm (North-Holland, Amsterdam, 1987) 405 — 416.&amp;lt;/ref&amp;gt;. Алгоритм является одним из распространённых вариантов реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PAM&#039;&#039; используется для выполнения кластеризации[https://en.wikipedia.org/wiki/Hierarchical_clustering] объектов — процесса автоматического разбиения некоторого множества объектов на кластеры (множества) на основе их схожести (наиболее схожие объекты, как правило, располагаются в одном кластере). В качестве исходных данных алгоритму необходима симметрическая матрица с нолями на главной диагонали (dissimilarity matrix), задающая расстояние (в смысле похожести) между объектами, для которых выполняется кластеризация и число кластеров, по которым следует распределить объекты. Стоит отметить, что не все алгоритмы кластеризации требует задания количества кластеров, например, методы иерархической[https://en.wikipedia.org/wiki/Hierarchical_clustering] кластеризации свободны от данного ограничения.&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;PAM&#039;&#039; для каждого кластера в качестве его характерного представителя выбирает наиболее подходящий из объектов кластеризации. Выбранные объекты называются медоидами (medoids). Алгоритм состоит из двух стадий. Первая стадия – &#039;&#039;BUILD&#039;&#039; предназначена для выбора исходного множества медоидов. Вторая стадия – &#039;&#039;SWAP&#039;&#039; является итерационной. На каждой итерации стадии &#039;&#039;SWAP&#039;&#039; алгоритм пытается улучшить выбранное множество медоидов с помощью выполнения операции &#039;&#039;обмена&#039;&#039;, которая представляет собой замену одного медоида на один из объектов кластеризации. Алгоритм завершает свою работу, когда ни один из возможных обменов не позволяет улучшить разбиение на кластеры. Часто на практике, условием завершения работы алгоритма также является момент, когда наилучшее возможное улучшение кластеризации меньше заранее выбранной пороговой величины. Введение данной величины позволяет сократить число итераций. Последнее, однако, снижает качество кластеризации (иногда незначительно).&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В качестве исходных данных алгоритм принимает:&lt;br /&gt;
* Симметрическую матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до каждого из остальных объектов&lt;br /&gt;
* Требуемое число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. Все медоиды относится к разных кластерам и являются их характерными представителями. Кластеры остальных объектов (не медоидов) совпадают с кластером ближайшего к ним медоида. Ближайший к &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-му объекту медоид будем коротко назвать медоидом &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта. Выбор медоидов осуществляется исходя из минимизации среднего расстояния (average dissimilarity) между объектами внутри одного кластера. От минимизации среднего расстояния можно перейти к минимизации суммы расстояний от объектов до их медоидов. Такой переход не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления. Стоит отметить, что в общем случае расстояние между объектами следует понимать как меру похожести (similarity) объектов.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение расстояния от &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта до его медоида, в результате &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект&lt;br /&gt;
&lt;br /&gt;
Под &#039;&#039;обменом&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида на &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект будем понимать операцию, в результате которой &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й медоид перестаёт быть медоидом, а &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект выбирается в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp; = S - \{i\} + \{h\} \\&lt;br /&gt;
U &amp;amp; = U - \{h\} + \{i\}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто. Описание значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления будет дано при описании макроструктуры алгоритма.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, сумма расстояний от которого до всех остальных объектов минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения &#039;&#039;обмена&#039;&#039;. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. В противном случае дальнейшее улучшение кластеризации с помощью &#039;&#039;обмена&#039;&#039; невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов. Как было сказано &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й объект лежит в том же кластере, что и его медоид: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для описания значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; и способа их вычисления введём следующие обозначения (в дополнение к обозначениям, введённым в математическом описании алгоритма):&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любых объектов верно неравенство &amp;lt;math&amp;gt;D_{i} &amp;lt;= E_{i}&amp;lt;/math&amp;gt;. Отметим также, что значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут меняться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, следовательно они должны пересчитываться после добавления нового медоида или выполнения операции &#039;&#039;обмена&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; представляет собой число, на которое уменьшается значение &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида. Очевидно, что данное значение всегда неотрицательно. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом случае, когда &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{ij}&amp;lt;/math&amp;gt;, величина &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; не изменится, т.к. ближайший к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоид останется на том же расстоянии от него, следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = 0&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{ij}&amp;lt;/math&amp;gt;, ближайшим к &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-му объекту медоидом станет новый выбранный медоид (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-ый объект), следовательно будет справедливо равенство &amp;lt;math&amp;gt;C_{ij} = D_{j} - d_{ij}&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Cij.png|thumb|center|300px|Вычисление значения &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; представляет собой число, которое добавляется к значению &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; в результате выполнения операции &#039;&#039;обмена&#039;&#039; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го медоида и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта. Для вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; следует рассмотреть два случая. В первом  случае, когда &amp;lt;math&amp;gt;D_{j} = d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) может быть два варианта: &amp;lt;math&amp;gt;E_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет второго ближайший к нему медоид), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = E_{j} - D_{j}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Во втором случае, когда &amp;lt;math&amp;gt;D_{j} != d_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) также может быть два варианта: &amp;lt;math&amp;gt;D_{j} &amp;lt;= d_{jh}&amp;lt;/math&amp;gt; (медоид &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта не изменится), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;D_{j} &amp;gt; d_{jh}&amp;lt;/math&amp;gt; (медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта станет &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-й объект), тогда справедливо равенство &amp;lt;math&amp;gt;T_{ijh} = d_{jh} - D_{j}&amp;lt;/math&amp;gt;. Таким образом, в первом случае (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) значение &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; может быть вычислено по формуле &amp;lt;math&amp;gt;T_{ijh} = min(E_{j}, d_{jh}) - D_{j}&amp;lt;/math&amp;gt;, а во втором (&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект НЕ является медоидом &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта) – по формуле &amp;lt;math&amp;gt;T_{ijh} = min(d_{jh} - D_{j}, 0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[file:PAM_Tijh.png|thumb|center|550px|Вычисление значения &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с математическим описанием алгоритм включает две стадии &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;. Рассмотрим реализацию каждой стадии. При описании реализации последовательного алгоритма на псевдокоде будем считать, что в программе поддерживаются следующие переменные:&lt;br /&gt;
 &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt; – расстояние между &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-м и &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-м объектами&lt;br /&gt;
 &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; – требуемое число кластеров&lt;br /&gt;
 &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt; – множество всех объектов&lt;br /&gt;
 &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество медоидов&lt;br /&gt;
 &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество всех объектов, кроме медоидов &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до его медоида&lt;br /&gt;
 &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – расстояние от &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта до второго ближайшего к нему медоида&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; необходимо поддерживать для вычисления значений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;BUILD&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;S = &amp;lt;/math&amp;gt;&amp;amp;#8709;&lt;br /&gt;
 Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Начало цикла от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt;&lt;br /&gt;
     Добавить к &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;U = O - S&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Реализация стадии &#039;&#039;SWAP&#039;&#039;:&lt;br /&gt;
 Начало цикла с постусловием &lt;br /&gt;
     Вычислить значения &amp;lt;math&amp;gt;D_{i}, E_{i}&amp;lt;/math&amp;gt; для всех объектов из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычислить пару &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
     Если &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;, то выполнить обмен:&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;&lt;br /&gt;
         Добавить в &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и убрать объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;&lt;br /&gt;
 Конец цикла с постусловием &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh} &amp;lt; 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма в соответствии с данной схемой доступа на github[https://github.com/al-pacino/Clustering/blob/master/pam.cpp].&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм &#039;&#039;PAM&#039;&#039; к алгоритмам с квадратичной сложностью по количеству &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Ниже представлены информационные графы для стадий &#039;&#039;BUILD&#039;&#039; и &#039;&#039;SWAP&#039;&#039;, они хорошо отражают параллельную структуру алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_build.png|thumb|center|600px|Информационный граф выбора медоида стадии &#039;&#039;BUILD&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
[[file:PAM_graph_swap.png|thumb|center|600px|Информационный граф одной итерации стадии &#039;&#039;SWAP&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходя из предположения неограниченности ресурсов будем считать, что в нашем распоряжении имеется &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер, память каждого из которых целиком содержит матрицу расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; состоит из выбора начального (центрального) медоида и выбора &amp;lt;math&amp;gt;K - 1&amp;lt;/math&amp;gt; оставшихся медоидов. Для выбора медоида требуется вычисления &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min_{i \in U} \sum_{j \in U} d_{ij}&amp;lt;/math&amp;gt;) для всех не выбранных объектов (из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;). Сумму в операции &amp;lt;math&amp;gt;arg\max&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt;) можно считать независимо на разных ядрах, поэтому сложность выбора одного медоида на стадии &#039;&#039;BUILD&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; (сложность вычисления суммы на одном ядре). Выбор одного медоида на стадии &#039;&#039;BUILD&#039;&#039; осуществляется &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; раз, следовательно, сложность параллельной реализации стадии &#039;&#039;BUILD&#039;&#039; (в соответствии с данным описанием) будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;. Также стоит отметить, что для выполнения стадии &#039;&#039;BUILD&#039;&#039; описанным выше образом, достаточно задействовать лишь &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, а не &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проведём аналогичные рассуждения для одной итерации стадии &#039;&#039;SWAP&#039;&#039;. Выполнение одной итерации требует вычисления &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; для каждой пары медоида и объекта. Сумму в операции &amp;lt;math&amp;gt;arg\min&amp;lt;/math&amp;gt; можно считать независимо на разных ядрах, поэтому сложность одной итерации стадии &#039;&#039;SWAP&#039;&#039; можно сократить с &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt; если задействовать &amp;lt;math&amp;gt;N * K&amp;lt;/math&amp;gt; вычислительных ядер. Если в нашем распоряжении есть только &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вычислительных ядер, то сложность операции одной итерации стадии &#039;&#039;SWAP&#039;&#039; будет равна &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведённых рассуждений можно сделать вывод о том, что сложность параллельной реализации алгоритма является линейной по числу объектов кластеризации &amp;lt;math&amp;gt;O(K * N)&amp;lt;/math&amp;gt; против квадратичной сложности &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt; в последовательном случае.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица расстояния (в смысле непохожести) между объектами кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности в предположении о неограниченности ресурсов в описанном выше случае является линейным (отношение квадратичной сложности к линейной).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Основные достоинства алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&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;
&#039;&#039;&#039;Основные недостатки алгоритма &#039;&#039;PAM&#039;&#039;&#039;&#039;&#039;:&lt;br /&gt;
* Необходимо задание требуемого числа кластеров&lt;br /&gt;
* Квадратичную вычислительная сложность&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Срок сдачи продлён до 15-го ноября.&#039;&#039;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете ClusterR на языке R:&lt;br /&gt;
#* Лицензия: MIT&lt;br /&gt;
#* [https://cran.r-project.org/package=ClusterR веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;Cluster_Medoids&#039;. Отличительная особенность реализации &amp;lt;ref&amp;gt;Lampros Mouselimis [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;ClusterR&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** для задания метрики между элементами кластеризуемого множества передаётся строка, задающая одну из реализованных в алгоритме метрик. Данный подход теряет одно из преимуществ алгоритма PAM, позволяющее в качестве матрицы расстояний использовать произвольную матрицу различий.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Последовательная реализация алгоритма PAM в пакете Cluster на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥2)&lt;br /&gt;
#* [https://cran.r-project.org/package=cluster веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в функции &#039;pam()&#039;. Данная реализация имеет следующие особенности &amp;lt;ref&amp;gt;Martin Maechler., etc. [https://cran.r-project.org/web/packages/cluster/cluster.pdf Package &#039;cluster&#039;]. October 8, 2016&amp;lt;/ref&amp;gt;:&lt;br /&gt;
#** функция может принимать на вход не множество точек, а матрицу расстояний между ними;&lt;br /&gt;
#** реализация более гибкая, так как принимает на вход матрицу различий элементов, а не использует какую-либо метрику;&lt;br /&gt;
#** может быть предоставлено графическое отображение.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM в пакете SPRINT (Simple Parallel R INTerface - параллельный фреймворк) на языке R:&lt;br /&gt;
#* Лицензия: GPL (≥3)&lt;br /&gt;
#* [https://cran.r-project.org/package=sprint веб-страница фреймворка (исходный код, системные требования и справочное руководство)]&lt;br /&gt;
#* Алгоритм PAM реализован в фукции &#039;ppam()&#039;. Входные параметры данной функции схожи с параметрами, задаваемыми в линейной реализации &#039;pam()&#039; пакета Cluster языка R. Отличительной особенностью является подача на вход предвычисленной матрицы расстояний (например, с помощью функции &#039;pcor()&#039; из этой же библиотеки).&amp;lt;ref&amp;gt;University of Edinburgh SPRINT Team. [https://cran.r-project.org/web/packages/sprint/sprint.pdf Package &#039;sprint&#039;]. February 20, 2015&amp;lt;/ref&amp;gt;&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
# Параллельная реализация алгоритма PAM на основе операций MapReduce на Hadoop кластере.&lt;br /&gt;
#* В рамках исследования по ускорению анализа информации о геноме были созданы реализации алгоритма PAM с использованием технологии MPI и технологии MapReduce. Реализация в открытом досупе отсутствует. &amp;lt;ref&amp;gt;[Dobrzelecki B. et al. Managing and analysing Genomic Data using HPC and Clouds //Grid and Cloud Database Management. – Springer Berlin Heidelberg, 2011. – С. 261-277.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0_%D0%AE%D0%BB%D0%B8%D1%8F&amp;diff=11200</id>
		<title>Участник:Гусева Юлия</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0_%D0%AE%D0%BB%D0%B8%D1%8F&amp;diff=11200"/>
		<updated>2016-10-15T18:51:48Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Заведение:МГУ&lt;br /&gt;
&lt;br /&gt;
Факультет:ВМК&lt;br /&gt;
&lt;br /&gt;
Форма обучения:магистратура&lt;br /&gt;
&lt;br /&gt;
Курс:2&lt;br /&gt;
&lt;br /&gt;
Учебная группа:611&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0_%D0%AE%D0%BB%D0%B8%D1%8F&amp;diff=11194</id>
		<title>Участник:Гусева Юлия</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0_%D0%AE%D0%BB%D0%B8%D1%8F&amp;diff=11194"/>
		<updated>2016-10-15T18:50:56Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Заведение:МГУ&lt;br /&gt;
Факультет:ВМК&lt;br /&gt;
Форма обучения:магистратура&lt;br /&gt;
Курс:2&lt;br /&gt;
Учебная группа:611&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0_%D0%AE%D0%BB%D0%B8%D1%8F&amp;diff=11193</id>
		<title>Участник:Гусева Юлия</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%93%D1%83%D1%81%D0%B5%D0%B2%D0%B0_%D0%AE%D0%BB%D0%B8%D1%8F&amp;diff=11193"/>
		<updated>2016-10-15T18:49:12Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: Новая страница: «ВМК МГУ»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ВМК МГУ&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=11189</id>
		<title>Обсуждение участника:Lineprinter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=11189"/>
		<updated>2016-10-15T18:48:11Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Перенос */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
Статья: [[Кластеризация сетями Кохонена]]&lt;br /&gt;
Выполняют: [[Участник:Kravtsovkirill| Кравцов Кирилл]] и [[Участник:Emaksimov| Максимов Егор]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение собственных чисел квадратной матрицы методом QR разложения (2)]]&lt;br /&gt;
Выполняют: Баев Олег и Шевелев Александр&lt;br /&gt;
&lt;br /&gt;
Статья: [[Стабилизированный метод биспоряженных градиентов (BiCGSTAB)]]&lt;br /&gt;
Выполняют: Гаврилов Алексей и Новиков Александр&lt;br /&gt;
&lt;br /&gt;
Статья: [[Участники: Бобошко А., Юмакаева А./Решение начальной задачи Коши для системы ОДУ методом Рунге-Кутта 4-го порядка]];&lt;br /&gt;
Выполняют: Бобошко Алексей и Юмакаева Алина&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на сетях Кохоннена]];&lt;br /&gt;
Выполняют:  Логвиненко Александра и Адиев Тохтар&lt;br /&gt;
&lt;br /&gt;
Статья: [[Ортогонализация Грама-Шмидта]];&lt;br /&gt;
Выполняют: [[Участник:KibAndrey| Кибанов Андрей]] и Аджиева Татьяна&lt;br /&gt;
&lt;br /&gt;
Статья: [[Самоорганизующиеся карты Кохонена]];&lt;br /&gt;
Выполняет: [[Участник:Anton goy| Гой Антон]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[ЕМ-алгоритм_(Тематическое_моделирование)]];&lt;br /&gt;
Выполняют: Мурат Апишев и Андрей Заночкин&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_Ланцоша_с_полной_переортогонализацией]];&lt;br /&gt;
Выполняет:[[Участник:Sfedotov| Федотов С.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_k-средних]]&lt;br /&gt;
Выполняют: [[Участник:Error2407|Богомазов Евгений]], [[Участник:Илья_Егоров|Егоров Илья]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм k-means]]&lt;br /&gt;
Выполняют: [[Участник:Бротиковская Данута|Данута Бротиковская]] и [[Участник:DennZo1993|Денис Зобнин]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нечеткий_алгоритм_С_средних]]&lt;br /&gt;
Выполняют: [[Участник:Demon smd|Д.А.Гуськов]], [[Участник:marina abramenkova|М.А.Абраменкова]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка]];&lt;br /&gt;
Выполняют: [[Участник:Алимов_Дамир_Алиевич|Алимов Дамир]] и [[Участник:Anlesnichiy|Антон Лесничий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Строгий_алгоритм_С_средних_(Hard_C-Means,_HCM)]];&lt;br /&gt;
Выполняют: [[Участник:Светлана_Лукьяненко|Лукьяненко Светлана]] и [[Участник:Юрий_Комаров|Комаров Юрий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на минимальном остовном дереве]];&lt;br /&gt;
Выполняет: [[Участник:Astandrik | Стандрик Антон Сергеевич]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Умножение разреженной матрицы на вектор]];&lt;br /&gt;
Выполняет: [[Участник:Lexaloris | Новоселов Алексей]], Выполняет: [[Участник:pahom | Кочетков Павел]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений]];&lt;br /&gt;
Выполняют: [[Участник:Cookie|Шатков С.А.]], [[Участница:JuliaA|Антохина Ю.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_преобразование_Фурье_(FFT)|Быстрое преобразование Фурье (FFT)]];&lt;br /&gt;
Выполняют: [[Участник:Victoria_Stepanischeva|Степанищева Виктория]] и [[Участник:Igor_Munkin|Мунькин Игорь]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_дискретное_преобразование_Фурье|Быстрое_дискретное_преобразование_Фурье]];&lt;br /&gt;
Выполняют: [[Участник:ivanov.kir.m | К.М.Иванов]], [[Участник:Pumpkin | А.C.Сапин]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_средних]]&lt;br /&gt;
Выполняют: [[Участник:Parkhomenko|Пархоменко Павел]], [[Участник:ivan.mashonskiy|Машонский Иван]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[EM-алгоритм_кластеризации]]&lt;br /&gt;
Выполняет: [[Участник:Noite|Зинченко Дмитрий]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_means]]&lt;br /&gt;
Выполняют: [[Участник:IanaV| Валуйская Яна]], [[Участник:GlotovES| Глотов Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы ЗП |Метод Якоби вычисления собственных значений симметричной матрицы ЗП]];&lt;br /&gt;
Выполняют: [[Участник:Зиновьев Владимир|Зиновьев В.С.]], [[Участник:Пронин Андрей|Пронин А.М.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_кластеризации,_основанный_на_минимальном_покрывающем_дереве]]&lt;br /&gt;
Выполняет: [[Участник:Kanast74|Дмитриева Анастасия]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(4)]]&lt;br /&gt;
Выполняют: [[Участник:F-morozov|Морозов Ф. В.]], [[Участник:Nataliya|Пащенко Н. Ф.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Хранение_ненулевых_элементов_разреженных_матриц._Умножение_разреженной_матрицы_на_вектор]];&lt;br /&gt;
Выполняют: [[Участник:Trrufina|Третьякова Р.М.]] и [[Участник:Екатерина_Буторина|Буторина Е.В.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений2]];&lt;br /&gt;
Выполняет: [[Участник:Лукьянова Анна|Лукьянова А.Я.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы]];&lt;br /&gt;
Выполняют: [[Участник: Galkina|Галкина А.С.]], [[Участник: Игорь|Плахов И.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод рекурсивной координатной бисекции]];&lt;br /&gt;
Выполняют: [[Участник: Obirvalger|Гордеев Михаил]], [[Участник: KolmakovEA|Колмаков Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)]];&lt;br /&gt;
Выполняют: [[Участник: Эльвира Ахиярова|Ахиярова Эльвира]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Хранение ненулевых элементов разреженной матрицы. Умножение разреженной матрицы на вектор]];&lt;br /&gt;
Выполняют: [[Участник: Janyell|Сычева Евгения]], [[Участник: Ahahalin|Хахалин Анатолий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Построение матрицы Адамара произвольного размера]];&lt;br /&gt;
Выполняют: [[Участник: Бугаков Юрий|Бугаков Юрий]], Кужамалиев Ернур&lt;br /&gt;
&lt;br /&gt;
Статья: [[Вычисление определенного интеграла с использованием адаптивно сгущающейся сетки (1)]]&lt;br /&gt;
Выполняют: [[Участница:Sannikovats| Санникова Татьяна Сергеевна]], [[Участник:Plukshin| Лукшин Петр Андреевич]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на построении каркаса]];&lt;br /&gt;
Выполняют: [[Участник:SenderovichNikita| Сендерович Никита]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на максимизации ожидания]];&lt;br /&gt;
Выполняют: Готман Мария, Лукашкина Юлия&lt;br /&gt;
&lt;br /&gt;
Статья: [[Partitioning_Around_Medoids_(PAM)]]&lt;br /&gt;
Выполняют: [[Участник:Avasilenko|А.Э.Василенко]], [[Участник:Anastasia|А.В.Тузикова]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нечеткий алгоритм С-средних (Fuzzy C-means)]]&lt;br /&gt;
Выполняют: [[Участник:Nikmedoed|Н.А. Муромцев]], [[Участник:illusive_mike|М.С. Дворецкий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нечеткий алгоритм C средних]]&lt;br /&gt;
Выполняют: [[Участник:Gkhazeeva|Гелана Хазеева]], [[Участник:Yushin|Павел Юшин]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Плотностный алгоритм кластеризации DBSCAN]]&lt;br /&gt;
Выполняют: [[Участник:Elena777mc|Малахова Е.С.]], [[Участник:Жаннат_Сагиолданова|Сагиолданова Ж.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Кластеризация Partitioning Around Medoids (PAM)]]&lt;br /&gt;
Выполняют:[[ Участник:Тодуа Антон| Тодуа Антон]], [[Участник:Гусева Юлия| Гусева Юлия]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=11177</id>
		<title>Обсуждение участника:Lineprinter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=11177"/>
		<updated>2016-10-15T18:44:56Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Перенос */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
Статья: [[Кластеризация сетями Кохонена]]&lt;br /&gt;
Выполняют: [[Участник:Kravtsovkirill| Кравцов Кирилл]] и [[Участник:Emaksimov| Максимов Егор]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение собственных чисел квадратной матрицы методом QR разложения (2)]]&lt;br /&gt;
Выполняют: Баев Олег и Шевелев Александр&lt;br /&gt;
&lt;br /&gt;
Статья: [[Стабилизированный метод биспоряженных градиентов (BiCGSTAB)]]&lt;br /&gt;
Выполняют: Гаврилов Алексей и Новиков Александр&lt;br /&gt;
&lt;br /&gt;
Статья: [[Участники: Бобошко А., Юмакаева А./Решение начальной задачи Коши для системы ОДУ методом Рунге-Кутта 4-го порядка]];&lt;br /&gt;
Выполняют: Бобошко Алексей и Юмакаева Алина&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на сетях Кохоннена]];&lt;br /&gt;
Выполняют:  Логвиненко Александра и Адиев Тохтар&lt;br /&gt;
&lt;br /&gt;
Статья: [[Ортогонализация Грама-Шмидта]];&lt;br /&gt;
Выполняют: [[Участник:KibAndrey| Кибанов Андрей]] и Аджиева Татьяна&lt;br /&gt;
&lt;br /&gt;
Статья: [[Самоорганизующиеся карты Кохонена]];&lt;br /&gt;
Выполняет: [[Участник:Anton goy| Гой Антон]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[ЕМ-алгоритм_(Тематическое_моделирование)]];&lt;br /&gt;
Выполняют: Мурат Апишев и Андрей Заночкин&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_Ланцоша_с_полной_переортогонализацией]];&lt;br /&gt;
Выполняет:[[Участник:Sfedotov| Федотов С.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_k-средних]]&lt;br /&gt;
Выполняют: [[Участник:Error2407|Богомазов Евгений]], [[Участник:Илья_Егоров|Егоров Илья]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм k-means]]&lt;br /&gt;
Выполняют: [[Участник:Бротиковская Данута|Данута Бротиковская]] и [[Участник:DennZo1993|Денис Зобнин]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нечеткий_алгоритм_С_средних]]&lt;br /&gt;
Выполняют: [[Участник:Demon smd|Д.А.Гуськов]], [[Участник:marina abramenkova|М.А.Абраменкова]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка]];&lt;br /&gt;
Выполняют: [[Участник:Алимов_Дамир_Алиевич|Алимов Дамир]] и [[Участник:Anlesnichiy|Антон Лесничий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Строгий_алгоритм_С_средних_(Hard_C-Means,_HCM)]];&lt;br /&gt;
Выполняют: [[Участник:Светлана_Лукьяненко|Лукьяненко Светлана]] и [[Участник:Юрий_Комаров|Комаров Юрий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на минимальном остовном дереве]];&lt;br /&gt;
Выполняет: [[Участник:Astandrik | Стандрик Антон Сергеевич]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Умножение разреженной матрицы на вектор]];&lt;br /&gt;
Выполняет: [[Участник:Lexaloris | Новоселов Алексей]], Выполняет: [[Участник:pahom | Кочетков Павел]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений]];&lt;br /&gt;
Выполняют: [[Участник:Cookie|Шатков С.А.]], [[Участница:JuliaA|Антохина Ю.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_преобразование_Фурье_(FFT)|Быстрое преобразование Фурье (FFT)]];&lt;br /&gt;
Выполняют: [[Участник:Victoria_Stepanischeva|Степанищева Виктория]] и [[Участник:Igor_Munkin|Мунькин Игорь]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_дискретное_преобразование_Фурье|Быстрое_дискретное_преобразование_Фурье]];&lt;br /&gt;
Выполняют: [[Участник:ivanov.kir.m | К.М.Иванов]], [[Участник:Pumpkin | А.C.Сапин]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_средних]]&lt;br /&gt;
Выполняют: [[Участник:Parkhomenko|Пархоменко Павел]], [[Участник:ivan.mashonskiy|Машонский Иван]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[EM-алгоритм_кластеризации]]&lt;br /&gt;
Выполняет: [[Участник:Noite|Зинченко Дмитрий]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_means]]&lt;br /&gt;
Выполняют: [[Участник:IanaV| Валуйская Яна]], [[Участник:GlotovES| Глотов Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы ЗП |Метод Якоби вычисления собственных значений симметричной матрицы ЗП]];&lt;br /&gt;
Выполняют: [[Участник:Зиновьев Владимир|Зиновьев В.С.]], [[Участник:Пронин Андрей|Пронин А.М.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_кластеризации,_основанный_на_минимальном_покрывающем_дереве]]&lt;br /&gt;
Выполняет: [[Участник:Kanast74|Дмитриева Анастасия]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(4)]]&lt;br /&gt;
Выполняют: [[Участник:F-morozov|Морозов Ф. В.]], [[Участник:Nataliya|Пащенко Н. Ф.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Хранение_ненулевых_элементов_разреженных_матриц._Умножение_разреженной_матрицы_на_вектор]];&lt;br /&gt;
Выполняют: [[Участник:Trrufina|Третьякова Р.М.]] и [[Участник:Екатерина_Буторина|Буторина Е.В.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений2]];&lt;br /&gt;
Выполняет: [[Участник:Лукьянова Анна|Лукьянова А.Я.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы]];&lt;br /&gt;
Выполняют: [[Участник: Galkina|Галкина А.С.]], [[Участник: Игорь|Плахов И.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод рекурсивной координатной бисекции]];&lt;br /&gt;
Выполняют: [[Участник: Obirvalger|Гордеев Михаил]], [[Участник: KolmakovEA|Колмаков Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)]];&lt;br /&gt;
Выполняют: [[Участник: Эльвира Ахиярова|Ахиярова Эльвира]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Хранение ненулевых элементов разреженной матрицы. Умножение разреженной матрицы на вектор]];&lt;br /&gt;
Выполняют: [[Участник: Janyell|Сычева Евгения]], [[Участник: Ahahalin|Хахалин Анатолий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Построение матрицы Адамара произвольного размера]];&lt;br /&gt;
Выполняют: [[Участник: Бугаков Юрий|Бугаков Юрий]], Кужамалиев Ернур&lt;br /&gt;
&lt;br /&gt;
Статья: [[Вычисление определенного интеграла с использованием адаптивно сгущающейся сетки (1)]]&lt;br /&gt;
Выполняют: [[Участница:Sannikovats| Санникова Татьяна Сергеевна]], [[Участник:Plukshin| Лукшин Петр Андреевич]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на построении каркаса]];&lt;br /&gt;
Выполняют: [[Участник:SenderovichNikita| Сендерович Никита]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на максимизации ожидания]];&lt;br /&gt;
Выполняют: Готман Мария, Лукашкина Юлия&lt;br /&gt;
&lt;br /&gt;
Статья: [[Partitioning_Around_Medoids_(PAM)]]&lt;br /&gt;
Выполняют: [[Участник:Avasilenko|А.Э.Василенко]], [[Участник:Anastasia|А.В.Тузикова]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нечеткий алгоритм С-средних (Fuzzy C-means)]]&lt;br /&gt;
Выполняют: [[Участник:Nikmedoed|Н.А. Муромцев]], [[Участник:illusive_mike|М.С. Дворецкий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нечеткий алгоритм C средних]]&lt;br /&gt;
Выполняют: [[Участник:Gkhazeeva|Гелана Хазеева]], [[Участник:Yushin|Павел Юшин]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Плотностный алгоритм кластеризации DBSCAN]]&lt;br /&gt;
Выполняют: [[Участник:Elena777mc|Малахова Е.С.]], [[Участник:Жаннат_Сагиолданова|Сагиолданова Ж.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Кластеризация Partitioning Around Medoids (PAM)]]&lt;br /&gt;
Выполняют: [[Участник: Гусева Юлия ]], [[ Участник: Антон Тодуа ]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5388</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5388"/>
		<updated>2016-10-11T14:13:07Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
&lt;br /&gt;
● выделение групп клиентов, покупателей,товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
Очевидно, что спектр применений кластерного анализа очень широк: в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. &lt;br /&gt;
&lt;br /&gt;
По типу обработки данных можно выделить два класса методов кластерного анализа:&lt;br /&gt;
&lt;br /&gt;
Иерархические методы:&lt;br /&gt;
&lt;br /&gt;
Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
&lt;br /&gt;
- CURE;&lt;br /&gt;
&lt;br /&gt;
- ROCK;&lt;br /&gt;
&lt;br /&gt;
- CHAMELEON и т.д.&lt;br /&gt;
&lt;br /&gt;
Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
- BIRCH;&lt;br /&gt;
&lt;br /&gt;
- MST и т.д.&lt;br /&gt;
&lt;br /&gt;
Неиерархические методы.&lt;br /&gt;
&lt;br /&gt;
Итеративные&lt;br /&gt;
&lt;br /&gt;
- k-means&lt;br /&gt;
&lt;br /&gt;
- k-medoids&lt;br /&gt;
&lt;br /&gt;
- CLOPE&lt;br /&gt;
&lt;br /&gt;
- LargeItem и т.д. &lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&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;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов кластеризации)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Ограничения: небольшой объем данных.&lt;br /&gt;
Достоинства: простота использования; быстрота использования; понятность и прозрачность&lt;br /&gt;
алгоритма, алгоритм менее чувствителен к выбросам в сравнении с k-means.&lt;br /&gt;
Недостатки: необходимо задавать количество кластеров; медленная работа на больших базах данных.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5387</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5387"/>
		<updated>2016-10-11T14:08:41Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
&lt;br /&gt;
● выделение групп клиентов, покупателей,товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
Очевидно, что спектр применений кластерного анализа очень широк: в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. &lt;br /&gt;
&lt;br /&gt;
По типу обработки данных можно выделить два класса методов кластерного анализа:&lt;br /&gt;
&lt;br /&gt;
Иерархические методы:&lt;br /&gt;
&lt;br /&gt;
Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
&lt;br /&gt;
- CURE;&lt;br /&gt;
&lt;br /&gt;
- ROCK;&lt;br /&gt;
&lt;br /&gt;
- CHAMELEON и т.д.&lt;br /&gt;
&lt;br /&gt;
Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
- BIRCH;&lt;br /&gt;
&lt;br /&gt;
- MST и т.д.&lt;br /&gt;
&lt;br /&gt;
Неиерархические методы.&lt;br /&gt;
&lt;br /&gt;
Итеративные&lt;br /&gt;
&lt;br /&gt;
- К-средних (k-means)&lt;br /&gt;
&lt;br /&gt;
- PAM (k-means + k-medoids)&lt;br /&gt;
&lt;br /&gt;
- CLOPE&lt;br /&gt;
&lt;br /&gt;
- LargeItem и т.д. &lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В качестве исходных данных алгоритм принимает:&lt;br /&gt;
* Симметрическую матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов кластеризации)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Ограничения: небольшой объем данных.&lt;br /&gt;
Достоинства: простота использования; быстрота использования; понятность и прозрачность&lt;br /&gt;
алгоритма, алгоритм менее чувствителен к выбросам в сравнении с k-means.&lt;br /&gt;
Недостатки: необходимо задавать количество кластеров; медленная работа на больших базах данных.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5386</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5386"/>
		<updated>2016-10-11T14:06:01Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
&lt;br /&gt;
● выделение групп клиентов, покупателей,товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
Очевидно, что спектр применений кластерного анализа очень широк: в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. &lt;br /&gt;
&lt;br /&gt;
По типу обработки данных можно выделить два класса методов кластерного анализа:&lt;br /&gt;
&lt;br /&gt;
Иерархические методы:&lt;br /&gt;
&lt;br /&gt;
Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
&lt;br /&gt;
- CURE;&lt;br /&gt;
&lt;br /&gt;
- ROCK;&lt;br /&gt;
&lt;br /&gt;
- CHAMELEON и т.д.&lt;br /&gt;
&lt;br /&gt;
Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
- BIRCH;&lt;br /&gt;
&lt;br /&gt;
- MST и т.д.&lt;br /&gt;
&lt;br /&gt;
Неиерархические методы.&lt;br /&gt;
&lt;br /&gt;
Итеративные&lt;br /&gt;
&lt;br /&gt;
- К-средних (k-means)&lt;br /&gt;
&lt;br /&gt;
- PAM (k-means + k-medoids)&lt;br /&gt;
&lt;br /&gt;
- CLOPE&lt;br /&gt;
&lt;br /&gt;
- LargeItem и т.д. &lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; (кластеры объектов кластеризации)&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Ограничения: небольшой объем данных.&lt;br /&gt;
Достоинства: простота использования; быстрота использования; понятность и прозрачность&lt;br /&gt;
алгоритма, алгоритм менее чувствителен к выбросам в сравнении с k-means.&lt;br /&gt;
Недостатки: необходимо задавать количество кластеров; медленная работа на больших базах данных.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5385</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5385"/>
		<updated>2016-10-11T14:04:44Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
&lt;br /&gt;
● выделение групп клиентов, покупателей,товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
Очевидно, что спектр применений кластерного анализа очень широк: в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. &lt;br /&gt;
&lt;br /&gt;
По типу обработки данных можно выделить два класса методов кластерного анализа:&lt;br /&gt;
&lt;br /&gt;
Иерархические методы:&lt;br /&gt;
&lt;br /&gt;
Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
&lt;br /&gt;
- CURE;&lt;br /&gt;
&lt;br /&gt;
- ROCK;&lt;br /&gt;
&lt;br /&gt;
- CHAMELEON и т.д.&lt;br /&gt;
&lt;br /&gt;
Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
- BIRCH;&lt;br /&gt;
&lt;br /&gt;
- MST и т.д.&lt;br /&gt;
&lt;br /&gt;
Неиерархические методы.&lt;br /&gt;
&lt;br /&gt;
Итеративные&lt;br /&gt;
&lt;br /&gt;
- К-средних (k-means)&lt;br /&gt;
&lt;br /&gt;
- PAM (k-means + k-medoids)&lt;br /&gt;
&lt;br /&gt;
- CLOPE&lt;br /&gt;
&lt;br /&gt;
- LargeItem и т.д. &lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5384</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5384"/>
		<updated>2016-10-11T14:04:12Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
&lt;br /&gt;
● выделение групп клиентов, покупателей,товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
Очевидно, что спектр применений кластерного анализа очень широк: в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. &lt;br /&gt;
&lt;br /&gt;
По типу обработки данных можно выделить два класса методов:&lt;br /&gt;
&lt;br /&gt;
Иерархические методы:&lt;br /&gt;
&lt;br /&gt;
Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
&lt;br /&gt;
- CURE;&lt;br /&gt;
&lt;br /&gt;
- ROCK;&lt;br /&gt;
&lt;br /&gt;
- CHAMELEON и т.д.&lt;br /&gt;
&lt;br /&gt;
Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
- BIRCH;&lt;br /&gt;
&lt;br /&gt;
- MST и т.д.&lt;br /&gt;
&lt;br /&gt;
Неиерархические методы.&lt;br /&gt;
&lt;br /&gt;
Итеративные&lt;br /&gt;
&lt;br /&gt;
- К-средних (k-means)&lt;br /&gt;
&lt;br /&gt;
- PAM (k-means + k-medoids)&lt;br /&gt;
&lt;br /&gt;
- CLOPE&lt;br /&gt;
&lt;br /&gt;
- LargeItem и т.д. &lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5382</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5382"/>
		<updated>2016-10-11T14:00:51Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
&lt;br /&gt;
● выделение групп клиентов, покупателей,товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
Очевидно, что спектр применений кластерного анализа очень широк: в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. &lt;br /&gt;
&lt;br /&gt;
По типу обработки данных можно выделить два класса методов:&lt;br /&gt;
&lt;br /&gt;
Иерархические методы:&lt;br /&gt;
&lt;br /&gt;
    Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
&lt;br /&gt;
    - CURE;&lt;br /&gt;
&lt;br /&gt;
    - ROCK;&lt;br /&gt;
&lt;br /&gt;
    - CHAMELEON и т.д.&lt;br /&gt;
&lt;br /&gt;
   Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
    - BIRCH;&lt;br /&gt;
&lt;br /&gt;
    - MST и т.д.&lt;br /&gt;
&lt;br /&gt;
Неиерархические методы.&lt;br /&gt;
&lt;br /&gt;
   Итеративные&lt;br /&gt;
   - К-средних (k-means)&lt;br /&gt;
   - PAM (k-means + k-medoids)&lt;br /&gt;
   - CLOPE&lt;br /&gt;
   - LargeItem и т.д. &lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5379</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5379"/>
		<updated>2016-10-11T13:48:29Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&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;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5368</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5368"/>
		<updated>2016-10-11T13:37:11Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
&lt;br /&gt;
● сегментация изображений — компьютерная графика&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;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5367</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5367"/>
		<updated>2016-10-11T13:35:51Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
//● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&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;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5366</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5366"/>
		<updated>2016-10-11T13:35:21Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
В этом небольшом наборе данных четко выделяются две различные группы объектов,а именно: {1, 2, 3} и (4, 5, 6}. Такие группы и называются кластерами, и обнаружить их является целью кластерного анализа.&lt;br /&gt;
Таким образом, у кластера можно выделить два признака&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&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;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5343</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5343"/>
		<updated>2016-10-11T12:31:57Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5342</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5342"/>
		<updated>2016-10-11T12:31:25Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл:QWERTY.JPG]]&lt;br /&gt;
[[Файл: QWERTY.JPG |thumb|center|1400px|Рисунок 1. Граф алгоритма без отображения входных и выходных данных. SQ - вычисление квадратного корня, F - операция a-bc, Div - деление.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5341</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5341"/>
		<updated>2016-10-11T12:31:13Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл:QWERTY.JPG]]&lt;br /&gt;
[[Файл: QWERTY.jpg |thumb|center|1400px|Рисунок 1. Граф алгоритма без отображения входных и выходных данных. SQ - вычисление квадратного корня, F - операция a-bc, Div - деление.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5340</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5340"/>
		<updated>2016-10-11T12:29:49Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
[[Файл:QWERTY.jpg]]&lt;br /&gt;
[[Файл: QWERTY.jpg |thumb|center|1400px|Рисунок 1. Граф алгоритма без отображения входных и выходных данных. SQ - вычисление квадратного корня, F - операция a-bc, Div - деление.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5339</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5339"/>
		<updated>2016-10-11T12:29:03Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
&lt;br /&gt;
[[Файл: QWERTY.jpg |thumb|center|1400px|Рисунок 1. Граф алгоритма без отображения входных и выходных данных. SQ - вычисление квадратного корня, F - операция a-bc, Div - деление.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5338</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5338"/>
		<updated>2016-10-11T12:27:54Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
&lt;br /&gt;
[[file: QWERTY.jpg |thumb|center|1400px|Рисунок 1. Граф алгоритма без отображения входных и выходных данных. SQ - вычисление квадратного корня, F - операция a-bc, Div - деление.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5337</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5337"/>
		<updated>2016-10-11T12:27:32Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
&lt;br /&gt;
[[file: QWERTY.jpeg|thumb|center|1400px|Рисунок 1. Граф алгоритма без отображения входных и выходных данных. SQ - вычисление квадратного корня, F - операция a-bc, Div - деление.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</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:QWERTY.JPG&amp;diff=5336</id>
		<title>Файл:QWERTY.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:QWERTY.JPG&amp;diff=5336"/>
		<updated>2016-10-11T12:27:06Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5335</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5335"/>
		<updated>2016-10-11T12:25:34Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Кластеризация – это процесс автоматического разбиения некоторого множества элементов на группы(кластеры) на основе степени их схожести.&lt;br /&gt;
Для лучшего осознания, что такое кластер, рассмотрим пример.&lt;br /&gt;
&lt;br /&gt;
[[file:C:\Documents and Settings\h638\Рабочий стол\QWERTY.jpeg|thumb|center|1400px|Рисунок 1. Граф алгоритма без отображения входных и выходных данных. SQ - вычисление квадратного корня, F - операция a-bc, Div - деление.]]&lt;br /&gt;
&lt;br /&gt;
Характеристиками кластера можно назвать два признака:&lt;br /&gt;
● внутренняя однородность;&lt;br /&gt;
● внешняя изолированность.&lt;br /&gt;
&lt;br /&gt;
Большинство исследователей (см., напр.,[5]) склоняются к тому, что впервые термин «кластерный анализ» (англ. cluster — гроздь, сгусток, пучок) был предложен математиком Р. Трионом[6]. Впоследствии возник ряд терминов, которые в настоящее время принято считать синонимами термина «кластерный анализ»: автоматическая классификация, ботриология.&lt;br /&gt;
&lt;br /&gt;
Спектр применений кластерного анализа очень широк: его используют в археологии, медицине, психологии, химии, биологии, государственном управлении, филологии, антропологии, маркетинге, социологии и других дисциплинах. Однако универсальность применения привела к появлению большого количества несовместимых терминов, методов и подходов, затрудняющих однозначное использование и непротиворечивую интерпретацию кластерного анализа.&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
PAM (Partitioning Around Medoids, 1987)&lt;br /&gt;
• CLARA (Kaufmann &amp;amp; Rousseeuw, 1990)&lt;br /&gt;
• CLARANS (Ng &amp;amp; Han, 1994): Randomized sampling &lt;br /&gt;
&lt;br /&gt;
The PAM (Partioning Around Medoids) algorithm, also&lt;br /&gt;
called the K-medoids algorithm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● Группировка объектов&lt;br /&gt;
● Распознавание образов&lt;br /&gt;
● Выявление структуры данных&lt;br /&gt;
● Сжатие данных&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для чего используется кластеризация?&lt;br /&gt;
● классификация результатов поиска (nigma, yippy,quintura)&lt;br /&gt;
● автоматическое построение каталогов&lt;br /&gt;
● работа только с несколькими представителями кластеров&lt;br /&gt;
● сегментация изображений — компьютерная графика&lt;br /&gt;
● кластеризация документов, таблиц и др.данных&lt;br /&gt;
● маркетинг — выделение групп клиентов, покупателей,&lt;br /&gt;
товаров для разработки отдельных стратегий&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дано:&lt;br /&gt;
множество входной набор данных&lt;br /&gt;
k — количество кластеров&lt;br /&gt;
Найти:разбиение множества на кластеры&lt;br /&gt;
&lt;br /&gt;
Этапы кластеризации (общий алгоритм)&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;math&amp;gt;D&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; с нолями на главной диагонали для &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации: &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я строка матрицы &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определяет непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта кластеризации на все остальные объекты&lt;br /&gt;
* Число кластеров &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, при этом: &amp;lt;math&amp;gt;K &amp;lt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выбирает &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. При этом выбор медоидов осуществляется исходя из минимизации средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. От минимизации средней непохожести можно перейти к минимизации суммы непохожестей объектов на ближайший к ним медоид, т.к. это не повлияет на выбор медоидов, но позволит не накапливать ошибки округления, возникающие в результате операции деления.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
* &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; – изменение непохожести &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-го объекта в результате операции обмена, т.е. выбора &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;-го объекта в качестве медоида, вместо &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; предназначена для построения начального множества медоидов и состоит в последовательном выполнении следующих шагов:&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выбрать ещё &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; медоидов следующим образом&lt;br /&gt;
 &amp;lt;math&amp;gt;S = S + \{ arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; является итерационной, одна итерация состоит в попытке улучшить кластеризацию путём выполнения операции обмена, т.е. замены одного медоида на другой. На каждой итерации выполняется операция &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;. Если для найденной пары &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;\sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt; меньше ноля (это означает, что кластеризацию можно улучшить), то выполняется обмен &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;), иначе дальнейшее улучшение кластеризации невозможно и алгоритм завершает свою работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы алгоритма множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; будет содержать ровно &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов – медоидов, принадлежащих разным кластерам. Кластер объекта &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; из множества &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; совпадает с кластером ближайшего к нему медоида: &amp;lt;math&amp;gt;arg\min_{i \in S} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Из математического описания алгоритма следует, что [[глоссарий#Вычислительное ядро|&#039;&#039;вычислительное ядро&#039;&#039;]] алгоритма сосредоточено в итерационной стадии &#039;&#039;SWAP&#039;&#039;. Одна итерация состоит в вычислении:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл этого выражения в том, что выполняется выбор такой пары медоида &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и объекта &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; операция обмена которых приведёт к улучшению кластеризации или же делается вывод о невозможности такого обмена и работа алгоритма завершается.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластерам.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Стадия &#039;&#039;BUILD&#039;&#039; сводится к вычислению:&lt;br /&gt;
 Одной операции &amp;lt;math&amp;gt;arg\min_{i} \sum_{j} d_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;K-1&amp;lt;/math&amp;gt; операций &amp;lt;math&amp;gt;arg\max_{i \in U} \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. стадия &#039;&#039;BUILD&#039;&#039; требует:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Одна итерация стадии &#039;&#039;SWAP&#039;&#039; сводится к вычислению:&lt;br /&gt;
 &amp;lt;math&amp;gt;arg\min_{i \in S, h \in U} \sum_{j \in U - \{h\}} T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. одна итерации стадии &#039;&#039;SWAP&#039;&#039; требует порядка:&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения&lt;br /&gt;
 &amp;lt;math&amp;gt;K * N&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума)&lt;br /&gt;
 &amp;lt;math&amp;gt;K * (N - K) * (N - K - 1)&amp;lt;/math&amp;gt; вычислений &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисления &amp;lt;math&amp;gt;C_{ij}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;T_{ijh}&amp;lt;/math&amp;gt; имеют константную сложность для любых &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, поэтому сложность одной итерации алгоритма определяется как &amp;lt;math&amp;gt;O(K * N^2)&amp;lt;/math&amp;gt;. Таким образом можно отнести алгоритм PAM к алгоритмам с кубической сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
 Дополнительные ограничения:&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 - &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
 2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
 Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;:&lt;br /&gt;
 &amp;lt;math&amp;gt;N&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;
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5303</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5303"/>
		<updated>2016-10-11T09:36:14Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для заданных входных данных, алгоритм выделяет &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов - медоидов (medoids) из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; объектов кластеризации. Задачей алгоритма является минимизация средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. Без ограничения общности можно минимизировать сумму непохожестей объектов на ближайший к ним медоид.&lt;br /&gt;
&lt;br /&gt;
Для дальнейшего описания алгоритма введём следующие обозначения:&lt;br /&gt;
* &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; – множество объектов кластеризации, не выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – множество объектов кластеризации, выбранных в качестве медоидов&lt;br /&gt;
* &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на ближайший к нему медоид&lt;br /&gt;
* &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; – непохожесть &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта на второй ближайший к нему медоид&lt;br /&gt;
&lt;br /&gt;
Перед выполненением алгоритма множество &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; содержит все объекты кластеризации, а множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; – пусто. Числа &amp;lt;math&amp;gt;D_{i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;E_{i}&amp;lt;/math&amp;gt; могут измениться при изменениях в множествах &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выполнение алгоритма включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;BUILD&#039;&#039;&#039;&#039;&#039; (стоит начальное множество медоидов):&lt;br /&gt;
&lt;br /&gt;
1. Добавить в множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект):&lt;br /&gt;
&amp;lt;math&amp;gt;S = \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Для каждого объекта &amp;lt;math&amp;gt;i \in U&amp;lt;/math&amp;gt; выполнить шаги 3-5&lt;br /&gt;
&lt;br /&gt;
3. Для каждого объекта &amp;lt;math&amp;gt;j \in U - \{i\}&amp;lt;/math&amp;gt; вычислить &amp;lt;math&amp;gt;D_{j}&amp;lt;/math&amp;gt; и выполнить шаг 4&lt;br /&gt;
&lt;br /&gt;
4. Положить &amp;lt;math&amp;gt;C_{ij} = max\{ D_{j} - d_{ij}, 0 \}&amp;lt;/math&amp;gt;, мера улучшения кластеризации&lt;br /&gt;
&lt;br /&gt;
5. Положить &amp;lt;math&amp;gt;g_{i} = \sum_{j \in U - \{i\}} C_{ij}&amp;lt;/math&amp;gt;, улучшение от выбора &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта в качестве медоида&lt;br /&gt;
&lt;br /&gt;
6. Выбрать объект, максимизирующий величину &amp;lt;math&amp;gt;g_{i}&amp;lt;/math&amp;gt; в качестве медоида:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
k &amp;amp; = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\&lt;br /&gt;
U &amp;amp; = U - \{k\} \\&lt;br /&gt;
S &amp;amp; = S + \{k\} \\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Если множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; содержит менее &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; объектов (медоидов) перейти к шагу 2&lt;br /&gt;
&lt;br /&gt;
8. КОНЕЦ стадии &#039;&#039;BUILD&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Стадия &#039;&#039;SWAP&#039;&#039;&#039;&#039;&#039; (итерационное улучшение кластеризации):&lt;br /&gt;
&lt;br /&gt;
1. Для всех возможных пар объектов &amp;lt;math&amp;gt;i \in S&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h \in U&amp;lt;/math&amp;gt; выполнить шаги 2-4&lt;br /&gt;
&lt;br /&gt;
2. Вычислить эффект &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; от выполнения обмена объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (т.е. объект &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; больше не выбран в качестве медоида, а объект &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt;, наоборот, выбран в качестве медоида). Способ вычисления &amp;lt;math&amp;gt;T_{ih}&amp;lt;/math&amp;gt; описан ниже.&lt;br /&gt;
&lt;br /&gt;
3. Положим &amp;lt;math&amp;gt;(i&#039;, h&#039;) = arg\min_{i \in S, h \in U} T_{ih}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Если &amp;lt;math&amp;gt;T_{i&#039;h&#039;}&amp;lt;/math&amp;gt; больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;U = U - \{k\}, S = S + \{k\}&amp;lt;/math&amp;gt;) и переходим к шагу 1&lt;br /&gt;
&lt;br /&gt;
5. КОНЕЦ стадии &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии &#039;&#039;BUILD&#039;&#039;, а затем последовательное повторение итераций стадии &#039;&#039;SWAP&#039;&#039; до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.&lt;br /&gt;
&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;K&amp;lt;/math&amp;gt; кластеров.&lt;br /&gt;
В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию &#039;&#039;BUILD&#039;&#039; и итерационную стадию &#039;&#039;SWAP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для выполнения фазы &#039;&#039;BUILD&#039;&#039; требуется:&lt;br /&gt;
&lt;br /&gt;
* Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения (вычитания),&lt;br /&gt;
* Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сравнения (определения максимума/минимума).&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации фазы &#039;&#039;SWAP&#039;&#039; требуется:&lt;br /&gt;
&lt;br /&gt;
* Около &amp;lt;math&amp;gt;K * N^2&amp;lt;/math&amp;gt; операций сложения (вычитания),&lt;br /&gt;
* Около &amp;lt;math&amp;gt;K * N^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;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
1. Матрица непохожести объектов кластеризации (dissimilarity matrix) &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;d_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Дополнительные ограничения:&lt;br /&gt;
* &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – симметрическая матрица порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;d_{ij}= d_{ji}, i, j = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; – содержит нули на главной диагонали, т.е. &amp;lt;math&amp;gt;d_{ii}= 0, i = 1, \ldots, N&amp;lt;/math&amp;gt;&lt;br /&gt;
2. &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; - число кластеров, на которое следует разбить объекты кластеризации&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;: &amp;lt;math&amp;gt;\frac{N (N - 1)}{2}&amp;lt;/math&amp;gt; (в силу симметричности и нулевой главной диагонали достаточно хранить только  над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; чисел &amp;lt;math&amp;gt;k_{1}, k_{2}, \ldots, k_{N}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k_{i}&amp;lt;/math&amp;gt; - целое число, соответствующее кластеру &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-го объекта.&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма также можно считать &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;: &amp;lt;math&amp;gt;N&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;
 PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5202</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5202"/>
		<updated>2016-10-10T14:29:52Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&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;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5199</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5199"/>
		<updated>2016-10-10T14:18:17Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&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;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5198</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5198"/>
		<updated>2016-10-10T14:14:04Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации k-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом и _____________ в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов &amp;lt;math&amp;gt;m_k&amp;lt;/math&amp;gt;, если посчитанное ранее значение &amp;lt;math&amp;gt;S&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;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5197</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5197"/>
		<updated>2016-10-10T14:13:26Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации k-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом и _____________ в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары &amp;lt;math&amp;gt;{x_i}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;{m_k}&amp;lt;/math&amp;gt; вычислить значение  &amp;lt;math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов m_k, если посчитанное ранее значение S меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5196</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5196"/>
		<updated>2016-10-10T14:12:32Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации k-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом и _____________ в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; произвольных объектов в качестве медоидов, необходимо для каждой пары x_i и m_k вычислить значение  &amp;lt;/math&amp;gt;S({x_{i}}{m_{k}})&amp;lt;/math&amp;gt;. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; одним из остальных объектов m_k, если посчитанное ранее значение S меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5195</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5195"/>
		<updated>2016-10-10T14:11:43Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации k-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом и _____________ в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора k произвольных объектов в качестве медоидов, необходимо для каждой пары x_i и m_k вычислить значение  S(&amp;lt;math&amp;gt;{x_{i}}&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;{m_{k}}&amp;lt;/math&amp;gt;). По ходу выполнения алгоритма происходит итеративная замена одного из медоидов x_i одним из остальных объектов m_k, если посчитанное ранее значение S меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5194</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5194"/>
		<updated>2016-10-10T14:09:50Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации k-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом и _____________ в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора k произвольных объектов в качестве медоидов, необходимо для каждой пары x_i и m_k вычислить значение  S({x_{i}}{m_{k}}). По ходу выполнения алгоритма происходит итеративная замена одного из медоидов x_i одним из остальных объектов m_k, если посчитанное ранее значение S меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5193</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5193"/>
		<updated>2016-10-10T14:08:59Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации k-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом и _____________ в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора k произвольных объектов в качестве медоидов, необходимо для каждой пары x_i и m_k вычислить значение  S(/x_{i}m_{k}. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов x_i одним из остальных объектов m_k, если посчитанное ранее значение S меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5192</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5192"/>
		<updated>2016-10-10T14:08:26Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Самый распространённый вариант реализации k-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом и _____________ в 1987 году.&lt;br /&gt;
&lt;br /&gt;
Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора k произвольных объектов в качестве медоидов, необходимо для каждой пары x_i и m_k вычислить значение  S(x_{i}m_{k}. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов x_i одним из остальных объектов m_k, если посчитанное ранее значение S меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5107</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=5107"/>
		<updated>2016-10-10T08:24:25Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Тодуа А.Р., Гусева Ю.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=4947</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=4947"/>
		<updated>2016-10-09T14:07:39Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Гусева Ю.В., Тодуа А.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=4944</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=4944"/>
		<updated>2016-10-09T14:05:12Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: Гусева Ю.В., Тодуа А.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
===== Анализ на основе теста Apex-Map =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=4941</id>
		<title>Участник:Антон Тодуа/Partitioning Around Medoids (PAM)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BD%D1%82%D0%BE%D0%BD_%D0%A2%D0%BE%D0%B4%D1%83%D0%B0/Partitioning_Around_Medoids_(PAM)&amp;diff=4941"/>
		<updated>2016-10-09T14:04:00Z</updated>

		<summary type="html">&lt;p&gt;Гусева Юлия: Новая страница: «Основные авторы описания:  == Свойства и структура алгоритма ==  === Общее описание алгоритм…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания:&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
===== Анализ на основе теста Apex-Map =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;/div&gt;</summary>
		<author><name>Гусева Юлия</name></author>
	</entry>
</feed>