Участник:Denemmy/Partitioning Around Medoids (Алгоритм)

Материал из Алговики
Перейти к навигации Перейти к поиску

Авторы: Галеев Д.Ф, Запутляев И.

Содержание

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

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

Кластеризация - это задача из области машинного обучения, которая заключается в том, что нужно выделить некоторое число групп в исходном множестве, в каждой из которых содержатся схожие по некоторой метрике элементы.
Partitioning Around Medoids (PAM) - это одна из реализаций алгоритма кластеризации k-medoids. PAM использует жадный алгоритм, который может не найти оптимального решения, однако он гораздо быстрее полного перебора.

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

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

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

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

Реализация алгоритма на python:

1  def kMedoids(D, k, tmax=100):
2      # determine dimensions of distance matrix D
3      m, n = D.shape
4      # randomly initialize an array of k medoid indices
5      M = np.sort(np.random.choice(n, k))
6      # create a copy of the array of medoid indices
7      Mnew = np.copy(M)
8      # initialize a dictionary to represent clusters
9      C = {}
10     for t in xrange(tmax):
11         # determine clusters, i.e. arrays of data indices
12         J = np.argmin(D[:,M], axis=1)
13         for kappa in range(k):
14             C[kappa] = np.where(J==kappa)[0]
15         # update cluster medoids
16         for kappa in range(k):
17             J = np.mean(D[np.ix_(C[kappa],C[kappa])],axis=1)
18             j = np.argmin(J)
19             Mnew[kappa] = C[kappa][j]
20         np.sort(Mnew)
21         # check for convergence
22         if np.array_equal(M, Mnew):
23             break
24         M = np.copy(Mnew)
25     else:
26         # final update of cluster memberships
27         J = np.argmin(D[:,M], axis=1)
28         for kappa in range(k):
29             C[kappa] = np.where(J==kappa)[0]
30    # return results
31    return M, C

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

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

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

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

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

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

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

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

2.2.1 Локальность реализации алгоритма

2.2.1.1 Структура обращений в память и качественная оценка локальности
2.2.1.2 Количественная оценка локальности

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

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

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

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

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

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

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

2.7.1 Открытое программное обеспечение

2.7.2 Проприетарное программное обеспечение

3 Литература