当前位置: 首页 > news >正文

聚类算法评估指标_ SC系数与CH系数代码实现

一、SC轮廓系数法(Silhouette Coefficient)

轮廓系数法同时考虑簇内的内聚程度(Cohesion)与簇间的分离程度(Separation),具体计算过程如下:

  1. 计算每一个样本 � 到同簇内其他样本的平均距离 ��,该值越小,代表簇内样本相似度越高。
  2. 计算每一个样本 � 到最近其他簇 � 内所有样本的平均距离 ���,该值越大,代表该样本越不容易被误分到其他簇。
  3. 通过公式计算单个样本的轮廓系数:

�=�−�max(�,�)

  1. 取全部样本轮廓系数的平均值作为整体聚类效果评估指标。
  2. 轮廓系数取值范围:[−1,1],SC数值越接近1,代表聚类效果越好。

参数说明

  • �:样本�到自身簇内其余样本的平均距离
  • �:样本�到所有其他簇平均距离中的最小值
  • 我们希望�越小越好(簇内样本接近),�越大越好(各簇之间样本远离);当�变大时,�变大,当�变小时,�变小。

二、CH系数(Calinski-Harabasz)

CH 系数综合考虑簇内的内聚程度、簇外的离散程度以及聚类质心的个数。

优化目标:类别内部数据的距离平方和越小越好,类别之间的距离平方和越大越好,聚类的类别数量越少越好。

1.计算公式

CH(�)=������⋅�−��−1

���=∑�=1�‖��−���‖2

���=∑�=1���‖��−�¯‖2

SSW(簇内距离,等价于SSE)

  • ���:当前样本所属簇的质心
  • ��:单个样本
  • 含义:所有样本点到自身簇质心的距离平方累加和,用来衡量簇内的内聚程度
  • 指标特性:��� 越小,簇内样本越紧密,聚类效果越好

SSB(簇间距离)

  • ��:第�个簇的质心
  • �¯:全部样本的全局均值
  • ��:第�个簇内的样本数量
  • 含义:衡量不同簇之间的分离程度
  • 指标特性:��� 越大,簇与簇之间区分越明显

参数说明

  • �:总样本数量
  • �:聚类质心(簇)的个数
  • ���越小,说明各簇之前越接近,CH系数越大;��� 越大,相当于各簇之前越离散,CH系数越大;K越小,CH也会变大;因此我们希望寻找CH更大的模型。

CH系数评价规则

CH系数数值越大,代表簇内越紧凑、簇间越分散,整体聚类效果越优。

三、代码实现

导入相关的库

import os os.environ['OMP_NUM_THREADS'] = '4' # 设置OMP程序运行时使用的线程数 from sklearn.cluster import KMeans import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.metrics import calinski_harabasz_score,silhouette_score

1.定义函数,演示:SC轮廓系数法

def dm02_sc(): # 1. 定义sc列表,记录:每个K值的sc值 sc_list = [] # 2.生成数据集. 参1:样本数量;参2:特征数量;参3:4个簇;参4:标准差 x,y = make_blobs( n_samples=1000, n_features=2, centers=[[-1,-1],[0,0],[1,1],[2,3]], cluster_std=[0.4,0.2,0.2,0.2], random_state=23 ) # 3.for 训练遍历,获取到每个K值,计算其对应的sc值,并添加到sc_list列表中 for k in range(2,100): #考虑簇外,至少两个簇 # 3.1 创建Kmeans对象.参1:簇的数量;参2:最大迭代次数;参3:固定的随机数种子 estimator = KMeans(n_clusters=k,max_iter=100,random_state=23) # 3.2 训练模型 estimator.fit(x) # 3.3 模型预测 y_pred = estimator.predict(x) # 3.4 获取每个簇的sc值 sc_value = silhouette_score(x,y_pred) # 3.5 将每个k值对应的sc值,添加到sc_list列表中 sc_list.append(sc_value) # 4.绘制sc曲线-->数据可视化 # 4.1 创建画布,指定:画布的尺寸 plt.figure(figsize=(20,10)) # 4.2 设置标题 plt.title('sc value') # 4.3 设置x的刻度 plt.xticks(range(2,100,3)) # 4.4 添加x轴,y轴的标签 plt.xlabel('k') plt.ylabel('sc') # 4.5 绘制网格 plt.grid() # 4.6 绘制折线图 # 参1:k值;参2:该k值对应的sc值 plt.plot(range(2,100),sc_list) # 4.7 显示图像 plt.show() dm02_sc()

