一、聚类算法

概念

        属于无监督学习算法,即有特征无标签,根据样本之间的相似性,将样本划分到不同的类别中。

所谓相似性可以理解为欧氏距离、曼哈顿距离、切比雪夫距离... 。

分类

按颗粒度分为:粗聚类、细聚类。

按实现方法分为: K-means聚类、层次聚类、 DBSCAN聚类、谱聚类

二、K-Means聚类

        K-Means 是机器学习中最经典、最常用的聚类算法之一

        目标是在没有先验知识的情况下,自动发现数据集中的内在结构和模式

        适用场景:一般大厂,项目初期在没有 先备知识的情况下的大厂

实现流程 ​​​​

                

  1. 事先确定常数K ,常数K意味着最终的聚类类别数
  2. 随机选择 K 个样本点作为初始聚类中心
  3. 计算每个样本到 K 个中心的距离,选择最近的聚类中心点作为标记类别
  4. 根据每个类别中的样本点,重新计算出新的聚类中心点(平均值),如果计算得出的新中心点与原中心点一样则停止聚类,否则重新进行第 3 步过程,直到聚类中心不再变化

实现API

sklearn.cluster.KMeans

# 1.导入工具包
import os
os.environ['OMP_NUM_THREADS']='4'
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs #数据生成器
from sklearn.metrics import calinski_harabasz_score  # 评估指标,值越大聚类效果越好
# 2 创建数据集 1000个样本,每个样本2个特征,4个质心蔟,数据标准差[0.4, 0.2, 0.2, 0.2],随机种子22
x, y = make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1], [0,0], [1,1], [2,2]],cluster_std = [0.4, 0.2, 0.2, 0.2],random_state=22)
# x[:, 0]:横坐标(第一个特征)
# x[:, 1]:纵坐标(第二个特征)
print(x) #坐标
print(y) #标签
# 参1:横坐标,参2:纵坐标
plt.scatter(x[:, 0], x[:, 1])
plt.show()
# 3 使用k-means进行聚类, 并使用CH方法评估
es = KMeans(n_clusters=4, random_state=22)
y_pre=es.fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pre)
plt.show()
# 4 模型评估
print(calinski_harabasz_score(x, y_pre))

三、聚类算法的评估指标

1. SSE + 肘部法

SSE
  • 概述:所有的簇 的所有样本到该簇质心的 误差的平方和
  • 特点:随着K值增加,SSE值逐渐减少
  •  目标:  SSE越小,簇内样本越聚集,内聚程度越高

        

肘部法—K值确定
  • 对于n个点的数据集,迭代计算 k from 1 to n,每次聚类完成后计算 SSE
  • SSE 是会逐渐变小的,因为每个点都是它所在的簇中心本身。
  • SSE 变化过程中会出现一个拐点,下降率突然变缓时即认为是最佳 n_clusters 值
  • 在决定什么时候停止训练时,肘形判据同样有效,数据通常有更多的噪音,在增加分类无法带来更多回报时,我们停止增加类别。

                        

K值增大,SSE值会随之减小,下降梯度突然变换的时候,那个K的值,就是我们要寻找得最佳值

