exponenta event banner

fcm

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

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

Загрузить данные.

load fcmdata.dat

Найти 2 кластеры с использованием нечеткой кластеризации c-means.

[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=1D∑j=1Nμijm‖xi−cj‖2,

где

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

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

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

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

  • cj - центр j-го скопления.

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

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

  1. Произвольно инициализируйте значения членства в кластере, мкij.

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

    cj=∑i=1Dμijmxi∑i=1Dμijm.

  3. Обновите pciij в соответствии со следующим:

    μij=1∑k=1N (xi cj xi ck ‖) 2 м − 1.

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

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

Ссылки

[1] Бездек, J.C., Распознавание образов с нечеткими алгоритмами целевой функции, Пленум Пресс, Нью-Йорк, 1981.

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