凯鲁嘎吉
用书写铭记日常,最迷人的不在远方

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

[2] 不调用现成的matlab函数,而是别人动手写的评价指标函数:https://github.com/adanjoga/cvik-toolbox

posted on 2022-04-20 14:45  凯鲁嘎吉  阅读(4947)  评论(0编辑  收藏  举报