聚类算法评价指标——基于DBI指数的k-means算法(python代码)

news/2024/5/20 8:34:10 标签: 聚类, python, 算法

文章目录

参考文章:
https://blog.csdn.net/a841454735/article/details/80237257
http://blog.sina.com.cn/s/blog_65c8baf901016flh.html

1 DBI指数介绍

Davies-Bouldin指数(DBI)(戴维森堡丁指数),又称为分类适确性指标,是由大卫L·Davies和唐纳德·Bouldin提出的一种评估聚类算法优劣的指标。

属于内部指标,内部指标是利用数据集的固有特征和量值来评价一个聚类算法的结果。

2 优点

基于DBI指数的k-means算法无需指定K的值,而是给出K的范围,由算法自动确定最适合的K值。

3 定义值

3.1 S i S_i Si:表示第i类中,数据点的分散程度

S i = { 1 T i ∑ j = 1 T i ∣ X j − A i ∣ q } 1 q S_i=\{\frac{1}{T_i}\sum_{j=1}^{T_i}|X_j-A_i|^q\}^{\frac{1}{q}} Si={Ti1j=1TiXjAiq}q1

X j X_j Xj:第i类中第j个数据点
A i A_i Ai:第i类的中心数据点

当q=1:表示各点到中心距离的均值
当q=2:表示各点到中心距离的标准差
【用来衡量离散程度】

3.2 M i j M_{ij} Mij:表示第i类与第j类的距离

M i j = ∑ k = 1 N ∣ a k i − a k j ∣ p } 1 p M_{ij}=\sum_{k=1}^{N}|a_{ki}-a_{kj}|^p\}^{\frac{1}{p}} Mij=k=1Nakiakjp}p1

a k i a_{ki} aki:表示第i类的中心点的第k个属性的值

当p=1:表示各点到中心距离的均值
当p=2:表示各点到中心距离的标准差
【用来衡量离散程度】

3.3 R i j R_{ij} Rij:表示第i类和第j类的相似度

R i j = S i + S j M i j R_{ij}=\frac{S_i+S_j}{M_{ij}} Rij=MijSi+Sj

3.4 R ‾ \overline{R} R:DBI指数,越小分类效果越好

  1. 先计算 R i R_i Ri,i=1,2,3…N
    即求类i与其他类的最大相似值。

R i = m a x ( R i 1 , R i 2 , . . . R i j , . . . R i N ) , i ≠ j R_i=max(R_{i1},R_{i2}, ...R_{ij}, ...R_{iN}) ,i≠j Ri=max(Ri1,Ri2,...Rij,...RiN)i=j

  1. 再计算每个类的最大相似度的均值,得到 R ‾ \overline{R} R,即DBI指数。
    D B I = R ‾ = 1 N ∑ i = 1 N R i DBI =\overline{R}=\frac{1}{N}\sum_{i=1}^{N}R_i DBI=R=N1i=1NRi

分类个数的不同(N不同),会导致 R ‾ \overline{R} R不同, R ‾ \overline{R} R值越小,分类效果越好。

4 这篇博文公式挺多挺费事的,觉得有用的话可以点击收藏关注~~点赞是我更新的无限动力!!

python_71">5 python代码实现

  • 代码来自参考博文里面的博主写的~
python">def vectorDistance(v1, v2):
    """
    this function calculates de euclidean distance between two
    vectors.
    """
    sum = 0
    for i in range(len(v1)):
        sum += (v1[i] - v2[i]) ** 2
    return sum ** 0.5


def compute_Si(i, x, clusters, nc):
    norm_c = nc
    s = 0
    for t in x[i]:
        s += vectorDistance(t, clusters)
    return s / norm_c


def compute_Rij(i, j, x, clusters, nc):
    Mij = vectorDistance(clusters[i], clusters[j])
    Rij = (compute_Si(i, x, clusters[i], nc) + compute_Si(j, x, clusters[j], nc)) / Mij
    return Rij


def compute_Di(i, x, clusters, nc):
    list_r = []
    for j in range(nc):
        if i != j:
            temp = compute_Rij(i, j, x, clusters, nc)
            list_r.append(temp)
    return max(list_r)


def compute_DB_index(x, clusters, nc):
    sigma_R = 0.0
    for i in range(nc):
        sigma_R = sigma_R + compute_Di(i, x, clusters, nc)
    DB_index = float(sigma_R) / float(nc)
    return DB_index

http://www.niftyadmin.cn/n/1434409.html

相关文章

stm32内部低速rtc_stm32f103ZE单片机RTC时钟采用内部时钟例程

【实例简介】本代码改编自正点原子的RTC时钟例程代码,改RTC时钟为内部RC时钟提供,测试平台为stm32f103ze系列单片机;【实例截图】【核心代码】RCC_LSICmd(ENABLE);//开启内部低速晶振LSIwhile (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) RESET&am…

Windows系统下,python安装netCDF4步骤

文章目录1 写在前面2 下载netCDF4的安装包3 安装命令4 写在最后5 OK,问题不大,又水完一篇博文,感谢收藏点赞关注~~1 写在前面 自己写程序主要用的是Pycharm,查看一下当前的Python版本(在Terminal里面可以查看&#xf…

python中with open_Python,open和with open的区别

我没有使用with语句,但对它的用途有些熟悉。使用下面的代码,#1块按预期工作,但是#2——这里更正我,它应该做与第一个块相同的事情——抛出下面的异常FileExistsError: [Errno 17] File exists: mydir。import os if not(os.path.e…

遗传算法(GA)学习 || 原理、本质、代码、例题

文章目录1 一些入门的概念1.1 术语介绍2 遗传算法的主要步骤3 遗传的本质4 题目4.1 创建随机解集4.2 两个解交换信息4.3 代码4.4 结果写在前面:周日和工作任务如期而至,虽然我的研究课题已经离开了水文要素预测,but老板派的活儿还是水位预测&…

python编程命令_使用Python编写命令行工具有什么好的库?

使用Python编写命令行工具的库很多,我最推荐的还是Google Fire Hello World 要介绍Fire是什么,看一个简单的例子就明白了 # calc.py import fire class Calculator(object): """A simple calculator class.""" def double…

cc2530期末试卷_完整版ZigBee期末试题

单选题以下哪一个接口为常用的通信接口(A)A.RS232CB.RS555AC.RS484D.RS856以下是CC2530端口0方向寄存器的是(C)A.POSELB.PLSELC.PODIRD.POINP以下不属于物联网网络架构组成的是(A)A.物理层B.感知层C.网络层D.应用层以下不属于ZigBee技术特点的是哪个选项?(B)A.安全B.成本高C.低…

桌面上出现一个.accelerate 文件夹,如何解决?

文章目录1 .accelerate文件夹怎么形成的2 解决办法1 .accelerate文件夹怎么形成的 这是使用百度云的时候accelerate插件自动生成的,就是百度云的网页下载功能。当点击“下载”按钮就会出现这个文件夹。 文件夹可以删除,但是只要你用百度云下载东西就又…

python炒股学习软件_要炒股,学Python-LSTM学习

这里数据是基于kaggle ,New York Stock Exchange 主要关注序列分析,当然真实炒股还要很多维度的分析,特别中国更要看宏观分析,比如kaggle有根据新闻数据辅助预测的比赛。真的炒股还需要各种操盘软件了。总之股市有风险入市需谨慎&…