fcm

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

Описание

пример

[centers,U] = fcm(data,Nc) выполняет нечеткие c-средние-значения, кластеризирующиеся на определенных данных, и возвращает 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

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

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-средств.

2.0
options(2)

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

100
options(3)

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

1e-5
options(4)

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

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

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

true

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

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

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

свернуть все

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

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

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

Советы

  • Чтобы сгенерировать нечеткую систему вывода с помощью кластеризации 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 th точка данных.

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

  • μij является степенью членства xi в j th кластер. Для точки определенных данных, 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] Bezdec, J.C., распознавание образов с нечеткими алгоритмами целевой функции, Пленум-Пресс, Нью-Йорк, 1981.

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