基于改进K-means的网络数据聚类算法matlab仿真

改进的K-means聚类算法及其MATLAB实现,
文章详细介绍了K-means聚类算法的工作原理,强调了其对初始值的敏感性,并提出改进算法以解决这些问题。还展示了在MATLAB2022a中运行的核心程序和算法流程。

目录

1.程序功能描述

2.测试软件版本以及运行结果展示

3.核心程序

4.本算法原理

5.完整程序


1.程序功能描述

        K-means属于聚类分析中一种基本的划分方法,常采用误差平方和准则函数作为聚类准则。主要优点是算法简单、快速而且能有效地处理大数据集。研究和分析了聚类算法中的经典K-均值聚类算法,总结出其优点和不足。重点分析了K-均值聚类算法对初始值的依赖性,并用实验验证了随机选取初始值对聚类结果的影响性。根据传统的K-means算法存在的缺陷,提出了改进后的K-means算法,主要解决了孤点对聚类中心影响的问题以及K值的确认问题。

2.测试软件版本以及运行结果展示

MATLAB2022a版本运行

3.核心程序

........................................................
for  Cluster_Num = 2 : K_start
     Cluster_Num
     flags       = 0;
     Step        = 4000;
     disp('K值分类');
     %随机化定义聚类中心点
     Center      = Data_NoGD(:,1:Cluster_Num);
     %进行初始的迭代
     [KindData,KindNum] = func_Kmeans_Cluster(Center,Data_NoGD);
     NewCenter          = func_NewCenter(KindData,KindNum,row);
     %进行K值分类
     while (sum(sum(NewCenter ~= Center))) & Step
           Center             = NewCenter;
           [KindData,KindNum] = func_Kmeans_Cluster(Center,Data_NoGD);
           NewCenter          = func_NewCenter(KindData,KindNum,row);
           Step               = Step-1;
     end
     %计算距离代价
     disp('计算距离代价');
     %计算L
     disp('计算L');
     xl = NewCenter(1,:);
     yl = NewCenter(2,:);
     for j = 1 : Cluster_Num
         L(j) = sqrt((Xavg - xl(j))^2 + (Yavg - yl(j))^2);
     end
     

     
     Lsum(Cluster_Num - 1) = sum(L)*Cluster_Num;
     disp('计算D');
     %计算D
     for j = 1:Cluster_Num
         KindData_tmpx = KindData(1,:,j);
         KindData_tmpy = KindData(2,:,j);
         %去掉其中的0数值
         KindData_tmp = [KindData_tmpx;KindData_tmpy];
         if isempty(KindData_tmp) == 1
             D(i,j) = inf;
         else
             %开始统计
             for i = 1:length(KindData_tmp)
                 D(i,j) =  sqrt((KindData_tmp(1,i) - xl(j))^2 + (KindData_tmp(2,i) - yl(j))^2);
             end
         end
         clear KindData_tmp KindData_tmpx KindData_tmpy
     end
     

     Dsum(Cluster_Num - 1) = sum(sum(D))/Cluster_Num;
     %计算F(K)
     disp('计算F');
     F(Cluster_Num - 1) = Lsum(Cluster_Num - 1) + Dsum(Cluster_Num - 1);
     F
     
     
     if isfinite(F(Cluster_Num - 1)) == 0
        break;
     else

     end     
     
     
     pause(1)
     clear tmp Center KindData KindNum NewCenter Step xl yl L D 
     
end

[V,IND] = min(F);
Kopt = IND+1;
fprintf('最佳聚类值K = ');
fprintf('%d',Kopt);
fprintf('\n\n');

%使用最新的K值进行聚类分析
Cluster_Num = Kopt;
[row,col]   = size(Data_NoGD);
Step        = 1000;
%定义三个聚类中心点
Center      = Data_NoGD(:,1:Cluster_Num);
%进行初始的迭代
[KindData,KindNum] = func_Kmeans_Cluster(Center,Data_NoGD);
NewCenter          = func_NewCenter(KindData,KindNum,row);
%进行据雷锋唔系
while (sum(sum(NewCenter ~= Center))) & Step
    Center             = NewCenter;
    [KindData,KindNum] = func_Kmeans_Cluster(Center,Data_NoGD);
    NewCenter          = func_NewCenter(KindData,KindNum,row);
    Step               = Step-1;
end

func_fig(Data_NoGD,Cluster_Num,KindData);  
12_005m

4.本算法原理

       K-means聚类算法基本思想,首先算法随机选取k个点作为初始聚类中心,然后计算各个数据对象到各聚类中心的距离,把数据对象归到离它最近的那个聚类中心所在的类;对调整后的新类计算新的聚类中心,如果相邻两次的聚类中心没有任何变化,说明数据对象调整结束,聚类准则Jc已经收敛。K-means聚类算法的一个特点是在每次迭代中都要考察每个样本的分类是否正确,若不正确,就要调整。在全部数据调整完后,再修改聚类中心,进入下一次迭代。如果在一次迭代算法中,所有的数据对象被正确分类,则不会有调整,聚类中心也不会有任何变化,这标志着Jc已经收敛,至此算法结束。本文重点对K-均值聚类算法进行了研究分析,并在K-均值聚类算法的基础上提出了改进。

       K-means聚类算法是硬聚类算法,是典型的基于原型的目标函数聚类分析算法点到原型——簇中心的某种距离和作为优化的目标函数,采用函数求极值的方法得到迭代运算的调整规则。K-means聚类算法以欧氏距离作为相异性测度它是求对应某一初始聚类中心向量最优分类,使得评价指标E值最小。

       误差平方和准则函数适用于各类样本比较集中而且样本数目悬殊不大的样本分布。当不同类型的样本数目相差较大时,采用误差平方和准则。很可能把样本数目多的类分开,以便达到总的误差平方和最小。

整个算法的基本流程如下图所示:

5.完整程序

VVV

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件算法开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值