API实现
#导包
import os
os.environ['OMP_NUM_THREADS']='4'
#导包
from sklearn.cluster import KMeans  #聚类API  采用指定 质心 分簇
import matplotlib.pyplot as plt
from sklearn.datasets import  make_blobs  # 默认会按照高斯分布(正态分布)生成数据集 ,只需要 指定 均值 ,标准差#1、定义函数 演示:SSE+肘部法
def dm01_sse():#0、定义SSE列表 ,目的:每个K值的SSE值sse_list = []#1、获取数据#参1:样本数量  参2:特征数量 参3:4个簇的质点  参4:std标准差  参5:固定随机种子x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],cluster_std=[0.4,0.2,0.2,0.2],random_state=23)#2、for训练  训练   获取每个K值,对应的SSE值for k in range(1,100):#2.1创建模型#参1:簇的数量#参2:最大迭代次数#参3:固定随机种子es=KMeans(n_clusters=k,max_iter=100,random_state=23)#2.2 训练模型es.fit(x)#2.3获取每个簇的sse值sse_value=es.inertia_#2.4将每个K值对应的SSE值,添加到sse_listsse_list.append(sse_value)#3.绘制SSE曲线 -》数据可视化# print(sse_list)#3.1创建画布plt.figure(figsize=(20,10))#3.2设置标题plt.title("sse value")#3.3设置x轴plt.xticks(range(0,100,3))#参1:K值  参2:该K值所对应的SSE值# o  圆点样式# r 红色# - 连接数据点的样式  实线# color='r'   marker='o'  linestyle='-'plt.plot(range(1,100),sse_list,'or-')plt.xlabel("k")plt.ylabel("sse")plt.grid()plt.show()if __name__ == '__main__':dm01_sse()

 聚类效果评估 – 代码效果展示SSE误差平方和,x轴为k值,y轴为SSE值

        

通过图像可观察到 n_clusters=4 sse开始下降趋缓, 最佳值4

2. SC轮廓系数法—高内聚低耦合

轮廓系数法考虑簇内的内聚程度(Cohesion),簇外的分离程度(Separation)

  • 对计算每一个样本 i 到同簇内其他样本的平均距离 ai,该值越小,说明簇内的相似程度越大
  • 计算每一个样本 i 到最近簇 j 内的所有样本的平均距离 bij,该值越大,说明该样本越不属于其他簇 j
  • 根据下面公式计算该样本的轮廓系数:S = b −a/max⁡(a, b)
  • 计算所有样本的平均轮廓系数
  • 轮廓系数的范围为:[-1, 1],SC值越大聚类效果越好

                

API实现
#导包
import os
os.environ['OMP_NUM_THREADS']='4'
#导包
from sklearn.cluster import KMeans  #聚类API  采用指定 质心 分簇
import matplotlib.pyplot as plt
from sklearn.datasets import  make_blobs  # 默认会按照高斯分布(正态分布)生成数据集 ,只需要 指定 均值 ,标准差
from sklearn.metrics import silhouette_score,calinski_harabasz_score  #silhouette_score :sc   calinski_harabasz_score:chdef dm02_sc轮廓系数法():#0、定义sc列表 ,目的:每个K值的SSE值sc_list = []#1、获取数据#参1:样本数量  参2:特征数量 参3:4个簇的质点  参4:std标准差  参5:固定随机种子x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],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): #考虑簇外 至少2簇es=KMeans(n_clusters=k,max_iter=100,random_state=23)es.fit(x)y_pre=es.predict(x)sc_value=silhouette_score(x,y_pre)sc_list.append(sc_value)#绘制sc曲线-》数据可视化plt.figure(figsize=(20,10))plt.title("sc value")plt.xticks(range(0,100,3))plt.xlabel("k")plt.ylabel("sc")plt.grid()# 注意  sc 值从2开始plt.plot(range(2,100),sc_list,'or-')plt.show()
if __name__ == '__main__':dm02_sc轮廓系数法()

代码效果展示 – SC系数

        

                通过图像可观察到 n_clusters=4 取到最大值; 最佳值4

3.CH轮廓系数法—高内聚低耦合加质心

CH 系数考虑簇内的内聚程度簇外的离散程度质心的个数。

CH系数越大越好

  • 类别内部数据的距离平方和越小越好
  • 类别之间的距离平方和越大越好,
  • 聚类的种类数越少越好

                

SSW 的含义:相当于SSE,簇内距离

SSB 的含义:簇间距离

API实现

