肘部法则和轮廓系数(用于确定簇类数目)

news2024/10/6 12:29:55

知识储备

无监督聚类缺点

聚类不同于其他常见机器学习有监督方法,聚类为一种无监督学习方法,原理为随机选取K个质心(K为确定聚类的数目),计算距离质心最近的样本点,不断迭代更新质心。不断地将样本点划分为K种类别
但常见无监督聚类会为0-1聚类,即为并未对聚类边缘样本点进行再判断。
常见聚类算法如K-means需要确定簇类数目。因此如果制定了错误的簇数量,实验结果以及正确识别率会比较差。因此无监督聚类算法最重要的是确定合适的簇类数目K。

无监督聚类的评价指标

聚类的目的是对样本点进行正确分类。因此所需要达到的目的如下所示。

  1. 聚类中同一类别的点尽可能接近该聚类质心
  2. 属于不同类别的点尽可能远离其他聚类质心

在理想情况下,聚类结果为簇内变化较小,簇间变化较大。因此,无监督聚类的质量评价指标如下所示。

  • inertia(惯性),用于计算数据点与所属聚类中心之间的平方距离之和,主要呈现的是簇内之间的变化。
  • silhouette coefficient 轮廓系数,轮廓系数主要用于体现簇内和簇间的变化
  1. 数据点到所属聚类中心的距离,假设为 d n e a r d_{near} dnear
  2. 数据点到次优聚类中心的距离(个人认为是当前数据点距离聚类中心最近,且不为所属聚类中心的其他点),假设为 d n e x t d_{next} dnext
    计算公式轮廓 S = d n e x t − d n e a r m a x ( d n e a r , d n e x t ) S=\frac{d_{next}-d_{near}}{max(d_{near}, d_{next})} S=max(dnear,dnext)dnextdnear,max()方法为求取最大值。若S接近1,证明该聚类算法能够较好的将数据分离为良好的聚类。

常见确定簇数K的方法

  1. 尝试不同数量的簇的r聚类算法,寻找最优的聚类效果,并将设置的簇数K参数确定为正确的簇类数目。
  2. 肘部法则 (The elbow method)
  3. 轮廓系数 (the optimization of the silhouette coefficient)

肘部法则

我们主要通过计算在不同情况下的K值的平均cost function(损失函数)变化从而得出明显变化拐点(inertia点)。
cost function的大小主要与簇数K有关,不同的K之间,inertia曲线的斜率是不同的。具体如图所示。但拐点寻找较为主观。因此肘部法则只能解决部分的确定最有的簇类数目。
在这里插入图片描述

代码实现

from sklearn.cluster import KMeans, AgglomerativeClustering,DBSCAN
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import matplotlib
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.decomposition import PCA
iris = load_iris()
# 获取数据集中的特征向量
data = iris.data
elbow = []
for i in range(1, 20):  # 创建遍历,找到最合适的k值
   kmeans = KMeans(n_clusters=i, init='k-means++', random_state=101)
   kmeans.fit(data)
   elbow.append(kmeans.inertia_)
# 通过画图找出最合适的K值
k_num = [i for i in range(1, 20)]
plt.plot(k_num, elbow, color='blue')
plt.rcParams.update({'figure.figsize': (16, 10), 'figure.dpi': 100})
plt.title('Elbow Method')
plt.show()

具体的结果如图所示。

在这里插入图片描述

轮廓系数

silhouette coefficient 轮廓系数,轮廓系数主要用于体现簇内和簇间的变化。具体公式以及原理如下所示。若S接近1,证明该聚类算法能够较好的将数据分离为良好的聚类。

  1. 数据点到所属聚类中心的距离,假设为 d n e a r d_{near} dnear
  2. 数据点到次优聚类中心的距离(个人认为是当前数据点距离聚类中心最近,且不为所属聚类中心的其他点),假设为 d n e x t d_{next} dnext
    计算公式轮廓 S = d n e x t − d n e a r m a x ( d n e a r , d n e x t ) S=\frac{d_{next}-d_{near}}{max(d_{near}, d_{next})} S=max(dnear,dnext)dnextdnear,max()方法为求取最大值。

