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之間。
聚類標準含義
聚類程式碼
[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.