fcm

Нечеткая кластеризация c-означает

Описание

пример

[centers,U] = fcm(data,Nc) выполняет нечеткую с-среднюю кластеризацию на данных и возвращает Nc кластерные центры.

пример

[centers,U] = fcm(data,Nc,options) задает дополнительные опции кластеризации.

пример

[centers,U,objFunc] = fcm(___) также возвращает значения целевой функции при каждой итерации оптимизации для всех предыдущих синтаксисов.

Примеры

свернуть все

Загрузка данных.

load fcmdata.dat

Поиск 2 кластеры, использующие нечеткую c-среднюю кластеризацию.

[centers,U] = fcm(fcmdata,2);
Iteration count = 1, obj. fcn = 8.970479
Iteration count = 2, obj. fcn = 7.197402
Iteration count = 3, obj. fcn = 6.325579
Iteration count = 4, obj. fcn = 4.586142
Iteration count = 5, obj. fcn = 3.893114
Iteration count = 6, obj. fcn = 3.810804
Iteration count = 7, obj. fcn = 3.799801
Iteration count = 8, obj. fcn = 3.797862
Iteration count = 9, obj. fcn = 3.797508
Iteration count = 10, obj. fcn = 3.797444
Iteration count = 11, obj. fcn = 3.797432
Iteration count = 12, obj. fcn = 3.797430

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

maxU = max(U);
index1 = find(U(1,:) == maxU);
index2 = find(U(2,:) == maxU);

Постройте график кластеризованных центров данных и кластеров.

plot(fcmdata(index1,1),fcmdata(index1,2),'ob')
hold on
plot(fcmdata(index2,1),fcmdata(index2,2),'or')
plot(centers(1,1),centers(1,2),'xb','MarkerSize',15,'LineWidth',3)
plot(centers(2,1),centers(2,2),'xr','MarkerSize',15,'LineWidth',3)
hold off

Figure contains an axes. The axes contains 4 objects of type line.

Создайте случайный набор данных.

data = rand(100,2);

Чтобы увеличить количество нечеткого перекрытия между кластерами, задайте большую нечеткую матричную экспоненту разбиения.

options = [3.0 NaN NaN 0];

Группируйте данные.

[centers,U] = fcm(data,2,options);

Загрузите данные кластеризации.

load clusterdemo.dat

Установите условия завершения кластеризации так, чтобы оптимизация остановилась, когда произойдет одно из следующих:

  • Количество итераций достигает максимума 25.

  • Целевая функция улучшается меньше чем 0.001 между двумя последовательными итерациями.

options = [NaN 25 0.001 0];

Первая опция - NaN, который устанавливает экспоненту нечеткой матрицы разбиения на ее значение по умолчанию 2. Установка четвертой опции равной 0 подавляет отображение целевой функции.

Группируйте данные.

[centers,U,objFun] = fcm(clusterdemo,3,options);

Чтобы определить, какое условие завершения остановило кластеризацию, просмотрите вектор целевой функции.

objFun
objFun = 13×1

   54.7257
   42.9867
   42.8554
   42.1857
   39.0857
   31.6814
   28.5736
   27.1806
   20.7359
   15.7147
      ⋮

Оптимизация остановлена, потому что целевая функция улучшилась меньше 0.001 между последними двумя итерациями.

Входные параметры

свернуть все

Набор данных, подлежащий кластеризации, задается как матрица с Nd строками, где Nd количество точек данных. Количество столбцов в data равен размерности данных.

Количество созданных кластеров, заданное как целое число, больше 1.

Опции кластеризации, заданные как вектор со следующими элементами:

ОпцияОписаниеДефолт
options(1)

Экспонента для нечеткой матрицы разбиения, U, заданный как скаляр больше 1.0. Эта опция управляет количеством нечеткого перекрытия между кластерами с большими значениями, указывающими на большую степень перекрытия.

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