#导包
import os
os.environ['OMP_NUM_THREADS']='4'
#导包
from sklearn.cluster import KMeans  #聚类API  采用指定 质心 分簇
import matplotlib.pyplot as plt
from sklearn.datasets import  make_blobs  # 默认会按照高斯分布(正态分布)生成数据集 ,只需要 指定 均值 ,标准差
from sklearn.metrics import silhouette_score,calinski_harabasz_score  #silhouette_score :sc   calinski_harabasz_score:chdef dm03_CH系数():#0、定义sc列表 ,目的:每个K值的SSE值ch_list = []#1、获取数据#参1:样本数量  参2:特征数量 参3:4个簇的质点  参4:std标准差  参5:固定随机种子x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],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): #考虑簇外 至少2簇es=KMeans(n_clusters=k,max_iter=100,random_state=23)es.fit(x)y_pre=es.predict(x)sc_value=calinski_harabasz_score(x,y_pre)ch_list.append(sc_value)#绘制sc曲线-》数据可视化plt.figure(figsize=(20,10))plt.title("ch value")plt.xticks(range(0,100,3))plt.xlabel("k")plt.ylabel("ch")plt.grid()# 注意  sc 值从2开始plt.plot(range(2,100),ch_list,'or-')plt.show()
if __name__ == '__main__':dm03_CH系数()

代码效果展示 – CH系数

        

通过图像可观察到 n_clusters=4 取到最大值; 最佳值4

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android seekbar显示刻度

SeekBar简介 SeekBar是Android中的一个可交互UI组件,允许用户通过拖动滑块在特定范围内选择数值。继承自ProgressBar,但增加了用户手动调节功能,常用于音量控制、亮度调节等场景。 核心属性 android:maxHeight // 背景高度 android:progres…

【高并发内存池】五、页缓存的设计

文章目录Ⅰ. page cache页缓存的结构设计Ⅱ. 完善central cache中的 get_span() 函数Ⅲ. 实现页缓存获取span对象的接口Ⅰ. page cache页缓存的结构设计 ​ 首先页缓存还是一个哈希桶的结构,但是和前两者不同的是,页缓存的哈希桶中存放的是一个或者多个…

Elasticsearch(text和keyword)区别分析

