MATLAB K-means聚類的介紹與使用
阿新 • • 發佈:2019-01-08
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聚類演算法採用的是將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
程式結果: