1. 程式人生 > 其它 >MATLAB聚類有效性評價指標(內部) MATLAB聚類有效性評價指標(外部)MATLAB聚類有效性評價指標(外部 成對度量)

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

4. 參考

[1] https://www.mathworks.com/help/stats/evalclusters.html