text:全文检索类型,经过分词处理,支持模糊匹配‌ keyword:精确匹配类型,适用于聚合、排序和过滤‌ text 1. 核心属性 ‌analyzer属性‌: 指定用于索引和搜索的分词器 默认使用标准分析器(Standard Analyzer) 示例:"analyzer": "ik_max_word"(中文…

通过tailscale实现一台电脑上vscode通过ssh连接另一台电脑上的VMware Linux 虚拟机

当需要通过一台windows电脑上的vscode来ssh连接另一台电脑上的linux虚拟机进行远程操作,可以通过tailscale来实现。 Linux虚拟机上安装tailscale 由于挂代理下载仍然很慢,而清华镜像源又没有tailscale的软件包,所以可以通过下载 DEB 包安装…

[Upscayl图像增强] docs | 前端 | Electron工具(web->app)

链接:https://upscayl.org/docs:Upscayl Upscayl是一款桌面应用程序,允许用户使用人工智能放大和增强图像。 提供了一个用户友好的图形界面(渲染器用户界面),用户可以选择图像或文件夹,从多种AI…

阿里云通义MoE全局均衡技术:突破专家负载失衡的革新之道

MoE模型的基本原理与核心价值 混合专家模型(Mixture of Experts,MoE)是当前AI大模型领域最重要的架构创新之一,其核心思想是通过多个“专家”网络协同处理输入数据,并由门控网络动态选择或组合各个专家的输出&#xf…

macOS中设置环境变量的各文件及作用域

在 macOS 中,~/.zshrc 和 ~/.bash_profile 是 Shell 的配置文件,用于设置环境变量、命令别名、启动命令等。它们在你每次打开终端时会被自动加载。文件对应 Shell作用~/.zshrcZsh(macOS Catalina 及以后默认)每次打开新的终端窗口…

【华为培训笔记】OptiX OSN 9600 设备保护专题

OptiX OSN 9600 设备保护专题 1、光层保护 定义 方式 应用

Python开篇撬动未来的万能钥匙 从入门到架构的全链路指南

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

LabVIEW 与 PLC 通讯

在工业自动化领域,LabVIEW 与 PLC 的通讯极为关键,它能实现设备间高效的数据交互与协同运作。接下来,将从应用场景、软件架构、功能实现、特点、开发问题及解决方法等层面展开阐述。 应用场景​ 智能工厂生产线监控系统中,LabVIE…

11-FreeRTOS任务相关的其他API函数

数据来源地址:gitee.com FreeRTOS任务相关的其他API函数 一、FreeRTOS任务相关的其他API函数介绍 1、FreeRTOS任务相关API函数介绍(部分常用的) 答: 二、任务状态查询API函数 1、获取任务优先级函数 答: UBaseType_t uxTaskPriorityGet…

ECMAScript(2)核心语法课件(Node.js/React 环境)

📚 ECMAScript 核心语法课件(Node.js/React 环境) 1. 变量与作用域 变量声明方式 var:函数作用域,存在变量提升(hoisting)console.log(a); // undefined(变量提升) var a…

Selenium 页面加载超时pageLoadTimeout与 iframe加载关系解析

引言 在 Web 自动化测试中,处理页面加载超时是每个 Selenium 使用者都会遇到的挑战。特别是当页面包含 iframe 时,加载行为变得更加复杂。许多测试工程师困惑于:pageLoadTimeout 究竟能否控制 iframe 的加载?本文将深入探讨这一问…

AI面试将重塑企业招聘流程:从效率到精准度的全面升级

每年校招季,HR团队总被“面试官不够用”“简历太多看不清”“候选人放鸽子”等问题折磨。传统招聘流程冗长、成本高昂、标准参差,已难以适应快速变化的用人需求。而AI面试技术的突破,正在从底层逻辑上重塑招聘链条——从初筛到终面&#xff0…

IOC为什么交由spring容器管理?

根本原因:在 Spring 框架中,将控制反转(IoC) 交由 Spring 容器管理,是为了解决传统编程模式中 “对象创建与依赖管理耦合度高” 的核心问题,最终实现代码的低耦合、高可维护性、高可测试性。要理解这一设计…

Java反射与动态代理学习笔记

Java 反射与动态代理学习笔记反射概述反射允许对成员变量、成员方法和构造方法进行编程访问,提供了在运行时分析类和对象的能力。获取Class对象的三种方式方式代码示例说明Class.forName()Class.forName("全类名")通过类的全限定名获取Class对象对象.getC…

RAG提示词分解

RAG提示词分解 System Message # 智能问答助手&#xff08;RAG系统提示&#xff09;## 角色定义 您是"智能问答助手"&#xff0c;专门基于提供的上下文信息回答用户问题。## 核心规则 1. **严格基于上下文**&#xff1a;仅使用用户提供的<context>中的信息&…

YOLOv8 在 Intel Mac 上的 Anaconda 一键安装教程

YOLOv8 在 Intel Mac 上的 Anaconda 一键安装教程 本文适用于 Intel 芯片 Mac&#xff0c;通过 Anaconda 快速搭建 YOLOv8 环境&#xff0c;支持 CPU 推理与 Notebook 可视化。 全程一键安装&#xff0c;适合小白和入门用户。 &#x1f4d1; 目录 环境准备 一键安装脚本 运行…

Spring 日志文件

Spring 日志文件 文章目录Spring 日志文件日志有什么用&#xff1f;日志怎么用&#xff1f;自定义日志在程序中获取日志对象常用日志框架说明使用日志对象打印日志日志格式说明日志级别日志级别有啥用日志级别分类和使用日志持久化保存更简单的日志输出——lomboklombok更多注解…

五、误差反向传播法(上)

上一章中&#xff0c;我们介绍了神经网络的学习&#xff0c;并通过数值微分计算了神经网络的权重参数的梯度&#xff08;严格来说&#xff0c;是损失函数关于权重参数的梯度&#xff09;。数值微分虽然简单&#xff0c;也容易实现&#xff0c;但缺点是计算上比较费时间。本章我…