目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

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

K-means聚类算法采用误差平方和准则函数作为聚类准则函数,误差平方和准则函数定义为:

和准则函数可以看出E是样本与聚类中心差异度之和的函数,样本集X给定的情况下E的值取决于c个聚类中心。E描述n个样本聚类成c个类时所产生的总的误差平方和。显然,若E值越大,说明误差越大,聚类结果越不好。因此,我们应该寻求使E值最小的聚类结果,即误差平方和准则的最优结果。这种聚类通常称为最小误差划分。

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

K-means聚类算法步骤主要如下所示:

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

上述算法流程图说明,K-means算法首先需要初始化,即随机选择K个点作为聚类中心点;然后开始做循环操作,根据簇中对象的平均值,将每个对象赋给最类似的簇;然后开始更新簇的平均值,即计算每个对象簇中对象的平均值。

从上面的算法思想和流程,不难看出,k个初始聚类中心点的选取对聚类结果具有较大的影响,因为在该算法中是随机地任意选取k个点作为初始聚类中心,初始的代表一个簇。如果有先验知识,可以选取具有代表性的点。

整个算法的复杂度为O(mkt),整个数据集中的对象数为m;把整个数据集划分为k类;聚类过程中的迭代次数为t;要求k<m。该算法对于数据集中的数据实际类型间有明显差别,聚类的效果比较好,对于差别不是很大的,聚类结果可能有一定的误差。

改进kmeans方案如下:

首先计算整个数据集合的平均值点,作为第一个初始聚类中心C1;

然后分别计算所有对象到C1的欧式距离d,并且计算每个对象在半径R的范围内包含的对象个数W。

此时计算P=u*d+(1-u)*W,所得到的最大的P值所对应的的对象作为第二个初始聚类中心C2。

同样的方法,分别计算所有对象到C2的欧式距离d,并且计算每个对象在半径R的范围内包含的对象个数W,所得到的最大的P值所对应的的对象作为第二个初始聚类中心C3。

从这三个初始聚类中心开始聚类划分。对于一个待分类的对象,计算它到现有聚类中心的距离,若(这个距离)<(现有各个聚类中心距离的最小值),则将这个待分类对象分到与它相距最近的那一类;如果(这个距离)>(现有各个聚类中心距离的最小值),则这个待分类对象就自成一类,成为一个新的聚类中心,然后对所有对象重新归类。

如果找到新的聚类中心,在重新计算聚类的中心后。对目前形成的K+1 个聚类计算 DBInew 的值,和未重新分配对象到这 k+1 个类之前计算的 DBIold进行比较,如果 DBInew <DBIold,则这个新找到的聚类中心可以作为新的聚类中心,否则将终止本次查找 k 的工作,并恢复到 DBIold 的状态。当所有这样符合新类产生条件的数据对象的 DBI 值都大于 DBIold 时,则确定再没有新的类产生,则确定了最终聚类个数为 k,可以进行最终的分配对象工作。

二、核心程序

