Нечеткие C-средства, кластеризирующиеся для ирисовых данных

Этот пример показывает, как использовать нечеткие c-средние-значения, кластеризирующиеся для ирисового набора данных. Этот набор данных был собран ботаником Эдгаром Андерсоном и содержит случайные выборки цветов, принадлежащих трем разновидностям ирисовых цветов: setosa, versicolor, и virginica. Для каждой из разновидностей набор данных содержит 50 наблюдений для длины чашелистика, ширины чашелистика, лепестковой длины и лепестковой ширины.

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

Загрузите набор данных из файла данных iris.dat.

load iris.dat

Разделите данные в три группы под названием setosa, versicolor и virginica.

setosaIndex = iris(:,5)==1;
versicolorIndex = iris(:,5)==2;
virginicaIndex = iris(:,5)==3;

setosa = iris(setosaIndex,:);
versicolor = iris(versicolorIndex,:);
virginica = iris(virginicaIndex,:);

Отобразите данные на графике в 2D

Ирисовые данные содержат четыре размерности, представляющие длину чашелистика, ширину чашелистика, лепестковую длину и лепестковую ширину. Постройте точки данных для каждой двухмерной комбинации.

Characteristics = {'sepal length','sepal width','petal length','petal width'};
pairs = [1 2; 1 3; 1 4; 2 3; 2 4; 3 4];

for i = 1:6
    x = pairs(i,1); 
    y = pairs(i,2);   
    subplot(2,3,i)
    plot([setosa(:,x) versicolor(:,x) virginica(:,x)],...
         [setosa(:,y) versicolor(:,y) virginica(:,y)], '.')
    xlabel(Characteristics{x})
    ylabel(Characteristics{y})
end

Параметры Setup

Задайте опции для кластеризации данных с помощью нечеткой c-средней кластеризации. Эти опции:

  • Nc — Количество кластеров

  • M Нечеткая матричная экспонента раздела, которая указывает на степень нечеткого перекрытия между кластерами. Для получения дополнительной информации смотрите, Настраивают Нечеткое Перекрытие в Нечеткой Кластеризации C-средств.

  • maxIter — Максимальное количество итераций. Остановки процесса кластеризации после этого количества итераций.

  • minImprove — Минимальное улучшение. Процесс кластеризации останавливается, когда улучшение целевой функции между двумя последовательными итерациями является меньше, чем это значение.

Nc = 3;
M = 2.0;
maxIter = 100;
minImprove = 1e-6;

Для получения дополнительной информации об этих опциях и нечетком c-среднем алгоритме, смотрите fcm.

Вычислите кластеры

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

В каждой итерации кластеризации вычисляет fcm, кластер сосредотачивает и обновляет нечеткую матрицу раздела использование расчетных центральных местоположений. Это затем вычисляет значение целевой функции.

Кластеризируйте данные, отображая значение целевой функции после каждой итерации.

clusteringOptions = [M maxIter minImprove true];
[centers,U] = fcm(iris,Nc,clusteringOptions);
Iteration count = 1, obj. fcn = 28838.424340
Iteration count = 2, obj. fcn = 21010.880067
Iteration count = 3, obj. fcn = 15272.280943
Iteration count = 4, obj. fcn = 11029.756194
Iteration count = 5, obj. fcn = 10550.015503
Iteration count = 6, obj. fcn = 10301.776800
Iteration count = 7, obj. fcn = 9283.793786
Iteration count = 8, obj. fcn = 7344.379868
Iteration count = 9, obj. fcn = 6575.117093
Iteration count = 10, obj. fcn = 6295.215539
Iteration count = 11, obj. fcn = 6167.772051
Iteration count = 12, obj. fcn = 6107.998500
Iteration count = 13, obj. fcn = 6080.461019
Iteration count = 14, obj. fcn = 6068.116247
Iteration count = 15, obj. fcn = 6062.713326
Iteration count = 16, obj. fcn = 6060.390433
Iteration count = 17, obj. fcn = 6059.403978
Iteration count = 18, obj. fcn = 6058.988494
Iteration count = 19, obj. fcn = 6058.814438
Iteration count = 20, obj. fcn = 6058.741777
Iteration count = 21, obj. fcn = 6058.711512
Iteration count = 22, obj. fcn = 6058.698925
Iteration count = 23, obj. fcn = 6058.693695
Iteration count = 24, obj. fcn = 6058.691523
Iteration count = 25, obj. fcn = 6058.690622
Iteration count = 26, obj. fcn = 6058.690247
Iteration count = 27, obj. fcn = 6058.690092
Iteration count = 28, obj. fcn = 6058.690028
Iteration count = 29, obj. fcn = 6058.690001
Iteration count = 30, obj. fcn = 6058.689990
Iteration count = 31, obj. fcn = 6058.689985
Iteration count = 32, obj. fcn = 6058.689983
Iteration count = 33, obj. fcn = 6058.689983

Кластеризирующиеся остановки, когда улучшение целевой функции ниже заданного минимального порога.

Постройте вычисленные кластерные центры как полужирные числа.

for i = 1:6
    subplot(2,3,i);
    for j = 1:Nc
        x = pairs(i,1);
        y = pairs(i,2);
        text(centers(j,x),centers(j,y),int2str(j),'FontWeight','bold');
    end
end

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

Похожие темы