Этот пример показывает, как выполнить нечеткую кластеризацию c-означает на 2-мерных данных. Для примера, который кластеризует данные более высокой размерности, см. «Нечеткая кластеризация C-средств» для данных Iris.
Нечеткое c-средство (FCM) является методом кластеризации данных, в котором набор данных сгруппирован в N кластеров с каждой точкой данных в наборе данных, принадлежащей каждому кластеру в определенной степени. Например, точка данных, которая находится вблизи центра кластера, будет иметь высокую степень принадлежности к этому кластеру, а другая точка данных, которая находится далеко от центра кластера, будет иметь низкую степень принадлежности к этому кластеру.
The fcm
функция выполняет кластеризацию FCM. Он начинается со случайного начального предположения для центров кластера; это среднее местоположение каждого кластера. Далее, fcm
присваивает каждой точке данных случайный класс принадлежности для каждого кластера. Путем итерационного обновления центров кластеров и классов принадлежности для каждой точки данных, fcm
перемещает центры кластеров в правильное место в наборе данных и для каждой точки данных находит степень принадлежности к каждому кластеру. Эта итерация минимизирует целевую функцию, которая представляет расстояние от любой заданной точки данных до центра кластера, взвешенное принадлежностью этой точки данных в кластере.
Загрузите пять выборочных наборов данных и выберите набор данных в кластер. Эти наборы данных имеют разное количество кластеров и распределений данных.
load fcmdata dataset = fcmdata3;
Настройте параметры алгоритма кластеризации. Для получения дополнительной информации об этих настройках смотрите fcm
. Чтобы получить точные результаты кластеризации для каждого набора данных, попробуйте различные опции кластеризации.
Укажите количество вычисляемых кластеров, которое должно быть больше 1
.
N = 4;
Задайте экспоненту нечеткой матрицы разбиения, которая управляет степенью нечеткого перекрытия между кластерами. Это значение должно быть больше 1, с меньшими значениями, создающими более четкие контуры кластера. Для получения дополнительной информации см. «Настройка нечеткого перекрытия в нечеткой кластеризации C-Means».
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
значение, переход от максимального полного членства в кластере к нулевому членству в кластере становится более крутым; то есть контур кластера становится более четкой.