聚类-一种无监督分类算法

目录

 1、聚类任务

2、性能度量

(1)外部指标

(2)内部指标

 3、具体聚类方法

(1)原型聚类

(2)密度聚类

(3)层次聚类


“无监督学习”(unsupervised learning):训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。“聚类”(clustering)是无监督任务中研究最多,应用最广
聚类:试图将数据集中的样本划分为若干个通常是不相交的子集聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。它本着的是物以类聚,人以群居的这个方式来进行的,它并不需要标签,但是它能够把相似的样本聚成一类
 

 1、聚类任务

2、性能度量

        原来的时候是带有标签的,预测结果和标签结果进一个比较。这样的话我就知道我这个聚类到底是分对了还是我分类器是分对了分错了,但是聚类任务中它是没有标签的话我怎么去度量我们这个分类的结果好坏?性能度量主要有两个,一个是外部指标,一个是内部指标


(1)外部指标

          外部指标是指的是我们在进行对具体方法的好坏进行评价的时候,我们要找一个参考模型

有 了a,b,c,d这些值,就可以计算:

越大越好

(2)内部指标

        不参考任何模型,只根据聚类结果进行判断:类内相似度越高越好,类间相似度越差越好。簇内紧凑,簇间分散”

 轮廓系数

 

DB指数 

 距离计算:

        如果这个属性中它是离散的,而且它的属性定义为飞机,火车和轮船。那么,我们怎么去计算飞机和火车之间的距离,怎么去计算火车和轮船之间的距离?通过分布形式比例的形式计算:

 3、具体聚类方法

(1)原型聚类

k-means算法 ※

学习向量量化算法:结合监督信息,通过原型向量(可理解为 “代表性样本”)学习样本的类别划分,适用于带有标签的训练数据。用监督信息辅助优化 “原型簇” 的划分,核心逻辑仍是通过相似度分组(聚类的本质),因此属于结合监督信号的聚类算法,监督信息是优化手段,而非改变其聚类的本质属性。

高斯混合聚类

(2)密度聚类

DBSCAN

(3)层次聚类

        层次聚类通过构建 “层次树”( dendrogram )划分簇,分为凝聚式(自底向上)和分裂式(自顶向下),常用凝聚式方法。

AGNES算法-自底向上

        现在有一共有30个样本,那么这30个样本首先我们去选择两两之间去选择。两两之间进行计算,首先要计算出来最近的两个样本,我们发现1和29最近,就把1和29进行合并。合并之后计算它的一个向量均值,得到了一个新的样本那这样的话,这个样本数量从30就变到了29,因为1和29合并了。那么我们再计算这29个和另外的这些两两计算它的一个距离。找到其中的最小的值再把它变成合并成为一个新的,那就29变成了28...........这样两两计算的最后越来越小,越来越少,最后就变成了这两个进行合并变成一类了。

4、代码实现

import numpy as np
import matplotlib.pyplot as plt# 两点欧氏距离
def distance(e1, e2):return np.sqrt((e1[0] - e2[0]) ** 2 + (e1[1] - e2[1]) ** 2)# 集合中心
def means(arr):return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])])  # mean用于求取均值   arr存放某一个簇中的点if __name__ == "__main__":## 生成二维随机坐标(如果有数据集就更好)arr = np.random.randint(0, 100, size=(100, 2))## 初始化聚类中心和聚类容器m = 5  # 聚类个数k_arr = np.random.randint(0, 100, size=(5, 2))  # 随机初始5个中心cla_temp = [[], [], [], [], []]  # 存放每个簇中的点## 迭代聚类n = 20  # 迭代次数for i in range(n):  # 迭代n次for e in arr:  # 把集合里每一个元素聚到最近的类ki = 0  # 假定距离第一个中心最近min_d = distance(e, k_arr[ki])for j in range(1, k_arr.__len__()):if distance(e, k_arr[j]) < min_d:  # 找到更近的聚类中心min_d = distance(e, k_arr[j])ki = jcla_temp[ki].append(e)# 迭代更新聚类中心for k in range(k_arr.__len__()):if n - 1 == i:breakk_arr[k] = means(cla_temp[k])cla_temp[k] = []## 可视化展示col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']  # 仅提供了5种颜色for i in range(m):plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])  # 画中心的散点图plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i])  # 画簇中的点plt.show()if __name__ == "__main__":## 1. 生成随机数据# 生成100个二维随机点,坐标范围在0-100之间arr = np.random.randint(0, 100, size=(100, 2))  # 形状为(100, 2),100个样本,每个样本2个特征(x,y)## 2. 初始化聚类参数m = 5  # 聚类的簇数(K=5)# 随机初始化5个聚类中心(从0-100中随机取坐标)k_arr = np.random.randint(0, 100, size=(5, 2))  # 形状为(5, 2),每个中心是一个二维坐标# 初始化5个空列表,用于存放每个簇中的点cla_temp = [[], [], [], [], []]  # 索引0-4对应5个簇## 3. 迭代执行K-Means聚类n = 20  # 迭代次数(可调整,次数越多结果越稳定)for i in range(n):  # 迭代n次优化聚类结果# 步骤1:将每个数据点分配到最近的簇for e in arr:  # 遍历每个数据点ki = 0  # 初始假设最近的簇是第0个min_d = distance(e, k_arr[ki])  # 计算当前点到第0个中心的距离# 遍历其他簇中心,找到更近的中心for j in range(1, k_arr.__len__()):d = distance(e, k_arr[j])if d < min_d:  # 发现更近的簇中心min_d = dki = j  # 更新最近簇的索引cla_temp[ki].append(e)  # 将点分配到最近的簇# 步骤2:更新每个簇的中心(最后一次迭代不需要更新,直接保留结果)for k in range(k_arr.__len__()):if n - 1 == i:  # 如果是最后一次迭代,不更新中心,直接跳出break# 计算当前簇的新中心(均值)k_arr[k] = means(cla_temp[k])# 清空当前簇的点列表,为下一次迭代做准备cla_temp[k] = []## 4. 可视化聚类结果# 定义5种颜色,用于区分不同的簇col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']for i in range(m):# 绘制每个簇的中心(用大圆点表示)plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])# 绘制每个簇中的数据点(用小圆点表示)plt.scatter([e[0] for e in cla_temp[i]],  # 所有点的x坐标[e[1] for e in cla_temp[i]],  # 所有点的y坐标color=col[i])plt.show()  # 显示图像

