热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

本文主要分享【diff分类算法】,技术文章【聚类算法评价指标——基于DBI指数的k-means算法(python代码)】为【仙女不扎马尾.】投稿,如果你遇到时间序列的相似性分析相关问题,本文相关知识或

本文主要分享【diff分类算法】,技术文章【聚类算法评价指标——基于DBI指数的k-means算法(python代码)】为【仙女不扎马尾.】投稿,如果你遇到时间序列的相似性分析相关问题,本文相关知识或能到你。

diff分类算法

文章目录 1 DBI指数介绍2 优点3 定义值3.1 S i S_i Si:表示第i类中,数据点的分散程度3.2 M i j M_{ij} Mij:表示第i类与第j类的距离3.3 R i j R_{ij} Rij:表示第i类和第j类的相似度3.4 R ‾ \overline{R} R:DBI指数,越小分类效果越好 4 这篇博文公式挺多挺费事的,觉得有用的话可以点击收藏关注~~点赞是我更新的无限动力!!5 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指数,越小分类效果越好 先计算 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

再计算每个类的最大相似度的均值,得到 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 这篇博文公式挺多挺费事的,觉得有用的话可以点击收藏关注~~点赞是我更新的无限动力!! 5 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

本文《聚类算法评价指标——基于DBI指数的k-means算法(python代码)》版权归仙女不扎马尾.所有,引用聚类算法评价指标——基于DBI指数的k-means算法(python代码)需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • Python进阶笔记:深入理解装饰器、生成器与迭代器的应用
    本文深入探讨了Python中的装饰器、生成器和迭代器的应用。装饰器本质上是一个函数,用于在不修改原函数代码和调用方式的前提下为其添加额外功能。实现装饰器需要掌握闭包、高阶函数等基础知识。生成器通过 `yield` 语句提供了一种高效生成和处理大量数据的方法,而迭代器则是一种可以逐个访问集合中元素的对象。文章详细解析了这些概念的原理和实际应用案例,帮助读者更好地理解和使用这些高级特性。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • 本文探讨了基于点集估算图像区域的Alpha形状算法在Python中的应用。通过改进传统的Delaunay三角剖分方法,该算法能够生成更加灵活和精确的形状轮廓,避免了单纯使用Delaunay三角剖分时可能出现的过大三角形问题。这种“模糊Delaunay三角剖分”技术不仅提高了形状的准确性,还增强了对复杂图像区域的适应能力。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • 每年,意甲、德甲、英超和西甲等各大足球联赛的赛程表都是球迷们关注的焦点。本文通过 Python 编程实现了一种生成赛程表的方法,该方法基于蛇形环算法。具体而言,将所有球队排列成两列的环形结构,左侧球队对阵右侧球队,首支队伍固定不动,其余队伍按顺时针方向循环移动,从而确保每场比赛不重复。此算法不仅高效,而且易于实现,为赛程安排提供了可靠的解决方案。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 本课程深入探讨了 Python 中自定义序列类的实现方法,涵盖从基础概念到高级技巧的全面解析。通过实例演示,学员将掌握如何创建支持切片操作的自定义序列对象,并了解 `bisect` 模块在序列处理中的应用。适合希望提升 Python 编程技能的中高级开发者。 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
  • 在《Python编程基础》课程中,我们将深入探讨Python中的循环结构。通过详细解析for循环和while循环的语法与应用场景,帮助初学者掌握循环控制语句的核心概念和实际应用技巧。此外,还将介绍如何利用循环结构解决复杂问题,提高编程效率和代码可读性。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 在托管C++中开发应用程序时,遇到了如何声明和操作字符串数组的问题。本文详细探讨了字符串数组在托管C++中的应用与实现方法,包括声明、初始化、遍历和常见操作技巧,为开发者提供了实用的参考和指导。 ... [详细]
author-avatar
莺妈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有