當前位置:妙知谷 >

遊戲數碼 >電腦 >

matlab對一維數據進行K-means聚類離散化並顯示

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中語句的後綴也需要與表格後綴相同。

  • 文章版權屬於文章作者所有,轉載請註明 https://miaozhigu.com/sm/diannao/k9q94l.html