Пример регулировки нечеткого перекрытия см. в разделе Настройка нечеткого перекрытия в нечеткой кластеризации C-Means.

2.0
options(2)

Максимальное количество итераций, заданное как положительное целое число.

100
options(3)

Минимальное улучшение целевой функции между двумя последовательными итерациями, заданное как положительная скалярная величина.

1e-5
options(4)

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

  • true - Отобразите целевую функцию.

  • false - Не отображать целевую функцию.

true

Если какой-либо элемент options является NaNиспользуется значение по умолчанию для этой опции.

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

Выходные аргументы

свернуть все

Конечные центры кластера, возвращенные как матрица с Nc строки, содержащие координаты каждого центра кластера. Количество столбцов в centers равен размерности кластеризуемых данных.

Нечеткая матрица разбиения, возвращенная как матрица с Nc строки и Nd столбцы. Элементный U(i,j) указывает степень принадлежности j-й точки данных в i-м кластере. Для заданной точки данных сумма значений принадлежности для всех кластеров равна единице.

Значения целевой функции для каждой итерации, возвращенные как вектор.

Совет

  • Чтобы сгенерировать систему нечеткого вывода с помощью кластеризации FCM, используйте genfis команда. Например, предположим, что вы кластеризуете свои данные с помощью следующего синтаксиса:

    [centers,U] = fcm(data,Nc,options);

    где первый M столбцы data соответствуют входы переменным, а остальные столбцы соответствуют выходу переменным.

    Можно сгенерировать нечеткую систему с помощью тех же обучающих данных и строения кластеризации FCM. Для этого:

    1. Настройте опции кластеризации.

      opt = genfisOptions('FCMClustering');
      opt.NumClusters = Nc;
      opt.Exponent = options(1);
      opt.MaxNumIteration = options(2);
      opt.MinImprovement = options(3);
      opt.Verbose = options(4);
      
    2. Извлеките вход и выходные данные переменной.

      inputData = data(:,1:M);
      outputData = data(:,M+1:end);
      
    3. Сгенерируйте структуру FIS.

      fis = genfis(inputData,outputData,opt);

    Нечеткая система, fis, содержит одно нечеткое правило для каждого кластера, и каждая входная и выходная переменная имеет одну функцию принадлежности к кластеру. Для получения дополнительной информации см. genfis и genfisOptions.

Алгоритмы

Нечеткое c-средство (FCM) является методом кластеризации, который позволяет каждой точке данных принадлежать к нескольким кластерам с различными степенями принадлежности.

FCM основан на минимизации следующей целевой функции

Jm=i=1Dj=1Nμijmxicj2,

где

  • D - количество точек данных.

  • N - количество кластеров.

  • m является нечетким матричным экспонентом разбиения для управления степенью нечеткого перекрытия с m > 1. Нечеткое перекрытие относится к тому, насколько нечеткими являются контуры между кластерами, то есть количество точек данных, которые имеют значительное членство в более чем одном кластере.

  • xi - i-я точка данных.

  • cj является центром j-го кластера.

  • μij - это степень принадлежности xi к j-му кластеру. Для заданной точки данных, xi, сумма значений принадлежности для всех кластеров является единицей.

fcm выполняет следующие шаги во время кластеризации:

  1. Случайным образом инициализируйте значения принадлежности к кластеру, μij.

  2. Вычислите центры кластеров:

    cj=i=1Dμijmxii=1Dμijm.

  3. Обновите μij согласно следующему:

    μij=1k=1N(xicjxick)2m1.

  4. Вычислим целевую функцию, Jm.

  5. Повторяйте шаги 2-4, пока Jm не улучшится меньше, чем заданный минимальный порог, или до тех пор, пока не будет задано максимальное количество итераций.

Ссылки

[1] Bezdek, J.C., Pattern Recognition with Fuzzy Objective Function Algorithms, Plenum Press, New York, 1981.

Представлено до R2006a