clc;
clear;
close all;
warning off;
RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));Dat              = xlsread('data.xls');
Feature          = zeros(size(Dat));
Feature(:,2:end) = Dat(:,2:end);  KCluster         = 6;
X                = Feature(:,2:end);cidx             = func_cmeans(X',KCluster);Feature(:,1)     = cidx'; %计算五列重的权值最大的两个
W                = mean(X,1);
[V,I]            = sort(W);
%选择权值最大的两个进行画图
K1=I(end);
K2=I(end-1);figure;
plot(X(cidx==1,K1),X(cidx==1,K2),'ro', ...X(cidx==2,K1),X(cidx==2,K2),'bo', ...X(cidx==3,K1),X(cidx==3,K2),'ko', ...X(cidx==4,K1),X(cidx==4,K2),'mo', ...X(cidx==5,K1),X(cidx==5,K2),'mo', ...X(cidx==6,K1),X(cidx==6,K2),'co');
hold on;if KCluster == 2legend('类别1','类别2','聚类中心点');
end
if KCluster == 3legend('类别1','类别2','类别3','聚类中心点');
end
if KCluster == 4legend('类别1','类别2','类别3','类别4','聚类中心点');
end
if KCluster == 5legend('类别1','类别2','类别3','类别4','类别5','聚类中心点');
end
if KCluster == 6legend('类别1','类别2','类别3','类别4','类别5','类别6','聚类中心点');
end

三、测试结果

分为2类:

分为3类:

分为4类:

分为5类:

从上面的分类结果可知,采用传统的分类方法可知,由于无法确定分类数目的K的值,因此,在设置不同的分类结果之后,会得到不同的分类结果。

A05-27

基于MATLAB的Kmeans聚类算法的仿真与分析相关推荐

  1. 基于MATLAB的K-means聚类算法

    实验数据说明 Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa(山鸢尾),Versicolour(杂色鸢尾),V ...

  2. 【MATLAB教程案例27】基于matlab的图像配准算法的仿真与分析——sift,surf,kaze等

    FPGA教程目录 MATLAB教程目录 目录 1.软件版本 2.图像配准理论概述 3.基于sift特征提取的图像配准

  3. Matlab实现K-Means聚类算法

    原文地址为: Matlab实现K-Means聚类算法 人生如戏!!!! 一.理论准备 聚类算法,不是分类算法.分类算法是给一个数据,然后判断这个数据属于已分好的类中的具体哪一类.聚类算法是给一大堆原始 ...

  4. 【老生谈算法】matlab实现Kmeans聚类算法源码——Kmeans聚类算法

    matlab实现Kmeans聚类算法代码实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab实现Kmeans聚类 ...

  5. 基于K-means聚类算法进行客户人群分析

    摘要:在本案例中,我们使用人工智能技术的聚类算法去分析超市购物中心客户的一些基本数据,把客户分成不同的群体,供营销团队参考并相应地制定营销策略. 本文分享自华为云社区<基于K-means聚类算法 ...

  6. matlab中kmeans聚类算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xholes/article/details/52911781 </div><lin ...

  7. 基于GPU的K-Means聚类算法

    聚类是信息检索.数据挖掘中的一类重要技术,是分析数据并从中发现有用信息的一种有效手段.它将数据对象分组成为多个类或簇,使得在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别很大.作为统计学的 ...

  8. 基于C++的K-means聚类算法实现

    1.   简介: K-MEANS算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准k个聚类的一种算法.k-means 算法接受输入量 k :然后将n个数据对象划分为 k个聚类以 ...

  9. 【智能泊车】基于MATLAB的智能泊车算法的仿真

    %约束空间生成 if((sqrt((x0-xd+r)^2+(y0-yd)^2)-3*r)>0)fprintf('距离过远,最小半径泊车方法无法泊车\n'); return; end if((t1 ...

最新文章

  1. python文件读写_python文件操作-读写删除复制总结
  2. 【美国】谷歌重返机器人背后有何深意?
  3. Kafka系列一之架构介绍和安装
  4. eclipse 集成 github
  5. python动态柱状图_python – 在Jupyter中使用plotly以离线模式创建动画图表
  6. 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...
  7. Managed Metadata Service介绍系列 之三
  8. 我的Thinkpad T410最近老是出Fan error
  9. put url带参数_避免自己写的 url 被diss!建议看看这篇RESTful API简明教程!
  10. 华为轮值董事长郭平2020全联接大会主题演讲:永远面向阳光,阴影甩在身后
  11. Python 机器学习:多元线性回归
  12. 了解java虚拟机mdash;串行回收器(6)
  13. caffe c++实战:通过训练好的模型对人脸图像进行特征提取(单张图像)
  14. 探秘阿里聚石塔技术架构实现(一)
  15. BZOJ4134: ljw和lzr的hack比赛
  16. 网络狂飙(netspeeder) v3.28 游戏版 怎么用
  17. android 无线传递文件夹,android 通过WIFI实现文件传输
  18. php 360全景,HTML5 Canvas实现360度全景方法
  19. [EI检索]2022智能制造、先进传感与大数据国际会议诚邀您关注
  20. java获取两个时间之间的所有日期、月份、年份,返回列表

热门文章

  1. Windows Server 2008 安装SVN
  2. Already included file name #2372
  3. 华南师范大学计算机学硕考研,【20计算机考研】二战师兄经验贴,让你少走弯路!...
  4. Skyline 7 版本TerraExplorer Pro二次开发快速入门
  5. limma包的使用技巧
  6. 解析错误“[RPC Fault faultString= faultCode=400 faultDetail='sr' parameter is invalid]”
  7. Windows Server VS Windows,两者有啥区别?
  8. 关于京牌“以家庭为单位摇号”“京牌可以继承”的不合理性分析
  9. jzoj 5906. 【NOIP2018模拟10.15】传送门(树形dp)
  10. ctf-web-No one knows regex better than me