Участник:ADovganich/Нечеткий алгоритм С средних: различия между версиями
Protsenko (обсуждение | вклад) |
Protsenko (обсуждение | вклад) Нет описания правки |
||
| Строка 8: | Строка 8: | ||
}} | }} | ||
Авторы : [[Участник:Protsenko|Мария Проценко]], [[Участник:ADovganich|Андрей Довганич]] | Авторы : [[Участник:Protsenko|Мария Проценко]](1.5-1.10),[[Участник:ADovganich|Андрей Довганич]] (1.1-1.4) | ||
= Свойства и структура алгоритмов = | = Свойства и структура алгоритмов = | ||
Версия от 23:27, 14 октября 2016
| Нечеткий алгоритм C средних |
Авторы : Мария Проценко(1.5-1.10),Андрей Довганич (1.1-1.4)
Свойства и структура алгоритмов
Общее описание алгоритма
Нечеткий алгоритм C-средних (fuzzy C-means) позволяет разбить имеющееся множество векторов (точек) мощностью p на заданное число нечетких множеств. Предназначен для кластеризации больших наборов данных. Основным достоинством алгоритма является нечеткость при определении объекта в кластер. Благодаря этому становится возможным определить объекты, которые находятся на границе, в кластеры. Из основного достоинства следует и главный недостаток - неопределенность с объектами, удаленными от центров всех кластеров. В остальном ему присущи стандартные проблемы подобного класса алгоритмов: вычислительная сложность, необходимость задания количества кластеров[1].
Алгоритм был разработан J.C. Dunn в 1973 г.[2], усовершенствован J.C. Bezdek в 1981 г.[3].
На вход алгоритм получает некоторое множество входных векторов и случайную матрицу их принадлежности к каждому из кластеров. На выходе с заданной точностью получаем матрицу принадлежности.
В общем виде алгоритм можно записать следующим образом:
1) Инициализировать матрицу принадлежности;
2) Вычислить центры кластеров;
3) Вычислить значение решающей функции. Если значение ниже некоторого порогового или его улучшение по сравнению с предыдущей итерацией меньше определенной величины, то остановить вычисления;
4) Иначе вычислить новые значения матрицы принадлежности;
5) Перейти к шагу 2
Математическое описание алгоритма
Рассмотрим матрицу [math]\displaystyle{ M = m_{ik} \in[0,1],\; i = 1, ..., c, \; k = 1, ..., K }[/math]. [math]\displaystyle{ m_{i,k} }[/math] - вероятность принадлежности объекта [math]\displaystyle{ k }[/math] к кластеру [math]\displaystyle{ i }[/math]; [math]\displaystyle{ c }[/math] - количество кластеров, [math]\displaystyle{ K }[/math] - количество векторов. При этом элементы матрицы удовлетворяют следующим условиям:
- сумма элементов в каждом столбце равна [math]\displaystyle{ 1 }[/math];
- сумма всех элементов матрицы равно [math]\displaystyle{ K }[/math];
Назовем [math]\displaystyle{ M }[/math] матрицей принадлежности.
Пусть [math]\displaystyle{ c_{i} (i = 1,2,...c) }[/math] - центры кластеров. Тогда рассмотрим функцию [math]\displaystyle{ (2) }[/math], где [math]\displaystyle{ d_{ik} = \left\Vert{u_{k}-c_{i}}\right\| }[/math] - Евклидово расстояние между центром кластера и объектом, [math]\displaystyle{ 1 \le q \le \infty }[/math] - экспоненциальный весовой коэффициент, характеризующий нечеткость. Будем минимизировать значение функции [math]\displaystyle{ J }[/math]. [math]\displaystyle{ (1) }[/math] и [math]\displaystyle{ (3) }[/math] являются необходимым условие достижения минимума этой функцией. Таким образом эти два условия дают нам итерационный процесс, описанный выше.
Вычислительное ядро алгоритма
Вычислительным ядром алгоритма являются формулы: [math]\displaystyle{ (1) }[/math], [math]\displaystyle{ (2) }[/math], [math]\displaystyle{ (3) }[/math]. В них производится вычисление новых центров кластеров, значения решающей функции и пересчет элементов матрицы принадлежности.
Макроструктура алгоритма
Макроструктура алгоритма состоит из следующих шагов:
1) Инициализация матрицы [math]\displaystyle{ M }[/math] случайными значениями от 0 до 1;
2) Вычисление центров кластеров;
3) Вычисление значения решающей функции(если оно удовлетворяет условиям останова - завершение вычислений);
4) Вычисление новых элементов матрицы принадлежности;
5) Переход к шагу 2;
Схема реализации последовательного алгоритма
Пример реализации алгоритма на языке С++
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];
}
}
Последовательная сложность алгоритма
Каждая итерация включает в себя
- Вычисление центров кластеров [math]\displaystyle{ O(C*K) }[/math]
- Вычисление решающей функции [math]\displaystyle{ O(C*K) }[/math]
- Обновлене матрицы m [math]\displaystyle{ O(C*C*K) }[/math]
Общая сложность каждой итерации [math]\displaystyle{ O(C*C*K) }[/math] Сложность всего алгоритма будет зависеть от числа итераций, которое зависит от
- Выбора начального приближения
- Выбора условий останова
Информационный граф
Ресурс параллелизма алгоритма
Входные и выходные данные алгоритма
Свойства алгоритма
Программная реализация алгоритма
Особенности реализации последовательного алгоритма
Локальность данных и вычислений
Возможные способы и особенности параллельной реализации алгоритма
Масштабируемость алгоритма и его реализации
Динамические характеристики и эффективность реализации алгоритма
Выводы для классов архитектур
Существующие реализации алгоритма
Литература
- ↑ Нейский И.М. Классификация и сравнение методов кластеризации
- ↑ 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.