Этот пример показывает, как кластеризация FCM работает с помощью квазислучайных двумерных данных.
Загрузите набор данных и постройте его.
load fcmdata.dat plot(fcmdata(:,1),fcmdata(:,2),'o')
Затем, вызовите функцию командной строки, fcm
, чтобы найти два кластера в этом наборе данных, пока целевая функция больше не уменьшится очень вообще.
[center,U,objFcn] = fcm(fcmdata,2);
Iteration count = 1, obj. fcn = 8.970479 Iteration count = 2, obj. fcn = 7.197402 Iteration count = 3, obj. fcn = 6.325579 Iteration count = 4, obj. fcn = 4.586142 Iteration count = 5, obj. fcn = 3.893114 Iteration count = 6, obj. fcn = 3.810804 Iteration count = 7, obj. fcn = 3.799801 Iteration count = 8, obj. fcn = 3.797862 Iteration count = 9, obj. fcn = 3.797508 Iteration count = 10, obj. fcn = 3.797444 Iteration count = 11, obj. fcn = 3.797432 Iteration count = 12, obj. fcn = 3.797430
center
содержит координаты двух кластерных центров, U
содержит классы членства для каждой из точек данных, и objFcn
содержит историю целевой функции через итерации.
Функция fcm
является циклом итерации, созданным сверх следующих стандартных программ:
initfcm
- инициализирует проблему
distfcm
- выполняет Евклидов расчет расстояния
stepfcm
- выполняет одну итерацию кластеризации
Чтобы просмотреть прогресс кластеризации, постройте целевую функцию.
figure plot(objFcn) title('Objective Function Values') xlabel('Iteration Count') ylabel('Objective Function Value')
Наконец, постройте два кластерных центра, найденные функцией fcm
. Крупные символы в графике указывают на кластерные центры.
maxU = max(U); index1 = find(U(1,:) == maxU); index2 = find(U(2,:) == maxU); figure line(fcmdata(index1,1), fcmdata(index1,2), 'linestyle',... 'none','marker', 'o','color','g') line(fcmdata(index2,1),fcmdata(index2,2),'linestyle',... 'none','marker', 'x','color','r') hold on plot(center(1,1),center(1,2),'ko','markersize',15,'LineWidth',2) plot(center(2,1),center(2,2),'kx','markersize',15,'LineWidth',2)
Примечание: Каждый раз, когда вы запускаете этот пример, функция fcm
инициализирует с различными начальными условиями. Это поведение подкачивает порядок, в котором кластерные центры вычислены и построены.