dbscan聚类算法matlab_MATLAB实现k++聚类算法

这篇博客介绍了如何在MATLAB中实现dbscan和k++两种聚类算法,特别提到了3维数据的可视化处理,提供了相应的代码供读者参考。
摘要由CSDN通过智能技术生成

以前写的,今天翻到了。

3维指标可以实现绘图,有需要代码自取。

A=input("请输入需要聚类的矩阵A=");
color={'r*','y*','b*','g*','p*'};
%%定义不同类颜色
K=input("请输入聚类的簇数k=");
choose=input("指标在列(1)/行(2)上");
if choose~=1
    A=A';
end
[m,n]=size(A);
disp(["共有",num2str(m),"个样本",num2str(n),"个指标"]);
if n<=3
    plot3(A(:,1),A(:,2),A(:,3),"bo");
    hold on;
end
disp("根据k++的特点随机选取K个相隔尽可能远的簇类")
I=zeros(1,K);%%初始化K个聚类中心
I(1)=randi([1,m],1,1);%%从m个样本点中随机抽取一个样本点作为初始聚类中心
plot3(A(I(1),1),A(I(1),2),A(I(1),3),"ro");%%标记聚类中心
center=A(I(1),:);
d=ones(K,m)*inf;%%初始化距离矩阵
for k=1:K
    d(k,:)=zeros(1,m);
    for j=1:m
        d(k,j)=d(k,j)+sum((center-A(j,:)).^2);    
        %%第k个聚类中心距离各个样本点的距离
    end
    prob=min(d)./sum(min(d));    %%距离-概率 
    if k+1<=K
        I(k+1)=randsrc(1,1,[1:m;prob]);
        center=A(I(k+1),:);
        plot3(A(I(k+1),1),A(I(k+1),2),A(I(k+1),3),"ro");
    end
end
hold off;
for i=1:K
    center(i,:)=A(I(i),:);  %%转移聚类中心
end
count=input("请输入最大迭代次数count=");
class=zeros(count,m);%%存放每一次迭代后的结果
for each=1:count
    for i=1:K
         for j=1:m
             d(i,j)=sum((A(j,:)-center(i,:)).^2);
             %%d(i,j)表示第i类与第j个样本之间的距离
         end
    end
    [min,class(each,:)]=min(d);%%找出距离聚类中心最近的每个样本的类
    clear min;
    for i=1:m
        if n==3
            plot3(A(i,1),A(i,2),A(i,3),char(color(class(each,i))));
            hold on;
        end
    end
   if each>1            %%防止数组越界
        if class(each,:)==class(each-1,:)
        break
        end
   end
   pause(0.5)
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值