Участник:Антон Тодуа/Partitioning Around Medoids (PAM): различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 59: Строка 59:
 
3. Положим <math>(i', h') = arg\min_{i \in S, h \in U} T_{ih}</math>
 
3. Положим <math>(i', h') = arg\min_{i \in S, h \in U} T_{ih}</math>
  
4. Если <math>T_{i'h'}</math> больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов <math>i</math> и <math>h</math> (<math>U = U - \{k\}, S = S + \{k\}</math> и переходим к шагу 1
+
4. Если <math>T_{i'h'}</math> больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов <math>i</math> и <math>h</math> (<math>U = U - \{k\}, S = S + \{k\}</math>) и переходим к шагу 1
  
 
5. КОНЕЦ стадии ''SWAP''
 
5. КОНЕЦ стадии ''SWAP''

Версия 01:49, 11 октября 2016

Основные авторы описания: Тодуа А.Р., Гусева Ю.В.

1 Свойства и структура алгоритма

1.1 Общее описание алгоритма

Самый распространённый вариант реализации [math]k[/math]-medoids называется PAM (Partitioning Around Medoids). Он представляет собой «жадный» алгоритм с очень неэффективной эвристикой. Данный метод был предложен Кауфманом в 1987 году.

Алгоритм начинается с выбора набора данных, состоящих из медоидов и остальных объектов. После выбора [math]k[/math] произвольных объектов в качестве медоидов, необходимо для каждой пары [math]{x_i}[/math] и [math]{m_k}[/math] вычислить значение [math]S({x_{i}}{m_{k}})[/math]. По ходу выполнения алгоритма происходит итеративная замена одного из медоидов [math]x_i[/math] одним из остальных объектов [math]m_k[/math], если посчитанное ранее значение [math]S[/math] меньше нуля. Процесс будет повторятся, пока медоиды не стабилизируются.

1.2 Математическое описание алгоритма

Для заданных входных данных, алгоритм выделяет [math]K[/math] объектов - медоидов (medoids) из [math]N[/math] объектов кластеризации. Задачей алгоритма является минимизация средней непохожести (average dissimilarity) объектов и ближайшего к ним медоида. Без ограничения общности можно минимизировать сумму непохожестей объектов на ближайший к ним медоид.

Для дальнейшего описания алгоритма введём следующие обозначения:

  • [math]U[/math] – множество объектов кластеризации, не выбранных в качестве медоидов
  • [math]S[/math] – множество объектов кластеризации, выбранных в качестве медоидов
  • [math]D_{i}[/math] – непохожесть [math]i[/math]-го объекта на ближайший к нему медоид
  • [math]E_{i}[/math] – непохожесть [math]i[/math]-го объекта на второй ближайший к нему медоид

Перед выполненением алгоритма множество [math]U[/math] содержит все объекты кластеризации, а множество [math]S[/math] – пусто. Числа [math]D_{i}[/math] и [math]E_{i}[/math] могут измениться при изменениях в множествах [math]U[/math] и [math]S[/math].

Выполнение алгоритма включает в себя подготовительную стадию BUILD и итерационную стадию SWAP.


Стадия BUILD (стоит начальное множество медоидов):

1. Добавить в множество [math]S[/math] объект, для которого сумма непохожести на все остальные объекты минимальна (самый центральный объект): [math]S = \{ arg\min_{i \in U} \sum_{j \in U} d_{ij} \}[/math]

2. Для каждого объекта [math]i \in U[/math] выполнить шаги 3-5

3. Для каждого объекта [math]j \in U - \{i\}[/math] вычислить [math]D_{j}[/math] и выполнить шаг 4

4. Положить [math]C_{ij} = max\{ D_{j} - d_{ij}, 0 \}[/math], мера улучшения кластеризации

5. Положить [math]g_{i} = \sum_{j \in U - \{i\}} C_{ij}[/math], улучшение от выбора [math]i[/math]-го объекта в качестве медоида

6. Выбрать объект, максимизирующий величину [math]g_{i}[/math] в качестве медоида:

[math] \begin{align} k & = arg\min_{i \in U} \sum_{j \in U} d_{ij} \\ U & = U - \{k\} \\ S & = S + \{k\} \\ \end{align} [/math]

7. Если множество [math]S[/math] содержит менее [math]K[/math] объектов (медоидов) перейти к шагу 2

8. КОНЕЦ стадии BUILD


Стадия SWAP (итерационное улучшение кластеризации):

1. Для всех возможных пар объектов [math]i \in S[/math] и [math]h \in U[/math] выполнить шаги 2-4

2. Вычислить эффект [math]T_{ih}[/math] от выполнения обмена объектов [math]i[/math] и [math]h[/math] (т.е. объект [math]i[/math] больше не выбран в качестве медоида, а объект [math]h[/math], наоборот, выбран в качестве медоида). Способ вычисления [math]T_{ih}[/math] описан ниже.

3. Положим [math](i', h') = arg\min_{i \in S, h \in U} T_{ih}[/math]

4. Если [math]T_{i'h'}[/math] больше 0 (т.е. кластеризацию можно улучшить), то выполняем обмен объектов [math]i[/math] и [math]h[/math] ([math]U = U - \{k\}, S = S + \{k\}[/math]) и переходим к шагу 1

5. КОНЕЦ стадии SWAP

1.3 Вычислительное ядро алгоритма

1.4 Макроструктура алгоритма

1.5 Схема реализации последовательного алгоритма

1.6 Последовательная сложность алгоритма

При описании последовательной сложности будем считать, что выполняется кластеризация [math]N[/math] объектов для [math]K[/math] кластеров. В соответствии с приведённым математическим описанием алгоритм включает в себя подготовительную стадию BUILD и итерационную стадию SWAP.

Для выполнения фазы BUILD требуется:

  • Около [math]K * N^2[/math] операций сложения (вычитания),
  • Около [math]K * N^2[/math] операций сравнения (определения максимума/минимума).

Для выполнения одной итерации фазы SWAP требуется:

  • Около [math]K * N^2[/math] операций сложения (вычитания),
  • Около [math]K * N^2[/math] операций сравнения (определения максимума/минимума).

Можно получить точное число приведённых выше операций, но оно практически не будет отличаться от представленных оценок. В то же время приведённые оценки способствуют лучшему восприятию последовательной сложности алгоритма.

При классификации по последовательной сложности, таким образом, данный алгоритм можно отнести к алгоритмам с кубической сложностью.

1.7 Информационный граф

1.8 Ресурс параллелизма алгоритма

1.9 Входные и выходные данные алгоритма

Входные данные:

1. Матрица непохожести объектов кластеризации (dissimilarity matrix) [math]D[/math] (элементы [math]d_{ij}[/math]). Дополнительные ограничения:

  • [math]D[/math] – симметрическая матрица порядка [math]N[/math], т.е. [math]d_{ij}= d_{ji}, i, j = 1, \ldots, N[/math]
  • [math]D[/math] – содержит нули на главной диагонали, т.е. [math]d_{ii}= 0, i = 1, \ldots, N[/math]

2. [math]K[/math] - число кластеров, на которое следует разбить объекты кластеризации

Объём входных данных: [math]\frac{N (N - 1)}{2}[/math] (в силу симметричности и нулевой главной диагонали достаточно хранить только над/поддиагональные элементы). В разных реализациях эта экономия хранения может быть выполнена разным образом.

Выходные данные: [math]N[/math] чисел [math]k_{1}, k_{2}, \ldots, k_{N}[/math], где [math]k_{i}[/math] - целое число, соответствующее кластеру [math]i[/math]-го объекта.

Выходными данными алгоритма также можно считать [math]K[/math] чисел, задающих номера объектов кластеризации, выделенных в качестве медоидов (medoids). Однако в большинстве случаев требуется именно определение кластеров объектов, а не поиск соответствующих медоидов.

Объём выходных данных: [math]N[/math] (кластеры объектов кластеризации)

1.10 Свойства алгоритма

2 Программная реализация алгоритма

2.1 Масштабируемость алгоритма и его реализации

2.2 Существующие реализации алгоритма

3 Литература