Участник:Антон Тодуа/Partitioning Around Medoids (PAM): различия между версиями
| Строка 49: | Строка 49: | ||
'''Выходные данные''': <math>N</math> чисел <math>k_{1}, k_{2}, \ldots, k_{N}</math>, где <math>k_{i}</math> - целое число, соответствующее кластеру <math>i</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> (кластеры объектов кластеризации) | '''Объём выходных данных''': <math>N</math> (кластеры объектов кластеризации) | ||
Версия от 21:45, 10 октября 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] объектов кластеризации. Целью алгоритма является минимизация средней непохожести
Вычислительное ядро алгоритма
Макроструктура алгоритма
Схема реализации последовательного алгоритма
Последовательная сложность алгоритма
При описании последовательной сложности будем считать, что выполняется кластеризация [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] (кластеры объектов кластеризации)