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

Этот пример показывает, как выполнить нечеткую кластеризацию c-означает на 2-мерных данных. Для примера, который кластеризует данные более высокой размерности, см. «Нечеткая кластеризация C-средств» для данных Iris.

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

The fcm функция выполняет кластеризацию FCM. Он начинается со случайного начального предположения для центров кластера; это среднее местоположение каждого кластера. Далее, fcm присваивает каждой точке данных случайный класс принадлежности для каждого кластера. Путем итерационного обновления центров кластеров и классов принадлежности для каждой точки данных, fcm перемещает центры кластеров в правильное место в наборе данных и для каждой точки данных находит степень принадлежности к каждому кластеру. Эта итерация минимизирует целевую функцию, которая представляет расстояние от любой заданной точки данных до центра кластера, взвешенное принадлежностью этой точки данных в кластере.

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

Загрузите пять выборочных наборов данных и выберите набор данных в кластер. Эти наборы данных имеют разное количество кластеров и распределений данных.

load fcmdata
dataset = fcmdata3;

Настройка параметров FCM

Настройте параметры алгоритма кластеризации. Для получения дополнительной информации об этих настройках смотрите 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

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

Точки данных в каждом кластере показаны в разных цветах. Центр для каждого кластера показан черным цветом 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)

Figure contains an axes. The axes contains an object of type surface.

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

См. также

Похожие темы