【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)

news2024/12/23 12:36:25

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

一、聚类任务

设样本集S={x_1,x_2,…,x_m}包含m个未标记样本,样本x_i=(x_i^(1),x_i^(2),…,x_i^(n))是一个n维特征向量。

聚类在分簇过程的任务是建立簇结构,即要将S划分为k(有的聚类算法将k作为需事先指定的超参数,有的聚类算法可自动确定k的值)个不相交的簇C_1,C_2,…,C_k,C_l∩C_l^′=∅且⋃_l=1^k▒C_l=S,其中1≤l,l^′≤k,l≠l^′。记簇C_l的标签为y_l,簇标签共有k个,且互不相同。

记测试样本为x=(x^(1),x^(2),…,x^(n))。聚类在分配阶段的任务是根据簇结构将测试样本x分配到一个合适的簇(簇标签为y ̂)中

可以从决策函数、概率和神经网络三类模型来描述分簇过程和分配过程。

在分簇过程,决策函数聚类模型要建立起合适的从样本到簇标签的映射函数Y=f(X),X是定义域,它是所有样本特征向量的集合,Y是值域,它是所有簇标签的集合(在聚类算法里,簇标签没有实际含义,一般只是算法自动产生的簇的编号);

概率聚类模型要建立起正确的条件概率P ̂(Y|X);

神经网络聚类模型要利用一定的网络结构N,生成能够反映分簇结构的网络参数W,即得到合适的网络模型N(S,W)。

在分配过程,决策函数聚类模型依据决策函数Y=f(X)给予测试样本x一个簇标签y ̂;概率聚类模型依据条件概率P ̂(Y|X)计算在给定x时取每一个y ̂的条件概率值,取最大值对应的y ̂作为输出;神经网络聚类模型将x馈入已经训练好的网络N(S,W),从输出得到标签y ̂。 

决策函数聚类模型有kmeans、DBSCAN、OPTICS、Mean Shift等。

概率聚类模型有高斯聚类模型等。

用于聚类的神经网络有自组织特征映射(Self-Organizing Feature Map,SOM)网络。

聚类不仅可以是单独的任务,也可以对数据进行预处理,作为其它机器学习任务的前驱任务。

二、聚类算法评价指标

1:内部结构

内部指标关注分簇后的内部结构,目标是衡量簇内结构是否紧密、簇间距离是否拉开等。

设样本集为S={x_1,x_2,…,x_m}。若某聚类算法给出的分簇为C={C_1,C_2,…,C_k},定义:

1.样本x_m与同簇C_i其它样本的平均距离:

 2.样本x_m与不同簇C_j内样本的平均距离:

3.样本x_m与簇的最小平均距离:

 

4. 簇内样本平均距离:

 

5. 簇中心距离:

 2:轮廓系数(Silhouette Coefficient SC)

单一样本x_m的轮廓系数为:

一般使用的轮廓系数是对所有样本的轮廓系数取均值。SC值高表示簇内密集,簇间疏散。

该指标在slkearn.metrics包中有实现,函数原型为:silhouette_score()。

 3:DB指数(Davies-Bouldin Index DBI)

R_ij的分子是两个簇内样本平均距离之和,分母是两簇的中心距离,因此该指数越小说明簇内样本点更紧密、簇就间隔的越远。

该指标在slkearn.metrics包中也有实现,函数原型为:davies_bouldin_score()。

4:凸集与非凸集 

在欧式空间中,凸集在直观上就是一个向四周凸起的图形。在一维空间中,凸集是一个点,或者一条连续的非曲线(线段、射线和直线);在二维空间中,就是上凸的图形,如锥形扇面、圆、椭圆、凸多边形等;在三维空间中,凸集可以是一个实心的球体等。总之,凸集就是由向周边凸起的点构成的集合。

5:凸簇与非凸簇 

簇的成员的集合为凸集的簇,称为凸簇,否则,称为非凸簇

同簇内的样本间的距离很大,也就是说,簇内平均不相似度a(x_m)可能比b(x_m)还大,所以,SC甚至可能取负值。

衡量聚类效果的有两个方面的因素,分别是簇内密集程度和簇间隔程度。因为非凸簇的分布特点,簇内密集程度不再适合用簇内所有样本间的距离来衡量,簇间隔程度也不再适合用簇中心的距离来衡量。

6:ZQ系数 

定义众距离Z来衡量簇内密集程度。记MinPts_distance(x_m)为样本点x_m到它的第MinPts近邻居样本点的距离,则簇C_i的众距离Z_i为:

MinPts可以根据样本密集程度取1、2、…等值。

定义群距离Q来衡量簇的间隔程度。

1)两个簇的群距离Q是他们的样本点之间的距离的最小值:

 

