电脑

当前位置 /首页/游戏数码/电脑/列表

matlab对一维数据进行K-means聚类离散化并显示

目前,数据挖掘技术十分热门,数据挖掘中有一种关联规则挖掘方法,在关联规则挖掘前需要将采集的连续数据离散化才行。其中,K-means算法能够对连续数据进行聚类离散化。目前许多资料都是介绍的是对二维或多维数据进行聚类离散化,对一维数据进行K-means聚类离散化的方法基本没有介绍。下面分享给大家“matlab对一维数据进行K-means聚类离散化并显示”方法和程序,帮助大家更好地处理一维数据(一列数据)的聚类离散化。

操作方法

(01)首先,使用clc和clear命令清空matlab的命令窗口和工作区,然后使用xlsread函数将一维数据样本Excel表格中的数据读入到yw_data矩阵。注意表格后缀“”,因为有些表格的后缀为“xls”,程序xlsread中语句的后缀也需要与表格后缀相同。同时将yw_data数值矩阵赋值给xx数值矩阵,后面对xx数值矩阵进行操作,不动原始数据样本矩阵yw_data。程序如下:clc;clear;yw_data=xlsread('一维数据样本');      %读入一维数据样本到yw_data矩阵xx=yw_data;运行后检查一维数据样本中的数据是否读入到了yw_data数值矩阵中,下面是正常读入的结果。

matlab对一维数据进行K-means聚类离散化并显示

(02)数据读进来后,使用MATLAB自带的K-means聚类算法函数对一维数据进行分类。程序如下:clus=4;[idx,c]=kmeans(xx,clus);说明:clus=4是将数据分成4类;xx是刚刚读入的一维数据样本;idx是N*1矩阵,存储一维数据样本中每个数据的聚类标号;c存储的是各个聚类质心的位置运行程序后的结果如下图所示。

matlab对一维数据进行K-means聚类离散化并显示 第2张
matlab对一维数据进行K-means聚类离散化并显示 第3张

(03)聚类后,初始化四个空矩阵cc1、cc2、cc3和cc4,用于存储聚类后的四组数据。初始化空矩阵直接给矩阵赋值[ ]即可,程序如下:cc1=[];cc2=[];cc3=[];cc4=[];[n,m]=size(xx);其中[n,m]=size(xx)是计算一维数据样本的大小,用于后续索引。由于是一维的,所以计算后结果m应等于1,n为一维数据样本的行数。计算结果如下图所示。

matlab对一维数据进行K-means聚类离散化并显示 第4张

(04)初始化空矩阵cc1、cc2、cc3和cc4后就可以将聚类后的四类数据存储到相应矩阵中了,用于后续显示和按类分析。程序如下:for i=1:nif idx(i)==1cc1=[cc1;xx(i)];elseif idx(i)==2cc2=[cc2;xx(i)];elseif idx(i)==3cc3=[cc3;xx(i)];elseif idx(i)==4cc4=[cc4;xx(i)];endend说明:使用条件结构索引每个数据的聚类标号idx将一维数据样本中数据进行投框式存储。分类存储运行后的结果如下图所示。

matlab对一维数据进行K-means聚类离散化并显示 第5张

(05)当然,可以显示分类后的边界值和聚类中心,以便于观察分类各类界限和分布中心。程序如下:disp('第一类边界')[min(cc1),max(cc1)]disp('第二类边界')[min(cc2),max(cc2)]disp('第三类边界')[min(cc3),max(cc3)]disp('第四类边界')[min(cc4),max(cc4)]disp('四类中心')c说明:求边界下限使用min()函数,求边界上限使用max()函数,聚类中心直接存储在c矩阵中,c后面不写;号就可显示。运行结果如下。第一类边界ans =82.0200   99.2280 第二类边界 ans = 114.3840  128.5710第三类边界ans =99.2530  143.0310第四类边界ans =128.5930  144.3360四类中心c = 90.5653   120.8449   107.9135  136.3006

matlab对一维数据进行K-means聚类离散化并显示 第6张

(06)当然,光使用数值和矩阵表格显示计算结果还是不怎么直观的,直观显示聚类离散化结果最好的方法就是数据可视化了,即作图显示。作图显示聚类结果程序如下:h1=plot(xx,'w');grid on;hold on;for i=1:nif idx(i)==1text(i,xx(i),num2str(idx(i)),'color',[1 0 0]);elseif idx(i)==2text(i,xx(i),num2str(idx(i)),'color',[0 1 0]);elseif idx(i)==3text(i,xx(i),num2str(idx(i)),'color',[0 0 1]);elseif idx(i)==4text(i,xx(i),num2str(idx(i)),'color',[1 0 1]);endendylabel('一维样本数据值')xlabel('样本序列')说明:通过条件结构索引聚类标号在图上数据所在位置采用不同的颜色使用 text显示聚类标号,i,xx(i)是数据所在位置,num2str(idx(i))是将聚类标号转换为字符串才能在图中显示,'color',[* * *]是显示聚类标号的颜色,不同数字组合颜色不同,ylabel是在y轴标签,xlabel是x轴标签。运行后的结果如下图所示。

matlab对一维数据进行K-means聚类离散化并显示 第7张

(07)“matlab对一维数据进行K-means聚类离散化并显示”完整程序如下:%**************matlab对一维数据进行K-means聚类离散化并显示***********clc;clear;yw_data=xlsread('一维数据样本');      %读入一维数据样本到yw_data矩阵xx=yw_data;clus=4;[idx,c]=kmeans(xx,clus);cc1=[];cc2=[];cc3=[];cc4=[];[n,m]=size(xx);for i=1:nif idx(i)==1cc1=[cc1;xx(i)];elseif idx(i)==2cc2=[cc2;xx(i)];elseif idx(i)==3cc3=[cc3;xx(i)];elseif idx(i)==4cc4=[cc4;xx(i)];endenddisp('第一类边界')[min(cc1),max(cc1)]disp('第二类边界')[min(cc2),max(cc2)]disp('第三类边界')[min(cc3),max(cc3)]disp('第四类边界')[min(cc4),max(cc4)]disp('四类中心')ch1=plot(xx,'w');grid on;hold on;for i=1:nif idx(i)==1text(i,xx(i),num2str(idx(i)),'color',[1 0 0]);elseif idx(i)==2text(i,xx(i),num2str(idx(i)),'color',[0 1 0]);elseif idx(i)==3text(i,xx(i),num2str(idx(i)),'color',[0 0 1]);elseif idx(i)==4text(i,xx(i),num2str(idx(i)),'color',[1 0 1]);endendylabel('一维样本数据值')xlabel('样本序列')

matlab对一维数据进行K-means聚类离散化并显示 第8张

特别提示

对于多维数据聚类同样可以使用上面的程序。

注意表格后缀“”,因为有些表格的后缀为“xls”,程序xlsread中语句的后缀也需要与表格后缀相同。

TAG标签:MATLAB 聚类 一维 离散 #