Участник:ADovganich/Нечеткий алгоритм С средних: различия между версиями
Protsenko (обсуждение | вклад) |
Protsenko (обсуждение | вклад) |
||
Строка 106: | Строка 106: | ||
* Вычисление решающей функции <math>O(C*K)</math> | * Вычисление решающей функции <math>O(C*K)</math> | ||
* Обновлене матрицы m <math>O(C*C*K)</math> | * Обновлене матрицы m <math>O(C*C*K)</math> | ||
− | Общая сложность каждой итерации <math>O(C*C*K)</math> | + | Общая сложность каждой итерации <math>O(C*C*K)</math>. |
+ | |||
Сложность всего алгоритма будет зависеть от числа итераций, которое зависит от | Сложность всего алгоритма будет зависеть от числа итераций, которое зависит от | ||
* Выбора начального приближения | * Выбора начального приближения | ||
* Выбора условий останова | * Выбора условий останова | ||
+ | |||
+ | Окончательно, сложность алгоритма будет равна произведению количества итераций на их сложность | ||
== Информационный граф == | == Информационный граф == |
Версия 02:28, 15 октября 2016
Нечеткий алгоритм C средних |
Авторы : Мария Проценко (1.5-1.10), Андрей Довганич (1.1-1.4)
Содержание
- 1 Свойства и структура алгоритмов
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритмов
1.1 Общее описание алгоритма
Нечеткий алгоритм C-средних (fuzzy C-means) позволяет разбить имеющееся множество векторов (точек) мощностью p на заданное число нечетких множеств. Предназначен для кластеризации больших наборов данных. Основным достоинством алгоритма является нечеткость при определении объекта в кластер. Благодаря этому становится возможным определить объекты, которые находятся на границе, в кластеры. Из основного достоинства следует и главный недостаток - неопределенность с объектами, удаленными от центров всех кластеров. В остальном ему присущи стандартные проблемы подобного класса алгоритмов: вычислительная сложность, необходимость задания количества кластеров[1].
Алгоритм был разработан J.C. Dunn в 1973 г.[2], усовершенствован J.C. Bezdek в 1981 г.[3].
На вход алгоритм получает некоторое множество входных векторов и случайную матрицу их принадлежности к каждому из кластеров. На выходе с заданной точностью получаем матрицу принадлежности.
В общем виде алгоритм можно записать следующим образом:
1) Инициализировать матрицу принадлежности;
2) Вычислить центры кластеров;
3) Вычислить значение решающей функции. Если значение ниже некоторого порогового или его улучшение по сравнению с предыдущей итерацией меньше определенной величины, то остановить вычисления;
4) Иначе вычислить новые значения матрицы принадлежности;
5) Перейти к шагу 2
1.2 Математическое описание алгоритма
Рассмотрим матрицу [math] M = m_{ik} \in[0,1],\; i = 1, ..., c, \; k = 1, ..., K [/math]. [math]m_{i,k}[/math] - вероятность принадлежности объекта [math]k[/math] к кластеру [math]i[/math]; [math]c[/math] - количество кластеров, [math]K[/math] - количество векторов. При этом элементы матрицы удовлетворяют следующим условиям:
- сумма элементов в каждом столбце равна [math]1[/math];
- сумма всех элементов матрицы равно [math]K[/math];
Назовем [math] M [/math] матрицей принадлежности.
Пусть [math]c_{i} (i = 1,2,...c)[/math] - центры кластеров. Тогда рассмотрим функцию [math](2)[/math], где [math] d_{ik} = \left\Vert{u_{k}-c_{i}}\right\| [/math] - Евклидово расстояние между центром кластера и объектом, [math] 1 \le q \le \infty [/math] - экспоненциальный весовой коэффициент, характеризующий нечеткость. Будем минимизировать значение функции [math] J [/math]. [math] (1) [/math] и [math] (3) [/math] являются необходимым условие достижения минимума этой функцией. Таким образом эти два условия дают нам итерационный процесс, описанный выше.
1.3 Вычислительное ядро алгоритма
Вычислительным ядром алгоритма являются формулы: [math] (1) [/math], [math] (2) [/math], [math] (3) [/math]. В них производится вычисление новых центров кластеров, значения решающей функции и пересчет элементов матрицы принадлежности.
1.4 Макроструктура алгоритма
Макроструктура алгоритма состоит из следующих шагов:
1) Инициализация матрицы [math] M [/math] случайными значениями от 0 до 1;
2) Вычисление центров кластеров;
3) Вычисление значения решающей функции(если оно удовлетворяет условиям останова - завершение вычислений);
4) Вычисление новых элементов матрицы принадлежности;
5) Переход к шагу 2;
1.5 Схема реализации последовательного алгоритма
Пример реализации алгоритма на языке С++
float ** m;
int *c;
int number_clusters, number_items;
m = gen_random_clusters();//заполним матрицу m случайными значениями от 0 до 1
while (true)
{
//вычисление центров кластеров
for (int i=0; i<number_clusters; i++)
{
numerator==denumerator=0;
for (int k=0; k<number_items; k++)
{
numerator+=pow(m[i, k], q)*u[k];//u[k]-вектор
denumerator+=pow(m[i, k], q);
}
c[i]= numerator / denumerator;//центры кластеров
}
j=0;//вычисление решающей функции
for (int i=0; i<number_clusters; i++)
for (int k=0; k<number_items; k++)
j+=pow(m[i, k], q)*pow(dist(c[i], x[k],2);//dist-вычисляет расстояние между заданными векторами
if ((abs(j-last_j)<eps1) || (j<eps2)) break;//проверка на необходимость завернешения алгоритма
last_j=j;
//обновление матрицы m
for (int i=0; i<number_clusters; i++)
for (int k=0; k<number_items; k++)
{
m[i,k]=0
for(int j=0; j<number_clusters; j++)
m[i,k]=pow(dist(c[i], x[k]),2/(q-1));
m[i,k]=1/m[i,k];
}
}
1.6 Последовательная сложность алгоритма
Каждая итерация включает в себя
- Вычисление центров кластеров [math]O(C*K)[/math]
- Вычисление решающей функции [math]O(C*K)[/math]
- Обновлене матрицы m [math]O(C*C*K)[/math]
Общая сложность каждой итерации [math]O(C*C*K)[/math].
Сложность всего алгоритма будет зависеть от числа итераций, которое зависит от
- Выбора начального приближения
- Выбора условий останова
Окончательно, сложность алгоритма будет равна произведению количества итераций на их сложность
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
1.9 Входные и выходные данные алгоритма
1.10 Свойства алгоритма
2 Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
3 Литература
- ↑ Нейский И.М. Классификация и сравнение методов кластеризации
- ↑ Dunn, J. C. (1973-01-01). "A Fuzzy Relative of the ISODATA Process and Its Use in Detecting Compact Well-Separated Clusters". Journal of Cybernetics. 3 (3): 32–57. doi:10.1080/01969727308546046. ISSN 0022-0280.
- ↑ Bezdek, James C. (1981). Pattern Recognition with Fuzzy Objective Function Algorithms. ISBN 0-306-40671-3.