В этом примере показано, как использовать нечеткую кластеризацию c-means для набора данных радужки. Этот набор данных был собран ботаником Эдгаром Андерсоном и содержит случайные образцы цветков, принадлежащих трем видам цветков радужки: сетозе, версиколору и 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,:);
Данные радужки содержат четыре измерения, представляющие длину чашелистика, ширину чашелистика, длину лепестка и ширину лепестка. Постройте график точек данных для каждой комбинации двух размеров.
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
Укажите параметры кластеризации данных с помощью нечеткой кластеризации c-means. Ниже перечислены следующие варианты:
Nc - Количество кластеров
M - экспонента матрицы нечеткого разбиения, которая указывает степень нечеткого перекрытия между кластерами. Дополнительные сведения см. в разделе Настройка нечеткого перекрытия в кластеризации нечетких C-средств.
maxIter - максимальное число итераций. Процесс кластеризации останавливается после этого числа итераций.
minImprove - Минимальное улучшение. Процесс кластеризации останавливается, когда улучшение целевой функции между двумя последовательными итерациями меньше этого значения.
Nc = 3; M = 2.0; maxIter = 100; minImprove = 1e-6;
Для получения дополнительной информации об этих опциях и нечетком алгоритме c-means см. fcm.
Нечеткая кластеризация c-means является итеративным процессом. Первоначально, 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
