Настройте нечеткое перекрытие в нечеткой кластеризации C-средств

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

Создайте случайный набор данных. Для воспроизводимости инициализируйте генератор случайных чисел к его значению по умолчанию.

rng('default')
data = rand(100,2);

Задайте нечеткие матричные экспоненты раздела.

M = [1.1 2.0 3.0 4.0];

Значения экспоненты в M должны быть больше, чем 1 с меньшими значениями, задающими более низкую степень нечеткого перекрытия. Другими словами, когда M приближается к 1, контуры между кластерами становятся большим количеством хрустящего картофеля.

Для каждой экспоненты перекрытия:

  • Кластеризируйте данные.

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

  • Найдите точки данных с максимальными значениями членства ниже 0.6. Эти точки имеют более нечеткую классификацию.

  • Чтобы определить количество степени нечеткого перекрытия, вычислите среднее максимальное значение членства через все точки данных. Более высокое среднее максимальное значение членства указывает, что существует менее нечеткое перекрытие.

  • Постройте кластеризирующиеся результаты.

for i = 1:4
    % Cluster the data.
    options = [M(i) NaN NaN 0];
    [centers,U] = fcm(data,2,options);
    
    % Classify the data points.
    maxU = max(U);
    index1 = find(U(1,:) == maxU);
    index2 = find(U(2,:) == maxU);
    
    % Find data points with lower maximum membership values.
    index3 = find(maxU < 0.6);
    
    % Calculate the average maximum membership value.
    averageMax = mean(maxU);
    
    % Plot the results.
    subplot(2,2,i)
    plot(data(index1,1),data(index1,2),'ob')
    hold on
    plot(data(index2,1),data(index2,2),'or')
    plot(data(index3,1),data(index3,2),'xk','LineWidth',2)
    plot(centers(1,1),centers(1,2),'xb','MarkerSize',15,'LineWidth',3)
    plot(centers(2,1),centers(2,2),'xr','MarkerSize',15,'LineWidth',3)
    hold off
    title(['M = ' num2str(M(i)) ', Ave. Max. = ' num2str(averageMax,3)])
end

Точка определенных данных классифицируется в кластер, для которого она имеет самое высокое значение членства, как обозначено maxU. Максимальное значение членства 0.5 указывает, что точка принадлежит обоим кластерам одинаково. Точки данных, отмеченные черным x, имеют максимальные значения членства ниже 0.6. Эти точки имеют большую степень неуверенности в их кластерном членстве.

Больше точек данных с низкими максимальными значениями членства указывает на большую степень нечеткого перекрытия в кластеризирующемся результате. Среднее максимальное значение членства, averageMax, предоставляет количественное описание перекрытия. Значение averageMax 1 указывает на четкие кластеры с меньшими значениями, указывающими на большее количество перекрытия.

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

Похожие темы