聚类评价指标S_Dbw及其Matlab实现

简介

S ⁡ _ D b w \operatorname{S}\_{Dbw} S_Dbw是一个基于密度的指标,它通过对比 类内的紧密性类间的密度 来评估聚类的有效性;
该指标达到最小时的聚类一定是最优聚类,而且聚类结果与算法无关; 即越小越好

公式

它由两项组成:
S ⁡ _ D b w = Scat ⁡ + Dens ⁡ _ b w \operatorname{S}\_{Dbw}=\operatorname{Scat} + \operatorname{Dens}\_{bw} S_Dbw=Scat+Dens_bw

其中 Scat ⁡ \operatorname{Scat} Scat表示类内的紧密性, Dens ⁡ _ b w \operatorname{Dens}\_{bw} Dens_bw表示类间的密度,分别定义如下:

Scat ⁡ = 1 c ∑ i = 1 c ∥ σ ( C i ) ∥ ∥ σ ( D ) ∥ \operatorname{Scat}=\frac{1}{c} \sum\limits_{i=1}^{c} \frac{\left\|\sigma\left(C_{i}\right)\right\|}{\|\sigma(D)\|} Scat=c1​i=1∑c​∥σ(D)∥∥σ(Ci​)∥​

Dens ⁡ _ b w = 1 c ( c − 1 ) ∑ i = 1 c ( ∑ j = 1 i ≠ j c density ⁡ ( u i j ) max ⁡ { density ⁡ ( v i ) , density ⁡ ( v j ) } ) \operatorname{Dens}\_{bw}=\frac{1}{c(c-1)} \sum\limits_{i=1}^{c}\left(\sum\limits_{j=1 \atop i \neq j}^{c} \frac{\operatorname{density}\left(u_{i j}\right)}{\max \left\{\operatorname{density}\left(v_{i}\right), \operatorname{density}\left(v_{j}\right)\right\}}\right) Dens_bw=c(c−1)1​i=1∑c​⎝⎛​i​=jj=1​∑c​max{density(vi​),density(vj​)}density(uij​)​⎠⎞​

符号说明

D D D是整个数据集。

c c c是聚类(簇)的数目。

C i C_{i} Ci​代表第 i i i类。

σ ( C i ) \sigma\left(C_{i}\right) σ(Ci​)是第 i i i类样本的方差向量,即样本的每一维度上的方差组成的向量

∥ σ ( C i ) ∥ \left\|\sigma\left(C_{i}\right)\right\| ∥σ(Ci​)∥是向量 σ ( C i ) \sigma\left(C_{i}\right) σ(Ci​)的 L 2 L2 L2范数,即与原点的欧氏距离

σ ( D ) \sigma\left(D\right) σ(D)是数据集 D D D,即所有样本的方差向量。

∥ σ ( D ) ∥ \left\|\sigma\left(D\right)\right\| ∥σ(D)∥是向量 σ ( D ) \sigma\left(D\right) σ(D)的 L 2 L2 L2范数。

s t d e v = 1 c ∑ i = 1 c ∥ σ ( v i ) ∥ stdev=\frac{1}{c} \sqrt{\sum\limits_{i=1}^{c}\left\|\sigma\left(v_{i}\right)\right\|} stdev=c1​i=1∑c​∥σ(vi​)∥ ​ 即所有簇的平均标准差

