В этом примере показано, как выполнять нечеткую кластеризацию c-means для двумерных данных. Пример кластеризации данных более высокой размерности см. в разделе Нечеткая кластеризация C-Means для данных Iris.
Нечеткие c-средства (FCM) - это метод кластеризации данных, в котором набор данных группируется в N кластеров с каждой точкой данных в наборе данных, принадлежащей каждому кластеру в определенной степени. Например, точка данных, которая находится близко к центру кластера, будет иметь высокую степень членства в этом кластере, а другая точка данных, которая находится далеко от центра кластера, будет иметь низкую степень членства в этом кластере.
fcm выполняет кластеризацию FCM. Он начинается со случайного начального предположения для центров кластеров; это среднее местоположение каждого кластера. Далее, fcm назначает каждой точке данных случайный уровень членства для каждого кластера. Путем итеративного обновления центров кластеров и классов членства для каждой точки данных, fcm перемещает центры кластера в правильное расположение в наборе данных и для каждой точки данных находит степень членства в каждом кластере. Эта итерация сводит к минимуму целевую функцию, которая представляет расстояние от любой заданной точки данных до центра кластера, взвешенное по членству этой точки данных в кластере.
Загрузите пять образцов наборов данных и выберите набор данных для кластеризации. Эти наборы данных имеют различное количество кластеров и распределений данных.
load fcmdata dataset =fcmdata3;
Настройте параметры алгоритма кластеризации. Дополнительные сведения об этих параметрах см. в разделе fcm. Чтобы получить точные результаты кластеризации для каждого набора данных, попробуйте использовать различные параметры кластеризации.
Укажите число вычисляемых кластеров, которое должно быть больше 1.
N =
4;Укажите степень матрицы нечеткого разбиения, которая управляет степенью нечеткого перекрытия между кластерами. Это значение должно быть больше 1с меньшими значениями, создающими более четкие границы кластера. Дополнительные сведения см. в разделе Настройка нечеткого перекрытия в кластеризации нечетких C-средств.
exponent =
2;Укажите максимальное число итераций оптимизации.
maxIterations =
100;Укажите минимальное улучшение целевой функции между последовательными итерациями. Когда целевая функция улучшается на значение ниже этого порога, оптимизация прекращается. Меньшее значение дает более точные результаты кластеризации, но кластеризация может занять больше времени.
minImprovement =
0.00001;Укажите, отображать ли значение целевой функции после каждой итерации.
displayObjectiveFunction =
false;Создание вектора опций для fcm с использованием этих настроек.
options = [exponent maxIterations minImprovement displayObjectiveFunction];
Кластеризация данных в N кластеры.
[C,U] = fcm(dataset,N,options);
C содержит вычисляемые центры для каждого кластера. U содержит вычисленную матрицу нечеткого разбиения, которая указывает степень принадлежности каждой точки данных в каждом кластере.
Классифицируйте каждую точку данных в кластер, для которого она имеет наивысшую степень членства.
maxU = max(U); index = cell(N,1); for i=1:N index{i} = find(U(i,:) == maxU); end
Постройте график результатов кластеризации.
figure hold on for i=1:N plot(dataset(index{i},1),dataset(index{i},2),'o') plot(C(i,1),C(i,2),'xk','MarkerSize',15,'LineWidth',3) end hold off

Точки данных в каждом кластере отображаются разными цветами. Центр для каждого кластера отображается черным цветом X.
Выберите кластер, для которого нужно построить поверхность функции членства.
cluster =
2;Получение функции членства для выбранного кластера путем подгонки поверхности к значениям членства кластера для всех точек данных. Дополнительные сведения о интерполяции данных рассеянного 3-D см. в разделе griddata.
[X,Y] = meshgrid(0:0.05:1, 0:0.05:1); Z = griddata(dataset(:,1),dataset(:,2),U(cluster,:),X,Y); surf(X,Y,Z)

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