Этот пример показывает, как использовать нечеткие 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,:);
Ирисовые данные содержат четыре размерности, представляющие длину чашелистика, ширину чашелистика, лепестковую длину и лепестковую ширину. Постройте точки данных для каждой двухмерной комбинации.
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-средней кластеризации. Эти опции:
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