Этот пример показывает, как использовать нечеткую 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-means. Эти опции:
Nc
- Количество кластеров
M - Нечеткая матричная экспонента разбиения, которая указывает на степень нечеткого перекрытия между кластерами. Для получения дополнительной информации см. «Настройка нечеткого перекрытия в нечеткой кластеризации C-Means».
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