聚成五类

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

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

相关文章

ES6 标签模板:前端框架的灵活利器

ES6&#xff08;ECMAScript 2015&#xff09;引入的模板字符串&#xff08;Template Literals&#xff09;为 JavaScript 开发者提供了更简洁的字符串处理方式&#xff0c;而模板字符串标签&#xff08;Tagged Template Literals&#xff09;则进一步扩展了其功能性。通过标签函…

解锁编程核心能力:深入浅出数据结构和算法

——为什么它们是你代码效率的终极武器&#xff1f; &#x1f31f; 引言&#xff1a;程序世界的基石 想象你正在建造摩天大楼&#xff1a;数据结构是钢筋骨架&#xff0c;决定建筑的结构与承重能力&#xff1b;算法则是施工蓝图&#xff0c;指导如何高效完成建造。两者结合&am…

Jenkins运行pytest时指令失效的原因以及解决办法

错误收集 Started by user 偷走晚霞的人 Running as SYSTEM Building in workspace C:\Users\Administrator\.jenkins\workspace\TestAAA [TestAAA] $ cmd /c call C:\Users\Administrator\AppData\Local\Temp\jenkins5821160869728612887.bat C:\Users\Administrator\.jenkins…

MySQL数据库本地迁移到云端完整教程

一、准备工作 安装MySQL客户端工具获取云端数据库连接信息&#xff1a; 主机地址端口号用户名密码数据库名二、本地数据库导出 mysqldump -h 127.0.0.1 -P 4406 -u root -p 数据库名 > backup.sql执行后会提示输入密码&#xff0c;完成后会在当前目录生成backup.sql文件 三、…

InvokeRepeating避免嵌套调用

InvokeRepeating嵌套这会导致指数级增长的重复调用堆叠。使用单一协程PeriodicActionRoutine替代所有InvokeRepeating避免方法间相互调用造成的堆叠如果需要多层级时间控制&#xff08;如主循环子循环&#xff09;&#xff1a;IEnumerator MultiLevelTimer() {float mainInterv…

【工具】好用的浏览器AI助手

&#x1f9e8; 一、什么是 Sider&#xff1f; Sider 是一个 Chrome 浏览器插件&#xff0c;你可以把它看作一个「网页边上的 AI 小助手」。 &#x1f5e3;️ 它就像你网页旁边的 AI 机器人&#xff0c;可以帮你回答问题、总结文章、翻译、写文案、改写内容、甚至帮你学习英文&…

C++:list(2)list的模拟实现

list的模拟实现一.list与vector1.底层结构的本质区别2.模拟实现的核心差异2.1数据存储的方式2.2 初始化的过程2.3 插入元素的操作2.4 删除元素的操作2.5 访问元素的效率3.总结二.头文件list.h1. **命名空间与模板**2. **核心数据结构**3. **构造函数**4. **模板参数设计**5. **…

【595驱动8*8点阵】2022-9-11

