MATLAB聚類有效性評價指標(內部) MATLAB聚類有效性評價指標(外部)MATLAB聚類有效性評價指標(外部 成對度量)
MATLAB聚類有效性評價指標(內部)
作者:凱魯嘎吉 - 部落格園 http://www.cnblogs.com/kailugaji/
外部評價指標(需要真實標籤),請看:MATLAB聚類有效性評價指標(外部),MATLAB聚類有效性評價指標(外部 成對度量)
MATLAB中有一個聚類內部評價指標的函式evalclusters(),關於函式的官網,請看:https://www.mathworks.com/help/stats/evalclusters.html
1. evalclusters函式用法
eva= evalclusters(data,clust,'xxx');
data:可以是歸一化/標準化之後的。
clust:聚類後的標籤,引數可以是字串或者矩陣,字串了話就要寫matlab規定的聚類演算法,比如'kmeans'。如果你用的不是matlab自帶的聚類演算法去聚類的,而是想評估自己寫的聚類演算法效能,那麼clust就填寫你聚類結果的標籤矩陣Label就行了,比如你的資料data是N*M的,N是樣本個數,M是特徵維數。那麼標籤矩陣Label就是N*1的矩陣,代表聚類後每個樣本的標籤,這樣就可以輸出評估結果了。
'xxx':可以選擇四種評價指標:'CalinskiHarabasz' | 'DaviesBouldin' | 'gap' | 'silhouette'
'CalinskiHarabasz': Calinski-Harabasz index (CHI,越大越好)
'DaviesBouldin': Davies-Bouldin index(用的最多,越小越好)
'gap': gap statistic (越大越好)
'silhouette': silhouette coefficient (SC,輪廓係數,越大越好)
2. MATLAB程式
實驗資料來自:https://www.cnblogs.com/kailugaji/p/10861064.html#_label3_0_1_2,將生成的三維資料存為data.txt。
clear clc % 作者:凱魯嘎吉 https://www.cnblogs.com/kailugaji/ % 用了SC與DBI這兩個指標 % label:聚類後的標籤,不是真實標籤 data_load = dlmread("data.txt"); data = data_load(:, 1:end-1); label = data_load(:, end); % 真實標籤 label_2 = [ones(180, 1); 2.*ones(120, 1)]; % 瞎寫的標籤 %% 真實標籤的評價結果 eva_DBI_1= evalclusters(data,label,'DaviesBouldin'); eva_SC_1= evalclusters(data,label,'silhouette'); DBI_1 = eva_DBI_1.CriterionValues; % 越小越好 SC_1 = eva_SC_1.CriterionValues; % 越大越好 %% 瞎寫的標籤的評價結果 eva_DBI_2= evalclusters(data,label_2,'DaviesBouldin'); eva_SC_2= evalclusters(data,label_2,'silhouette'); DBI_2 = eva_DBI_2.CriterionValues; % 越小越好 SC_2 = eva_SC_2.CriterionValues; % 越大越好 %% 顯示評價結果 fprintf("DBI越小越好:DBI(真實標籤): %f, DBI(壞標籤): %f\n", DBI_1, DBI_2); % 越小越好 fprintf("SC越大越好:SC(真實標籤): %f, SC(壞標籤): %f\n", SC_1, SC_2); % 越大越好
3. 結果
DBI越小越好:DBI(真實標籤): 0.892058, DBI(壞標籤): 0.938236
SC越大越好:SC(真實標籤): 0.599176, SC(壞標籤): 0.574342