2.定义函数,演示:ch轮廓系数法

def dm03_ch(): # 1. 定义ch列表,记录:每个K值的ch值 ch_list = [] # 2.生成数据集. 参1:样本数量;参2:特征数量;参3:4个簇;参4:标准差 x,y = make_blobs( n_samples=1000, n_features=2, centers=[[-1,-1],[0,0],[1,1],[2,3]], cluster_std=[0.4,0.2,0.2,0.2], random_state=23 ) # 3.for 训练遍历,获取到每个K值,计算其对应的ch值,并添加到ch_list列表中 for k in range(2,100): #考虑簇外,至少两个簇 # 3.1 创建Kmeans对象.参1:簇的数量;参2:最大迭代次数;参3:固定的随机数种子 estimator = KMeans(n_clusters=k,max_iter=100,random_state=23) # 3.2 训练模型 estimator.fit(x) # 3.3 模型预测 y_pred = estimator.predict(x) # 3.4 获取每个簇的ch值 ch_value = calinski_harabasz_score(x,y_pred) # 3.5 将每个k值对应的ch值,添加到ch_list列表中 ch_list.append(ch_value) # 4.绘制ch曲线-->数据可视化 # 4.1 创建画布,指定:画布的尺寸 plt.figure(figsize=(20,10)) # 4.2 设置标题 plt.title('ch value') # 4.3 设置x的刻度 plt.xticks(range(2,100,3)) # 4.4 添加x轴,y轴的标签 plt.xlabel('k') plt.ylabel('ch') # 4.5 绘制网格 plt.grid() # 4.6 绘制折线图 # 参1:k值;参2:该k值对应的ch值 plt.plot(range(2,100),ch_list) # 4.7 显示图像 plt.show() dm03_ch()
http://www.jsqmd.com/news/1126221/

相关文章:

  • UE4SS终极指南:从脚本系统到专业级Unreal Engine游戏修改解决方案
  • shein,希音网站协议分析采集
  • 试了一圈 AI 生成视频后,我开始琢磨:能不能让 AI 先帮我找素材?借用素刀 ClipKnife 实现思路聊聊本地素材检索
  • 告别切换烦恼:bypy多账户管理终极指南
  • LTESniffer:开源的 LTE 流量嗅探工具
  • NPS:一个能穿透内网的代理服务器,带 Web 管理界面
  • 从数据表到运营仪表盘_基于助睿BI的自媒体运营可视化分析实战
  • WarcraftHelper解决方案:解决魔兽争霸3现代系统兼容性问题并提升游戏性能
  • 3分钟免费解锁Microsoft 365完整功能:Ohook终极激活方案
  • Reactive Resume:免费开源的简历生成器
  • 你的Windows真的需要“瘦身“吗?Win11Debloat带来的系统性能革命
  • 英雄联盟效率工具League Akari:智能本地化助手的完整使用指南
  • Fan Control终极指南:3步实现Windows风扇智能控制与静音优化
  • 我国战略性矿产资源目录:共包含36种矿产
  • 别再手动缩进JSON了!这个免费工具一键格式化+压缩+校验,Chrome都不用装插件
  • Ø 性能优化的思路
  • 3分钟解锁MobaXterm专业版:开源许可证生成器实用指南
  • 智慧树自动刷课终极指南:Autovisor零基础快速上手教程
  • Icarus Verilog与GTKWave:数字电路仿真的终极开源组合
  • Ohook技术解析:零侵入式Office激活钩子的创新实现方案
  • Lorenz曲线:不平等分析的可视化黄金标尺
  • uos-network-exporter:终极网络监控解决方案 - 一站式Prometheus网络指标导出器
  • 3步搞定国家中小学智慧教育平台电子课本PDF下载:免费开源工具终极指南
  • 致焦虑症者
  • Codex高效使用全攻略:从Prompt工程到代码审查的AI编程实践
  • 3个理由选择喜马拉雅音频下载器:告别网络限制,构建个人知识库
  • AI大模型时代下,开发、测试与项目管理者的转型与应对策略
  • 百度网盘Web管理神器:BaiduPCS-Web完整使用指南
  • 我花 298 块买了本书,3 个月后它记住的内容比我多
  • 利用ChatGPT提升论文写作的十大技巧完整指南