聚类评价指标S_Dbw及其Matlab实现
聚类评价指标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=c1i=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)1i=1∑c⎝⎛i=jj=1∑cmax{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=c1i=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∑nif(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∑njf(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∑nijf(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实现相关推荐
- 聚类评价指标S_Dbw及其python实现
介绍 最近看了一篇文章,Yanchi Liu等人比较了各个聚类评价指标(例如??, ?, ??, ??以及S_Dbw等等),在一些有着不同挑战的数据集上(例如有噪声,密度不均,某几类挨得比较近等等问题 ...
- 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab划分法k-means聚类算法[含Matlab源码 1941期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...
- 聚类评价指标(轮廓系数 Silhouette coefficient)
聚类评价指标 最近在做聚类的项目,聚类得到结果后我们需要知道聚类的好坏,用哪个算法效果比较好.肯定要选择那个最好评价的算法.今天我们就不谈算法只谈算法结果的评价. 我也从网上看了很多的别人写的东西,总 ...
- AP近邻传播聚类算法原理及Matlab实现
AP近邻传播聚类算法原理及Matlab实现 Affinity Propagation (AP)聚类是2007年在Science杂志上提出的一种新的聚类算法.它根据N个数据点之间的相似度进行聚类, ...
- 【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab改进的粒子群算法优化K-means算法[含Matlab源码 1946期] 点击上面蓝色字体,直接付费下载,即可 ...
- 聚类算法评价指标python实现_[ML] 聚类评价指标
本文将介绍几个常见的聚类评价指标: Purity, NMI, RI, Precision(查准率), Recall(查全率), F, ARI, Accuracy(正确率). 好的聚类算法,一般要求类簇 ...
- matlab中CH指标聚类评价指标,MATLAB聚类有效性评价指标(外部)
MATLAB聚类有效性评价指标(外部) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看标签:MATLAB.聚类 前提:数据的真实标签已知 ...
- k-Means——经典聚类算法实验(Matlab实现)
聚类算法-k-Means实验 k-平均(k-Means),也被称为k-均值,是一种得到最广泛使用的聚类算法[1]. k-Means算法以k为参数,把n个对象分为k个簇,使得簇内具有较高的相似度. 实验 ...
- 【数学建模】聚类算法+Spss实现+Matlab代码实现
文章目录 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 图片来源于清风老师视频 b站地址:数学建模学习交流 一.聚类算法原理 二.Spss实现聚类 三.Matlab实现聚类 1.创 ...
最新文章
- 算法时间复杂度求解法【详细过程说明】
- 如何为jframe设置于右侧滑轮_如何为电脑设置屏保密码?
- 处理字符串时常用方法0914
- tcpdump非常实用的抓包实例
- rpa打开浏览器_rpa.ie
- 九、K8s deployment相关操作
- 24小时计时器设计logisim_c++日期、时间和计时器
- 3DMAX 的重要知识和插件介绍
- Linux编译安装iozone,用iozone测试linux文件系统
- 达梦数据库-Dmpython+xlrd实现excel表数据一键入库代码分享
- Proguard打包混淆报错:can't find superclass or interface
- 世界观的内涵是认识论模型
- 【官方原版】Bootstrap Tooltips
- 5G无线系统设计与国际标准 pdf和Word
- jupyter 安装问题 No such notebook dir
- vue会不会?看了你就会了!干了#兄弟们
- 台媒曝大S女儿小名格格吉祥 汪小菲否认
- Vue Cli+高德API实现模糊搜索+返回坐标及信息
- ums网管应用unix系统的常用操作 (五)--iteye技术网站
- [读书笔记]日本蜡烛图技术 阅读笔记
热门文章
- ETA6027,可编程限流负载开关,限流可调,过流报警,防反灌
- android 斗鱼礼物动画,GitHub - Yuphee/RewardLayout: 仿斗鱼直播送礼物和连击效果动画...
- Cesium中实时显示经纬度及视角高
- 【iOS】最全最强的Xcode快捷键指南
- 记一个win10 IPsec vpn注册表问题
- SpringBoot 基于Shiro + Jwt + Redis的用户权限管理 (三) 鉴权
- VFP数据库常用命令
- 鸿蒙系统全球发布,原创丨新一代鸿蒙正式发布,中国人自己的操作系统来了
- HU5913芯片资料
- Python如何绘制误差直方图?曲线的阴影图?shade range graph