В этом примере показано, как выполнить нечеткие c-средние-значения, кластеризирующиеся на 2-мерных данных. Для примера, что кластеры более многомерные данные, смотрите Нечеткие C-средства Кластеризироваться для Ирисовых Данных.
Нечеткие 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
значение, переход от максимального полного кластерного членства, чтобы обнулить кластерное членство становится более крутым; то есть, кластерный контур становится большим количеством хрустящего картофеля.