matlab中聚类代码,减聚类算法代码

% 设置初始参数

load datanew;

delta_a = 18;

epsilon = 6;

delta_min = delta_a;

X = datanew(:,1:4); %聚类数据样本

[L,M] = size(X);

% 聚类算法开始

c = 1;

Dsave = [];

for i = 1:L

Di = 0;

for j = 1:L

D0 = exp(-(X(i,:)-X(j,:))*(X(i,:)-X(j,:))'/(delta_a/2)^2);

Di = D0+Di;

end

Dsave(i,:) = Di; % 保存每一次计算得到的密度值

end

D1_c = max(Dsave); % 计算得到第一个最大密度值

i_c = find(Dsave==D1_c);

X_c(1,:) = X(i_c,:); % 计算得到第一个聚类中心并保存

n = 1;

while (D1_c>epsilon)

delta_b = 1.5*delta_a; % 调整参数

for m = 1:L

Dsave_c(m,:) = Dsave(m,n)-D1_c*exp(-(X(m,:)-X_c(n,:))*(X(m,:)-X_c(n,:))'/(delta_b/2)^2);

end

Dsave(:,n+1) = Dsave_c; % 保存每一次计算得到的密度值到矩阵Dsave

D1_c = max(Dsave_c);

i_c = find(Dsave_c==D1_c);

X_c(n+1,:) = X(i_c,:); %保存每一次计算得到的聚类中心

n = n+1;

end

Nsave(c,:) = n;

Xsave(:,:,c) = X_c;

Jm0 = 0;

for i = 1:L

Jm0_middle = 0;

for j = 1:n

mu_fenmu0 = 0;

for k = 1:n

mu_fenmu = epsilon+mu_fenmu0+((X(i,:)-X_c(j,:))*(X(i,:)-X_c(j,:))')/((X(i,:)-X_c(k,:))*(X(i,:)-X_c(k,:))'+epsilon);

mu_fenmu0 = mu_fenmu;

end

mu = 1/mu_fenmu0;

Jm_middle = Jm0_middle+mu^2*(X(i,:)-X_c(j,:))*(X(i,:)-X_c(j,:))';

Jm0_middle = Jm_middle;

end

Jm = Jm0+Jm_middle;

Jm0 = Jm;

end

Jmsave(c,:) = Jm;

c = c+1;

X_c

if X_c(n-1,:) == X_c(end,:)

X_cnew = X_c(1:n-1,:);

else

X_cnew = X_c;

end

X_cnew

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值