Нечеткая кластеризация 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

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

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

Похожие темы