1. 程式人生 > >MATLAB聚類 自適應 從類別數目的選擇到聚類

MATLAB聚類 自適應 從類別數目的選擇到聚類

聚類是很快的,所以不需要自適應,只需要[1.....N]個類中心,遍歷一遍,得到N個評估值,[1.....N]選一個最好的類中心數目即可。

類中心個數的評估:

eva = evalclusters(mat,'kmeans','CalinskiHarabasz',...
    'klist',[1:6])
eva = evalclusters(mat,'linkage','CalinskiHarabasz',...
    'klist',[1:6])
eva = evalclusters(mat,'gmdistribution','CalinskiHarabasz',...
    'klist',[1:6])

mat------你自己的要聚類的資料,(n*d)每行是一個樣本。

'kmeans'-----這裡是聚類演算法,kmeans大家都知道。linkage是針對有層次資料的聚類演算法,而gmd是高斯混合聚類。

'CalinskiHarabasz'-------是聚類的評價標準,還有另外 三個選項:

'DaviesBouldin''gap''silhouette'

那麼,假如你已經用這個演算法得到了結果,關鍵問題就變成了怎麼挑選最佳聚類中心數目。

klist-----聚類中心的範圍。

挑選聚類中心

同樣的資料,不同的評價標準,都是kmeans聚類方式。

‘CalinskiHarabasz(CH)'挑選拐點,所以這張圖的聚類中心是20.,為了看不同的同學,我給出程式碼:

plot(eva.CriterionValues)

'DaviesBouldin'最大值點,拐點,所以可以選擇20-40之間。

聚類標準含義

'DaviesBouldin'(DB)標準以及CH標準

聚類程式碼

[IDX,C,SUMD,D]=kmeans(mat(label==class,:),C_amount);
[IDX,C,SUMD,D]=kmeans(mat,C_amount);

mat就是你要聚類的資料,n*d,返回值:

 [IDX, C] = kmeans(X, K) returns the K cluster centroid locations in
    the K-by-P matrix C.
 
    [IDX, C, SUMD] = kmeans(X, K) returns the within-cluster sums of
    point-to-centroid distances in the K-by-1 vector sumD.
 
    [IDX, C, SUMD, D] = kmeans(X, K) returns distances from each point
    to every centroid in the N-by-K matrix D.