⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fuzzycmean.m

📁 实现了Fuzzy C-Mean的方法
💻 M
字号:
%%变量
% K ---- 聚类数目
% e ---- 终止条件
% N ---- 数据个数
% K ---- 数据维数
% Center ----- 每个类的中心
% U ---- 隶属度
% U_old ---- 旧的隶属度
% m ---- 大于1的实数

%% 初始化
clear all
load test.txt;
data = test(:,:);
K = 3; %总共聚为三类 改成2类效果会好一些
e = 0.001;

[N, D] = size(data);
U = rand(N, K);
for i = 1:N
    U(i,:) = U(i,:)/(sum(U(i,:)));
end
U_old = zeros(N, K);
Center = zeros(K, D);
n = 0;
m = 1.5;

%% 迭代
while (1)
    % 终止条件,并且输出,每个类的中心,隶属度,以及迭代次数
    if (norm(U - U_old) < e)
        Center
        U
        n
        break;
    % 迭代过程
    else
        % 计算每个类的中心点坐标        
        n = n + 1;
        for j = 1:K
            P = 0;
            for i = 1:N
                Center(j,:) = Center(j, :) + data(i,:)*(U(i,j)^m);
                P = P + (U(i,j)^m);
            end
            Center(j, :) = Center(j, :) / P;
        end
        
        % 更新U以及U_old
        U_old = U;
        for i = 1:N
            for j = 1:K
                temp1 = 0;
                temp2 = 0;
                temp = 0;
                for k = 1:K
                    temp1 = norm(data(i, :) - Center(j, :));
                    temp2 = norm(data(i, :) - Center(k, :));
                    temp = temp + (temp1/temp2)^(2/(m-1));
                end
                U(i,j) = 1/temp;
            end
        end        
    end    
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -