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

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 116: Строка 116:
=== Масштабируемость алгоритма и его реализации ===
=== Масштабируемость алгоритма и его реализации ===


PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных
PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных


=== Динамические характеристики и эффективность реализации алгоритма ===
=== Динамические характеристики и эффективность реализации алгоритма ===

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

[math]\displaystyle{ \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]\displaystyle{ S }[/math] содержит менее [math]\displaystyle{ K }[/math] объектов (медоидов) перейти к шагу 2

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


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

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

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

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

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

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

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

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

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

В соответствии с приведённым выше математическим описанием последовательное выполнение алгоритма представляет собой выполнение стадии BUILD, а затем последовательное повторение итераций стадии SWAP до тех пор пока существует пара объектов (один из которых медоид, а другой – нет), которые можно обменять, чтобы улучшить кластер.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Особенности реализации последовательного алгоритма

Локальность данных и вычислений

Возможные способы и особенности параллельной реализации алгоритма

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

PAM работает эффективно для небольших наборов данных, но не очень хорошо масштабируется для больших наборов данных

Динамические характеристики и эффективность реализации алгоритма

Выводы для классов архитектур

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

Литература