缘由LED点阵屏只能一次亮一列-嵌入式-CSDN问答 #include "REG52.h" sbit dsP1^0;//数据线 595的14脚 sbit shP1^1;//数据输入时钟线 595的11脚 sbit stP1^2;//输出存储器锁存时钟线 595的12脚 void QuDong595(unsigned char sj) {unsigned char aa8;while(aa--){ds…

AI总结视频以及谷歌浏览器插件安装步骤

本篇介绍用AI一键总结全网视频内容的独家方法&#xff0c;支持B站、抖音、小红书等任何平台的视频&#xff0c;提高学习效率&#xff0c;帮助一键提取视频文案、划分章节&#xff0c;还能生成双语翻译&#xff0c;这个方法直接在线总结所有视频。 一.准备工作&#xff1a; 需要…

网络协议HTTP、TCP

概述如何让数据具有自我描述性?为什么网络有层级的划分?交换机、路由器要不要阅读一个信息的头部&#xff1f;要不要阅读数据部分&#xff1f; 网卡&#xff1a;网卡可以完成帧的封装和解封装&#xff0c;工作在数据链路层。 中继器&#xff1a;中继器以比特方式将网络信号进…

Linux选择题

第12题&#xff08;多选题&#xff09;原题: 能够为逻辑卷增加容量的命令有( )。A. lvresize: 此命令可以用来调整逻辑卷的大小&#xff0c;既可以增大也可以缩小。例如&#xff0c;lvresize -L 1G /dev/vgname/lvname 会增加1GB&#xff0c;lvresize -L 10G /dev/vgname/lvnam…

使用钉钉开源api发送钉钉工作消息

在工作管理系统场景中&#xff0c;上下级和不同部门之间常常有请假&#xff0c;餐补等流程操作&#xff0c;而这些操作通常需要人员手动进行&#xff0c;这里我们引入一个钉钉的api&#xff0c;可以基于钉钉来发送工作消息通知1、导入钉钉sdk<dependency><groupId>…

拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统

一、引言 在数字化转型浪潮中&#xff0c;超过76%的基层业务人员仍被困在"SQL恐惧症"的泥潭里——他们精通业务逻辑却受限于技术门槛&#xff0c;面对海量数据时只能反复请求IT部门协助。本项目通过PythonPyQt来构建基于Excel风格的查询系统&#xff0c;从而打破这种…

KubeKey安装KubeSphere、部署应用实践问题总结

使用KubeSphere的KubeKey 安装K8s 集群过程中&#xff0c;碰到了一些问题&#xff0c;现在都一一解决了&#xff0c;以此记录一下。 kubekey 安装k8s 集群报错 execute task timeout, Timeout1m error: Pipeline[CreateClusterPipeline] execute failed: Module[GreetingsModul…

基于粒子群优化的PID控制在药液流量控制系统中的应用

基于粒子群优化的PID控制在药液流量控制系统中的应用 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。 1. 引言 在现代工业控制系统中,精确的流量控制是许多生产过程的关键环节。本文针对药液流量控制…

不用电脑要不要关机?

1. 短时间不用&#xff08;午休、临时外出&#xff09;&#xff1a;建议「睡眠」或「休眠」睡眠&#xff1a;电脑暂停工作&#xff0c;唤醒速度快&#xff0c;耗电较少适合需要快速恢复工作的场景休眠&#xff1a;整机断电&#xff0c;唤醒速度比睡眠慢&#xff0c;但完全不耗电…

【Spring AI】SiliconFlow-硅基流动

硅基流动 https://docs.siliconflow.cn/cn/userguide/introduction

swagger基本注解@Tag、@Operation、@Parameters、@Parameter、@ApiResponse、@Schema

swagger基本注解 Tag 介绍&#xff1a;用于给接口分组&#xff0c;用途类似于为接口文档添加标签。用于&#xff1a;方法、类、接口。常用属性&#xff1a; name&#xff1a;分组的名称 RestController RequestMapping("/sysUser") Tag(name "管理员接口&quo…

Unity 实现帧率(FPS)显示功能

一、功能介绍本教程实现一个 FPS 显示脚本&#xff0c;支持 TextMeshProUGUI 组件。脚本会每秒更新一次帧率&#xff0c;并显示在 UI 上&#xff0c;便于开发和调试时观察性能变化。二、完整代码将以下代码保存为 FPS.cs 脚本&#xff1a;using UnityEngine; using TMPro;[Requ…

【星野AI】minimax非活动时间充值优惠漏洞

点开发现有活动即将开启。把手机时间修改为20250729&#xff0c;或者其它活动内时间。发现活动的充值接口未进行时间校验。叠加新人首充优惠&#xff0c;充值六元&#xff0c;获得1800钻。在非活动时间获取了优惠。