Квазислучайные данные кластера, использующие нечеткую C-среднюю кластеризацию

В этом примере показано, как кластеризация FCM работает с использованием квазислучайных двумерных данных.

Загрузите набор данных и постройте график.

load fcmdata.dat
plot(fcmdata(:,1),fcmdata(:,2),'o')

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

Далее активируйте функцию командной строки, 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 содержит историю целевой функции через итерации.

The fcm функция является циклом итерации, созданным поверх следующих стандартных программ:

  • initfcm - инициализирует задачу

  • distfcm - выполняет вычисление Евклидова расстояния

  • stepfcm - выполняет одну итерацию кластеризации

Чтобы просмотреть прогресс кластеризации, постройте график целевой функции.

figure
plot(objFcn)
title('Objective Function Values')   
xlabel('Iteration Count')
ylabel('Objective Function Value')

Figure contains an axes. The axes with title Objective Function Values contains an object of type line.

Наконец, постройте график двух центров кластеров, найденных 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)

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

Примечание: Каждый раз, когда вы запускаете этот пример, fcm функция инициализируется с различными начальными условиями. Это поведение меняет порядок, в котором вычисляются и строятся центры кластеров.

См. также

Похожие темы