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

В этом примере показано, как выполнить нечеткие c-средние-значения, кластеризирующиеся на 2-мерных данных. Для примера, что кластеры более многомерные данные, смотрите, что Нечеткие C-средние-значения Кластеризируются для Ирисовых Данных.

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

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

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

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

load fcmdata
dataset = fcmdata3;

Задайте настройки FCM

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

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 значение, переход от максимального полного кластерного членства, чтобы обнулить кластерное членство становится более крутым; то есть, кластерный контур становится большим количеством хрустящего картофеля.

Смотрите также

Похожие темы