代码实现

from sklearn.cluster import KMeans, AgglomerativeClustering,DBSCAN
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import matplotlib
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.decomposition import PCA
iris = load_iris()
# 获取数据集中的特征向量
data = iris.data
 from sklearn import metrics
 # 创建遍历,找到最合适的k值
 scores = []
 for k in range(2, 20):
     labels = KMeans(n_clusters=k).fit(data).labels_
     score = metrics.silhouette_score(data, labels)
     scores.append(score)
 # 通过画图找出最合适的K值
 k_num = list(range(2, 20))
 plt.plot(k_num, scores)
 plt.xlabel('Number of Clusters Initialized')
 # 设置坐标轴的的呈现形式
 plt.xticks(np.arange(0, 20, 1))
 plt.ylabel('Sihouette Score')
 plt.show()

具体代码效果如下所示。
在这里插入图片描述

参考

python实现肘部法则和轮廓系数可视化
如何确定多少个簇?聚类算法中选择正确簇数量的三种方法
K-Means算法之K值的选择

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

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

相关文章

Vue 项目布署后,刷新页面(或跳转页面)出现 404 解决办法

Vue 项目布署后,刷新页面(或跳转页面)出现 404 问题背景为什么会出现404解决办法(两种)方法一:改变服务器配置方法二:改变路由模式 单页应用(SPA)概念 问题背景 今天重新部署一个vue项目的时候…

途牛科技与火山引擎数智平台合作 打造企业大数据系统“降本”新范式

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,南京途牛科技有限公司与火山引擎数智平台(VeDI)的合作获得新进展:途牛大数据系统全面迁移至火山引擎开源大数据…

vue页面转pdf后分页时文字被横向割裂

效果 预期效果 //避免分页被截断async outPutPdfFn (id, title) {const _t this;const A4_WIDTH 592.28;const A4_HEIGHT 841.89;// dom的id。let target document.getElementById(pdf);let pageHeight target.scrollWidth / A4_WIDTH * A4_HEIGHT;// 获取分割dom&#xf…

Spring Boot 整合MyBatis(超详细)

😀前言 本篇博文关于Spring Boot 整合MyBatis,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力&#x…

wazuh初次理解-8-23

一、wazuh配置: 1、进入官网下载OVA启动软件: Virtual Machine (OVA) - Installation alternatives 2、进入虚拟机进行配置: 3、登录提示: 4、将网络连接模式更改为NAT,否则不能上网; 4、重启网络&#…

Rabbitmq配置调优

1、参数调优 queue_index_embed_msgs_below: 控制消息的存储位置。是独立存储到msg_store中,还是嵌入消息的索引一并存储。默认值是4096(字节),即小于4KB的消息会嵌入到消息索引中一并存储。**注:**4KB包括…

电气器件系列四十二:线性直流稳压电源

线性稳压电源是比较早使用的一类直流稳压电源。根据调整管的工作状态,我们常把稳压电源分成两类:线性稳压电源和开关稳压电源。线性稳压直流电源的特点是:输出电压比输入电压低;反应速度快,输出纹波较小;工…

ast在python架构中的使用

AST学习 AST简介: AST(Abstract syntac tree)是编译原理中的概念,是对源代码语法结构的一种抽象表示,它以树的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。 下面的代码展示了以demo.py中的ast语法&…

实景无人直播小白如何操作?抖音/直播带货/实况

在当今数字娱乐领域实景无人直播系统成为了一种备受关注的娱乐方式。这种系统能够将真实场景以实时视频的形式传输到用户终端,让用户可以身临其境地观赏各种精彩的场景。本文将深入探讨实景无人直播系统的操作指南,旨在为读者提供专业性、思考深度和逻辑…

