📄 fuzzycmean.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 + -