2)也可以用点到簇的距离来定义群距离,记样本x_m到不同簇C_j的距离为:

 

即样本点到不同簇内点的最小值。簇C_i到C_j的群距离Q(C_i,C_j)为他们的均值:

 

用所有簇的众距离的均值除以所有簇间群距离的均值的结果作为评价聚类效果的指标,称为ZQ系数:

 

ZQ系数小表示簇内密集、簇间疏散 

三、聚类算法内部评价指标实战

SC DBI CH评价指标示例 效果如下图

 代码如下

import numpy as np
from time import time
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.cluster import KMeans

#np.random.seed(719) # 指定随机数种子,以确保每次运行可重复观察

samples = np.loadtxt("kmeansSamples.txt") # 加载数据集

print(54 * '_')
print('init\t\ttime\tinertia\tSC\tDBI\tCH') # 打印表头

n_init = 1 # 指定kmeans算法重复运行次数

estimator = KMeans(init='k-means++', n_clusters=3, n_init=n_init)  # k-means++方式指定初始簇中心
t0 = time() # 开始计时
estimator.fit(samples)
print('%-9s\t%.2fs\t%i\t%.3f\t%.3f\t%.3f'
          % ('k-means++', (time() - t0), estimator.inertia_,
             metrics.silhouette_score(samples, estimator.labels_, metric='euclidean'),
 
estimator.fit(samples)
print('%-9s\t%.2fs\t%i\t%.3f\t%.3f\t%.3f'
          % ('random', (time() - t0), estimator.inertia_,
             metrics.silhouette_score(samples, estimator.labels_, metric='euclidean'),
             metrics.davies_bouldin_score(samples, estimator.labels_),
             metrics.calinski_harabasz_score(samples, estimator.labels_)))

plt.scatter(samples[:,0],samples[:,1],c=estimator.labels_,linewidths=np.power(estimator.labels_+0.5, 2)) # 用不同大小的点来表示不同簇的点
plt.scatter(estimator.cluster_centers_[:,0],estimator.cluster_centers_[:,1],c='r',marker='^',linewidths=7) # 打印簇中心
plt.show()

ZQ评价指标示例

 

部分代码如下

from zqscore import ZQ_score
from sklearn.datasets import make_circles
noisy_circles = make_circles(n_samples=1000, factor=.5, noise=.05, random_state=15)
X = noisy_circles[0]
plt.axes(aspect='equal')
plt.scatter(X[:, 0], X[:, 1], marker='o', c=noisy_circles[1])
plt.show()
print("SC:\t"+str(metrics.silhouette_score(X, noisy_circles[1], metric='euclidean')))
print("DBI:\t"+str(metrics.davies_bouldin_score(X, noisy_circles[1])))
print("CH:\t"+str(metrics.calinski_harabasz_score(X, noisy_circles[1])))
print("ZQ:\t"+str(ZQ_score(X, noisy_circles[1])))

 创作不易 觉得有帮助请点赞关注收藏~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你不知道的 Git 技巧:如何实现核心代码保护

大家好,我是 shixin。 前段时间完成了一个核心代码保护的功能,目标是在关键代码被修改及时同步给其他人,避免没经过 review 就上线导致问题,提示的效果图如下: 在实现的过程中,用到一些平时使用不多的 Git…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.8 查询Redis 缓存

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.8 查询Redis 缓存48.8.1 OpenResty的Redis模块48 多级缓存 48.8 查询Redis 缓存 48.8…

spring切入点函数

切入点函数:用于执行切入点函数 1.execution 1.最为重要的切入点函数,功能最全 2.可以执行方法切入点表达式,可以执行类切入点表达式,可以执行包切入点表达式 弊端:书写比较麻烦 2.args 1.作用:主要用…

原创10个python自动化化案例,一口一个高效办公!

以下为我的自动化办公代码,有需要的同学建议点赞收藏并熟读背诵!(持续更新) 1.自动化批量调整word中含有关键词句子的样式 就随便拿一段我在网上找到的文字来做例子: 若关键词为“资金”,则处理后的word…

CentOS不再维护,跃跃欲试AlmaLinux

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…

CSS基础总结(三)盒子模型

文章目录 一、概述 二、组成 1. 边框(border) 2.内边距(padding) 3.外边距(margin) 三、阴影 1.盒子阴影 2.文字阴影 四、综合案例 1.新浪导航栏 2.京东商品模块 一、概述 所谓 盒子模型&#xff1a…

Kubernetes自定义监控指标——Prometheus Adapter实战演练

1、概述 kubernetes的监控指标分为两种: Core metrics(核心指标):从 Kubelet、cAdvisor 等获取度量数据,再由metrics-server提供给 kube-scheduler、HPA、 控制器等使用。 Custom Metrics(自定义指标):由Prometheus Adapter提供…

小伙伴们-GO-带你揭开Linux的神秘面纱

文章目录1、Linux的神秘面纱2、Linux操作系统优秀特质3、Linux操作系统应用领域4、解刨-linux系统结构5、带你一探Linux系统-满血复活的启动过程6、Linux 骨架-文件系统与目录结构6.1、Linux 文件系统概览6.2 、linux/unix 文件系统-奠基石6.2.1、 硬盘存储小知识6.2.2、 inode…

重写Nacos服务发现:多个服务器如何跨命名空间,访问公共服务?

一、问题背景 在开发某个公共应用时,笔者发现该公共应用的数据是所有测试环境(假设存在 dev/dev2/dev3)通用的。 这就意味着只需部署一个应用,就能满足所有测试环境的需求;也意味着所有测试环境都需要调用该公共应用…

LLVM浅析

LLVM的探索 编译器的作用就是将源码编译成可以运行的程序。 终端按顺下敲入 vim hello.py python hello.py vim hello.c clang hello.c ./a.out vim main.m #imclude<stdio.h> int main(int argc, char *argv[]){printf("hello word!"); };LLVM概述 从写代码…

【Python天气预报系统】又要降温,这个冬天你准备好棉衣秋裤了吗?看了不后悔系列之Python打造智能天气预报系统,爆赞。

前言 鼎鼎大名的南方城市长沙很早就入冬了&#xff0c;街上各种大衣&#xff0c;毛衣&#xff0c;棉衣齐齐出动。 这段时间全国各地大风呜呜地吹&#xff0c;很多地方断崖式降温。瑟瑟发抖.jpg 虽然前几天短暂的温度回升&#xff0c;但肯定是为了今天的超级降温&#xff0c;…

毕业设计 - 基于java web的城市公交查询系统的设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目工程前言 今天学长向大家分享一个 java web 毕业设计项目: 基于java web的城市公交查询系统的设计与实现 一、项目设计 1. 模块设计 系统功能的划分方式可以分成很多种类&#xff0c;但是我按照界面流程将它…

“人生搜索引擎” # Rewind

你想找什么东西&#xff0c;只需要在搜索引擎上输入关键词&#xff0c;它就会把“相关记忆”给你提取出来。这也就是 Rewind 这款搜索引擎想解决的问题。Rewind 给自身的定义是&#xff1a;The Search Engine For Your Life也就是你人生的搜索引擎&#xff0c;它声称能快速搜索…

宠物狗大学生网页设计模板 静态HTML动物保护学生网页作业成品 DIV CSS动物主题静态网页

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

微信小程序 | 小程序WXSS-WXML-WXS

&#x1f5a5;️ 微信小程序 专栏&#xff1a;小程序WXSS-WXML-WXS &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1…

高并发下秒杀商品,这9个细节你必须掌握好

目录&#xff1a;导读 前言 一、瞬时高并发 二、页面静态化 三、秒杀按钮 四、读多写少 五、缓存问题 1、缓存击穿 2、缓存穿透 六、库存问题 1、预扣库存 2、数据库扣减库存 3、redis扣减库存 4、 lua脚本扣减库存 七、分布式锁 八、mq异步处理 1、消息丢失问…

[附源码]Node.js计算机毕业设计高校线上教学系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我们…

聚观早报 | 明年起手机预装APP均可卸载;爱奇艺VIP会员再次涨价

今日要闻&#xff1a;明年起手机预装APP均可卸载&#xff1b;爱奇艺VIP会员再次涨价&#xff1b;转转首个华南地区自营店开业&#xff1b;马斯克出售股票套现36亿美元&#xff1b;微软将逐步推出欧盟云数据边界明年起手机预装APP均可卸载 12 月 16 日消息&#xff0c;日前&…

2022中国产业数字化发展成熟度区域指数分析——充分利用特长,形成区域比较优势,夯实中国式现代化建设基础

易观分析&#xff1a;近年来&#xff0c;全球经济发展下行&#xff0c;但数字经济表现出了足够的韧性。在国内&#xff0c;产业数字化的经济规模占全国数字经济比重的81.7%&#xff0c;占中国GDP的32.5%&#xff0c;已经成为中国数字经济发展的核心动能。 在此背景下&#xff0…

Pr 入门系列之十四:导出

视频工作流程中的最后一步就是导出。Pr 中&#xff0c;可以方便地导出序列或剪辑&#xff0c;发送给他人&#xff0c;分享到社交媒体渠道&#xff0c;或者创建 DCP&#xff08;数字电影包&#xff09;文件用于影院分发。◆ ◆ ◆导出的一般流程1、首先&#xff0c;在时间轴面…