1. 程式人生 > >MATLAB K-means聚類的介紹與使用

MATLAB K-means聚類的介紹與使用

K-means演算法是硬聚類演算法,是典型的基於原型的目標函式聚類方法的代表,它是資料點到原型的某種距離作為優化的目標函式,利用函式求極值的方法得到迭代運算的調整規則。K-means演算法以偶是距離作為相似度測度,它是求對應某一初始聚類中心向量V最優分類,使得評價指標J最小。演算法採用誤差平方和準則函式作為聚類準則函式
    K-means聚類演算法採用的是將N*P的矩陣X劃分為K個類,使得類內物件之間的距離最大,而類之間的距離最小。
使用方法:
      Idx=Kmeans(X,K)
      [Idx,C]=Kmeans(X,K) 
      [Idx,C,sumD]=Kmeans(X,K) 

      [Idx,C,sumD,D]=Kmeans(X,K) 
      […]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)
各輸入輸出引數介紹:
       X :N*P的資料矩陣
       K: 表示將X劃分為幾類,為整數
       Idx :N*1的向量,儲存的是每個點的聚類標號
       C: K*P的矩陣,儲存的是K個聚類質心位置
      sumD 1*K的和向量,儲存的是類間所有點與該類質心點距離之和
      D N*K的矩陣,儲存的是每個點與所有質心的距離
      […]=Kmeans(…,'Param1',Val1,'Param2',Val2,…)

      這其中的引數Param1、Param2等,主要可以設定為如下:
      1. ‘Distance’(距離測度)
        ‘sqEuclidean’ 歐式距離(預設時,採用此距離方式)
        ‘cityblock’ 絕度誤差和,又稱:L1
        ‘cosine’ 針對向量
        ‘correlation’  針對有時序關係的值
        ‘Hamming’ 只針對二進位制資料
      2. ‘Start’(初始質心位置選擇方法)
        ‘sample’ 從X中隨機選取K個質心點
        ‘uniform’ 根據X的分佈範圍均勻的隨機生成K個質心

        ‘cluster’ 初始聚類階段隨機選擇10%的X的子樣本(此方法初始使用’sample’方法)
         matrix 提供一K*P的矩陣,作為初始質心位置集合
      3. ‘Replicates’(聚類重複次數)  整數
                   這個部落格很好,忘記了就參考這個!

深入淺出K-Means演算法-CSDN.NET  http://www.csdn.net/article/2012-07-03/2807073-k-means

使用Matlab自帶K-means的示例:

%隨機獲取150個點
X = [randn(50,2)+ones(50,2);randn(50,2)-ones(50,2);randn(50,2)+[ones(50,1),-ones(50,1)]];
opts = statset('Display','final');

%呼叫Kmeans函式
%X N*P的資料矩陣
%Idx N*1的向量,儲存的是每個點的聚類標號
%Ctrs K*P的矩陣,儲存的是K個聚類質心位置
%SumD 1*K的和向量,儲存的是類間所有點與該類質心點距離之和
%D N*K的矩陣,儲存的是每個點與所有質心的距離;

[Idx,Ctrs,SumD,D] = kmeans(X,3,'Replicates',3,'Options',opts);

%畫出聚類為1的點。X(Idx==1,1),為第一類的樣本的第一個座標;X(Idx==1,2)為第二類的樣本的第二個座標
plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',14)
hold on
plot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',14)
hold on
plot(X(Idx==3,1),X(Idx==3,2),'g.','MarkerSize',14)

%繪出聚類中心點,kx表示是圓形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)

legend('Cluster 1','Cluster 2','Cluster 3','Centroids','Location','NW')

Ctrs
SumD
程式結果: