聚类评价指标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. python参数传递_python中的*和**参数传递机制
  2. POJ 2745 显示器 解题报告
  3. python 文本处理2
  4. java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示
  5. 在不停止mysql复制主服务器的情况下,配置一个mysql复制从服务器
  6. mysql 体重 类型 身高_MySQL 数据类型
  7. vue判断列表中包含某一项_判断字符串中是否包含某个字符串
  8. 《解读NoSQL》——2.6 通过数据库分片获得水平扩展能力
  9. 定时器计数器工作方式
  10. java后端简历项目经历_java后台开发个人简历怎么写
  11. 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字
  12. 云计算技术与应用(高职组)赛题库 2019 年全国职业院校技能大赛题库
  13. python云图_python聚合云图
  14. 错宗复杂的进程标识PID
  15. 熬夜爆肝!C++基础入门大合集【万字干货预警 建议收藏】
  16. 面试题-redis数据类型
  17. 第十八届全国大学智能汽车竞赛秘书处技术专家组第一次会议
  18. 我用python破解了同事的加密压缩包!
  19. Android之使用SurfaceView制作简易写字板
  20. 2017年7月7日内蒙乌兰布统之旅

热门文章

  1. 《基于STm32的智能手环项目》笔记
  2. iShot——Mac必备截图工具
  3. 【iOS】最全最强的Xcode快捷键指南
  4. datetime、timestamp、varchar2之争
  5. 8端口千兆百兆车载以太网交换机
  6. Docker 镜像多阶段构建实战总结
  7. 深圳个人档案查询方法(到档查询)
  8. 基于PI双闭环解耦控制的三相SVPWM电压型逆变器(4)--仿真验证
  9. 在k8s中使用性能分析神器:arthas
  10. 德莫弗-拉普拉斯定理