简单版的数组实现哈希表

package com.wei.mybatisflex;import java.util.ArrayList; import java.util.List;/*** 用数组实现哈希表*/ public class ArrayToHash {/*** 键值对定义*/class Pair{private int key;private String val;public Pair(int key, String val) {this.key key;this.val val;}}p…

java八股文面试[数据结构]——HashMap和HashTable区别

HashMap源码中的重要常量 DEFAULT_INITIAL_CAPACITY: HashMap的默认容量,16 MAXIMUM_CAPACITY: HashMap的最大支持容量,2^30 TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树。 UNTREEIFY_THRESHOLD…

无涯教程-PHP - 返回类型声明

在PHP 7中&#xff0c;引入了一个新函数返回类型声明&#xff0c;返回类型声明指定函数应返回的值的类型&#xff0c;可以声明返回类型的以下类型。 intfloatbooleanstringinterfacesarraycallable 有效返回类型 <?phpdeclare(strict_types1);function returnIntValue(i…

Java课题笔记~Element UI

Element&#xff1a;是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&#xff0c;用于快速构建网页。 Element 提供了很多组件&#xff08;组成网页的部件&#xff09;供我们使用。例如 超链接、按钮、图片、表格等等~ 如下图左边的是我们编写页面看到的按钮&#…

如何基于亚马逊云科技打造高性能的 SQL 向量数据库 MyScale

MyScale 是一款完全托管于亚马逊云科技、支持 SQL 的高效向量数据库。MyScale 的优势在于&#xff0c;它在提供与专用向量数据库相匹敌甚至优于的性能的同时&#xff0c;还支持完整的 SQL 语法。在这篇文章中&#xff0c;我们将阐述 MyScale 是如何借助亚马逊云科技的基础设施&…

攻防世界-simple_js

原题 解题思路 js就看源代码&#xff0c;pass是数字&#xff0c;下面还有一串十六进制的编码。 进制转换就是&#xff0c;也是一串数字&#xff0c;那把这两串数字都拿去转ASCII码。 s1 [55,56,54,79,115,69,114,116,107,49,50] s2 [70,65,85,88,32,80,65,83,83,87,79,82,68…

Linux TCP编程流程

一、TCP编程流程 TCP 提供的是面向连接的、可靠的、字节流服务。TCP的服务器端和客户端编程流程如下&#xff1a; 1.socket()方法 用来创建一个套接字&#xff0c;有了套接字就可以通过网络进行数据的收发。这也是为什么进行网络通信的程序首先要创建一个套接字。创建套接字时…

SqlServer2019—解决SQL Server 无法连接127.0.0.1的问题

1、打开SQL Server 2019配置管理器 2、SQL Servere 网络配置(启用 Named Pipes 和 TCP/IP) 3、修改TCP/IP协议(右键选择属性—IP地址)&#xff0c;具体如下图所示&#xff1a; 4、重启SQL Server服务

QT通过ODBC连接GBase 8s数据库(Windows)示例

示例环境&#xff1a; 操作系统&#xff1a;Windows 10 64位数据库及CSDK版本&#xff1a;GBase 8s V8.8_3.0.0_1 64位QT&#xff1a;5.12.0 64位 1&#xff0c;CSDK安装及ODBC配置 1.1&#xff0c;免安装版CSDK 下载免安装版的CSDK驱动&#xff0c;地址&#xff1a;https:…

盛最多水的容器——力扣11

int maxArea(vector<int>& height) {int l=0, r=height.size()

企业如何通过CRM系统获得更多商机?

商机是销售的基础&#xff0c;如何获取更多的商机&#xff0c;是每个企业都关心的问题。通过传统的营销方式来吸引潜在客户&#xff0c;往往成本高、效果低、难以管理。那么有没有一种方式&#xff0c;既节省时间和成本&#xff0c;又可以获取更多商机&#xff1f;当然有&#…