f ( x l , u ) = { 0 if  d ( x l , u ) > stdev  1 otherwise  f(x_{l}, u)=\left\{\begin{array}{lc}0 & \text { if } d(x_{l}, u)>\text { stdev } \\ 1 & \text { otherwise }\end{array}\right. f(xl​,u)={01​ if d(xl​,u)> stdev  otherwise ​

如果一个样本点 x l x_{l} xl​到中心点 u u u的欧氏距离 小于等于 所有簇的平均标准差 s t d e v stdev stdev,那么这个点就属于 u u u的邻域

中心点 u u u的密度指的是 它的邻域中 包含的样本点的个数

d e n s i t y ( v i ) = ∑ l = 1 n i f ( x l , v i ) density (v_{i})=\sum\limits_{l=1}^{n_{i}} f\left(x_{l}, v_{i}\right) density(vi​)=l=1∑ni​​f(xl​,vi​), x l ∈ C i x_{l} \in C_{i} xl​∈Ci​, n i n_{i} ni​ 等于类 i i i的样本数量
是第 i i i类的聚类中心 v i v_{i} vi​的密度

d e n s i t y ( v j ) = ∑ l = 1 n j f ( x l , v j ) density (v_{j})=\sum\limits_{l=1}^{n_{j}} f\left(x_{l}, v_{j}\right) density(vj​)=l=1∑nj​​f(xl​,vj​), x l ∈ C j x_{l} \in C_{j} xl​∈Cj​, n j n_{j} nj​ 等于类 j j j的样本数量
是第 j j j类的聚类中心 v j v_{j} vj​的密度

d e n s i t y ( u i j ) = ∑ l = 1 n i j f ( x l , u i j ) density (u_{ij})=\sum\limits_{l=1}^{n_{ij}} f\left(x_{l}, u_{ij}\right) density(uij​)=l=1∑nij​​f(xl​,uij​), x l ∈ C i ∪ C j x_{l} \in C_{i} \cup C_{j} xl​∈Ci​∪Cj​, n i j n_{ij} nij​ 等于类 i i i和 j j j的样本数量之和
是第 i i i类 和 第 j j j类之间的中心 u i j u_{ij} uij​的密度

其中, u i j u_{ij} uij​是聚类中心 v j v_{j} vj​和 v j v_{j} vj​ 两点连线的中点即 u i j = 1 2 ( v i + v j ) u_{ij}=\frac{1}{2} \left(v_{i} + v_{j}\right) uij​=21​(vi​+vj​)

代码

function S_Dbw = valid_internal_S_Dbw(D,labels,cluster_center)
% S_Dbw是一个基于密度的指标,它通过对比 类内的紧密性 和 类间的密度 来评估聚类的有效性;
% 该指标达到最小时的聚类一定是最优聚类,而且聚类结果与算法无关;
% 即越小越好。
% 作者: 扎扎灰
% 时间: 2021/2/7% 输入: D 原始待聚类数据[n,d]; n是样本数目,d是每个样本的维数
%      labels 聚类后各个样本的类别标签[1,n]
%      cluster_center 聚类中心[NC,d]; NC是聚类/簇数目
% 输出: S_Dbw指标%% 计算类内的紧密性(平均散射)Scat
NC = size(cluster_center,1); % 聚类/簇数目
Scat_NC = zeros(NC,1);       % 每一行代表一个Scat(Ci)
sigma_NC_L2 = zeros(NC,1);   % 每一行代表一个类的总体方差sigma的L2范数% 所有样本总体方差
sigma_D = var(D,1);
% 向量sigma_D的L2范数
sigma_D_L2 = norm(sigma_D,2);for i = 1:NC % 遍历每一个聚类/簇% 属于第i类的样本Ci = D((labels == i),:);% 第i类样本的总体方差sigma_Ci = var(Ci,1); % 向量sigma_Ci的L2范数sigma_Ci_L2 = norm(sigma_Ci,2); sigma_NC_L2(i,1) = sigma_Ci_L2;% 保存,后面需要用到% 第i类样本的ScatScat_NC(i,1) = sigma_Ci_L2 / sigma_D_L2;
end% 所有类的平均散射Scat
Scat = mean(Scat_NC);%% 计算类间的密度Dens_bw
% stdev(average standard deviation of clusters)表示一个数据集各个类/簇的平均标准差
stdev = sqrt(1/NC *sum(sigma_NC_L2));Dens_bw = 0;
for i = 1:NCfor j = 1:NCif i ~= jDens_bw = Dens_bw + density([i,j],D,labels,cluster_center,stdev).../ max(density(i,D,labels,cluster_center,stdev), density(j,D,labels,cluster_center,stdev));endend
endDens_bw = Dens_bw / (NC * (NC-1));%% 计算指标S_Dbw
S_Dbw = Scat + Dens_bw;end
function den = density(density_list,D,labels,cluster_center,stdev)
% 输入: density_list 类别标号列表(1个或者2个)
%       D 原始待聚类数据[n,d]
%       labels 聚类后各个样本的类别标签[1,n]
%       cluster_center 聚类中心
%       stdev 阈值 各个类/簇的平均标准差
% 输出:% 两个聚类中心 的中点 if length(density_list) == 2center_u = (cluster_center(density_list(1),:) + cluster_center(density_list(2),:)) / 2;    else% 单个聚类中心center_u =  cluster_center(density_list(1),:);end% 中心点的密度den = 1; % 假定中心点的密度至少为1(避免分母为0的情况)for i = 1:length(density_list)% 最多为2% 两个聚类中心的中点  的密度是 两个聚类的并集 中满足条件的点的个数% 单个聚类中心        的密度是 该聚类        中满足条件的点的个数% 属于第density_list(i)类的样本Cdi = D((labels == density_list(i)),:); % 每一行是一个样本for j = 1:size(Cdi,1)% 如果中心点center_u 和其邻域内的点 的欧氏距离 小于等于 阈值stdevif norm((Cdi(j,:) - center_u),2) <= stdev% 该中心点的密度值 + 1den = den + 1;endendendend

参考文献

Liu Y , Li Z , Xiong H , et al. Understanding of Internal Clustering Validation Measures[C]// ICDM 2010, The 10th IEEE International Conference on Data Mining, Sydney, Australia, 14-17 December 2010. IEEE, 2010.

Halkidi M , Vazirgiannis M . Clustering validity assessment: finding the optimal partitioning of a data set[C]// IEEE International Conference on Data Mining. IEEE, 2001.

Halkidi M , Vazirgiannis M , Batistakis Y . Quality scheme assessment in the clustering process[C]// Principles of Data Mining and Knowledge Discovery, 4th European Conference, PKDD 2000, Lyon, France, September 13-16, 2000, Proceedings. 2000.

刘丰富. 聚类有效性的分析与探讨[J]. 福建电脑, 2010, 026(008):47-49.

PS:

对计算中心点的密度进行了改动,假定中心点的密度至少为1(避免分母为0的情况)。

欢迎交流和指正。

聚类评价指标S_Dbw及其Matlab实现相关推荐

  1. 聚类评价指标S_Dbw及其python实现

    介绍 最近看了一篇文章,Yanchi Liu等人比较了各个聚类评价指标(例如??, ?, ??, ??以及S_Dbw等等),在一些有着不同挑战的数据集上(例如有噪声,密度不均,某几类挨得比较近等等问题 ...

  2. 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab划分法k-means聚类算法[含Matlab源码 1941期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  3. 聚类评价指标(轮廓系数 Silhouette coefficient)

    聚类评价指标 最近在做聚类的项目,聚类得到结果后我们需要知道聚类的好坏,用哪个算法效果比较好.肯定要选择那个最好评价的算法.今天我们就不谈算法只谈算法结果的评价. 我也从网上看了很多的别人写的东西,总 ...

  4. AP近邻传播聚类算法原理及Matlab实现

    AP近邻传播聚类算法原理及Matlab实现    Affinity Propagation (AP)聚类是2007年在Science杂志上提出的一种新的聚类算法.它根据N个数据点之间的相似度进行聚类, ...

  5. 【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab改进的粒子群算法优化K-means算法[含Matlab源码 1946期] 点击上面蓝色字体,直接付费下载,即可 ...

  6. 聚类算法评价指标python实现_[ML] 聚类评价指标

    本文将介绍几个常见的聚类评价指标: Purity, NMI, RI, Precision(查准率), Recall(查全率), F, ARI, Accuracy(正确率). 好的聚类算法,一般要求类簇 ...

  7. matlab中CH指标聚类评价指标,MATLAB聚类有效性评价指标(外部)

    MATLAB聚类有效性评价指标(外部) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看标签:MATLAB.聚类 前提:数据的真实标签已知 ...

  8. k-Means——经典聚类算法实验(Matlab实现)

    聚类算法-k-Means实验 k-平均(k-Means),也被称为k-均值,是一种得到最广泛使用的聚类算法[1]. k-Means算法以k为参数,把n个对象分为k个簇,使得簇内具有较高的相似度. 实验 ...

  9. 【数学建模】聚类算法+Spss实现+Matlab代码实现

    文章目录 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 图片来源于清风老师视频 b站地址:数学建模学习交流 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 1.创 ...

最新文章

  1. 算法时间复杂度求解法【详细过程说明】
  2. 如何为jframe设置于右侧滑轮_如何为电脑设置屏保密码?
  3. 处理字符串时常用方法0914
  4. tcpdump非常实用的抓包实例
  5. rpa打开浏览器_rpa.ie
  6. 九、K8s deployment相关操作
  7. 24小时计时器设计logisim_c++日期、时间和计时器
  8. 3DMAX 的重要知识和插件介绍
  9. Linux编译安装iozone,用iozone测试linux文件系统
  10. 达梦数据库-Dmpython+xlrd实现excel表数据一键入库代码分享
  11. Proguard打包混淆报错:can't find superclass or interface
  12. 世界观的内涵是认识论模型
  13. 【官方原版】Bootstrap Tooltips
  14. 5G无线系统设计与国际标准 pdf和Word
  15. jupyter 安装问题 No such notebook dir
  16. vue会不会?看了你就会了!干了#兄弟们
  17. 台媒曝大S女儿小名格格吉祥 汪小菲否认
  18. Vue Cli+高德API实现模糊搜索+返回坐标及信息
  19. ums网管应用unix系统的常用操作 (五)--iteye技术网站
  20. [读书笔记]日本蜡烛图技术 阅读笔记

热门文章

  1. ETA6027,可编程限流负载开关,限流可调,过流报警,防反灌
  2. android 斗鱼礼物动画,GitHub - Yuphee/RewardLayout: 仿斗鱼直播送礼物和连击效果动画...
  3. Cesium中实时显示经纬度及视角高
  4. 【iOS】最全最强的Xcode快捷键指南
  5. 记一个win10 IPsec vpn注册表问题
  6. SpringBoot 基于Shiro + Jwt + Redis的用户权限管理 (三) 鉴权
  7. VFP数据库常用命令
  8. 鸿蒙系统全球发布,原创丨新一代鸿蒙正式发布,中国人自己的操作系统来了
  9. HU5913芯片资料
  10. Python如何绘制误差直方图?曲线的阴影图?shade range graph