深入理解无监督学习与K-means聚类算法:原理与实践
一、无监督学习概述
无监督学习(Unsupervised Learning)是机器学习的重要分支之一,与有监督学习不同,它不需要预先标记的训练数据。在无监督学习中,计算机仅根据样本的特征或样本间的相关性,从数据中自动发现隐藏的模式或结构。
核心特点:
-
仅使用特征矩阵X,不需要标签y
-
目标是发现数据中的内在结构和规律
-
适用于探索性数据分析
典型应用场景:
-
客户细分
-
异常检测
-
特征提取
-
数据降维
二、聚类算法基础
聚类算法是无监督学习中最具代表性的算法之一。其核心思想是将数据集中的样本划分为若干个组(称为"簇"),使得:
-
同一簇内的样本相似度高(簇内差异小)
-
不同簇间的样本相似度低(簇外差异大)
与分类算法的区别:
特性 | 聚类算法 | 分类算法 |
---|---|---|
学习类型 | 无监督 | 有监督 |
输入数据 | 只有特征,无标签 | 有特征和标签 |
目标 | 发现数据的自然分组 | 学习从特征到标签的映射 |
典型应用 | 客户细分、文档聚类 | 垃圾邮件检测、图像识别 |
三、K-means算法详解
3.1 算法核心概念
-
代次数)
3.3 算法特点
簇(Cluster):由相似数据点组成的集合,K-means将N个样本划分为K个互不相交的簇。
质心(Centroid):每个簇的中心点,计算为该簇中所有数据点的均值。在二维空间中,质心的坐标就是该簇所有点x坐标和y坐标的平均值。
3.2 算法流程
K-means算法通过迭代优化来最小化簇内平方和(即每个点到其所属簇质心的距离平方和),具体步骤如下:
-
初始化:随机选择K个数据点作为初始质心
-
分配步骤:将每个数据点分配到最近的质心所在的簇
-
更新步骤:重新计算每个簇的质心(取簇内所有点的平均值)
-
迭代:重复分配和更新步骤,直到满足停止条件(通常为质心不再显著变化或达到最大迭代次数)
3.3 算法特点
优点:
-
原理简单,实现容易
-
计算效率高,适合大规模数据集
-
对于球形簇结构的数据效果很好
局限性:
-
需要预先指定K值
-
对初始质心选择敏感
-
对噪声和离群点敏感
-
只能发现球形簇,对复杂形状的簇效果不佳
四、Scikit-learn中的K-means实现
Scikit-learn提供了高效且易用的KMeans类,下面详细介绍其API和使用方法。
4.1 KMeans类主要参数
class sklearn.cluster.KMeans(n_clusters=8, # 要形成的簇数,即K值init='k-means++', # 初始化方法:'k-means++'(智能初始化)或'random'n_init=10, # 使用不同质心种子运行算法的次数max_iter=300, # 单次运行的最大迭代次数tol=1e-4, # 收敛阈值random_state=None # 随机数生成器种子
)
4.2 重要属性
cluster_centers_ : array, [n_clusters, n_features]# 聚类中心的坐标labels_ : array, [n_samples,]# 每个样本所属的簇标签inertia_ : float# 样本到最近聚类中心的平方和总和n_iter_ : int# 实际运行的迭代次数
4.3 完整示例代码
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import numpy as np# 1. 生成模拟数据
# 生成1000个二维样本,分为4个簇
X, _ = make_blobs(n_samples=1000, centers=4, random_state=42)# 2. 可视化原始数据
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], s=10)
plt.title("Original Data")# 3. 创建KMeans模型并拟合数据
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X)# 4. 获取聚类结果
centroids = kmeans.cluster_centers_
labels = kmeans.labels_# 5. 可视化聚类结果
plt.subplot(1, 2, 2)
# 用不同颜色绘制各个簇
for i in range(4):cluster_points = X[labels == i]plt.scatter(cluster_points[:, 0], cluster_points[:, 1], s=10, label=f'Cluster {i}')
# 绘制质心
plt.scatter(centroids[:, 0], centroids[:, 1], s=100, marker='*', c='black', label='Centroids')
plt.title("Clustered Data")
plt.legend()plt.tight_layout()
plt.show()# 6. 输出聚类信息
print(f"Cluster centers:\n{centroids}")
print(f"Inertia (sum of squared distances): {kmeans.inertia_:.2f}")
4.4 代码解析
-
数据生成:使用
make_blobs
生成1000个二维样本点,分为4个自然簇。这个函数非常适合创建聚类算法的测试数据。 -
模型初始化:创建KMeans对象,设置n_clusters=4表示我们希望将数据分为4个簇。
-
模型训练:调用fit方法训练模型,算法会自动找到最优的簇划分。
-
结果可视化:使用不同颜色展示各个簇,并用星号标记出每个簇的质心位置。
-
结果分析:打印出簇中心坐标和inertia值(簇内平方和),这个值越小表示聚类效果越好
五、总结
K-means作为最经典的聚类算法之一,因其简单高效而被广泛应用于各个领域。通过本文的介绍,我们了解了:
-
无监督学习与聚类算法的基本概念
-
K-means算法的原理和实现细节
-
Scikit-learn中KMeans类的使用方法
-
实际应用中的技巧和注意事项
虽然K-means有诸多优点,但也存在一些局限性。在实际应用中,我们可能需要尝试其他聚类算法(如DBSCAN、层次聚类等)或对K-means进行改进(如K-means++初始化)以获得更好的效果。
相关文章:
深入理解无监督学习与K-means聚类算法:原理与实践
一、无监督学习概述 无监督学习(Unsupervised Learning)是机器学习的重要分支之一,与有监督学习不同,它不需要预先标记的训练数据。在无监督学习中,计算机仅根据样本的特征或样本间的相关性,从数据中自动发现隐藏的模式或结构。 …...
单片机-STM32部分:16、Git工具使用
Docshttps://x509p6c8to.feishu.cn/wiki/Pftrw3Z6niRlewkurnyctyw1nQx 使用Git管理本地仓库的好处是,可以知道自己每次修改了哪些内容,随时进行版本切换。 待完善。...
扬州卓韵酒店用品:优质洗浴用品,提升酒店满意度与品牌形象
在酒店提供的服务里,沐浴用品占据了非常重要的地位,其质量与种类直接关系到客人洗澡时的感受。好的沐浴用品能让客人洗澡时感到舒心和快乐,反之,质量不好的用品可能会影响客人整个住宿期间的愉悦心情。挑选恰当的洗浴用品不仅能够…...
Coze 实战教程 | 10 分钟打造你的AI 助手
> 文章中的 xxx 自行替换,文章被屏蔽了。 📱 想让你的xxx具备 AI 对话能力?本篇将手把手教你,如何用 Coze 平台快速构建一个能与用户自然交流、自动回复提问的 xxx助手,零代码、超高效! 📌…...
使用 frp 实现内网穿透:从基础到进阶
在日常开发中,我们经常会遇到需要将本地服务暴露给外部用户的情况,比如测试同学需要临时测试一个本地开发的 Web 服务,或者希望在出差时远程访问家里的 NAS。这些需求的核心问题都是如何实现内网穿透。 一、为什么选择 frp? 经过…...
redis中key的过期和淘汰
一、过期(redis主动删除) 设置了ttl过期时间的key,在ttl时间到的时候redis会删除过期的key。但是redis是惰性过期。惰性过期:redis并不会立即删除过期的key,而是会在获取key的时候判断key是否过期,如果发现…...
鸿蒙OSUniApp制作多选框与单选框组件#三方框架 #Uniapp
使用UniApp制作多选框与单选框组件 前言 在移动端应用开发中,表单元素是用户交互的重要组成部分。尤其是多选框(Checkbox)和单选框(Radio),它们几乎存在于每一个需要用户做出选择的场景中。虽然UniApp提供…...
和为target问题汇总
文章目录 习题题型1377.组合总和 IV 题型2494.目标和 和为target的问题,可以有很多种问题的形式的考察,当然,及时的总结与回顾有利于我们熟练掌握这些知识! 题型1 爬楼梯问题,是对于转移步伐有规定,在不同…...
Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
目录 Ubuntu使用Docker搭建SonarQube企业版(含破解方法)SonarQube介绍安装Docker安装PostgreSQL容器Docker安装SonarQube容器SonarQube汉化插件安装 破解生成license配置agent 使用 Ubuntu使用Docker搭建SonarQube企业版(含破解方法ÿ…...
牛客网 NC22167: 多组数据a+b
牛客网 NC22167: 多组数据ab 题目分析 这道题目来自牛客网(题号:NC22167),要求我们计算两个整数a和b的和。乍看简单,但有以下特殊点需要注意: 输入包含多组测试数据每组输入两个整数当两个整数都为0时表示…...
EdgeShard:通过协作边缘计算实现高效的 LLM 推理
(2024-05-23) EdgeShard: Efficient LLM Inference via Collaborative Edge Computing (EdgeShard:通过协作边缘计算实现高效的 LLM 推理) 作者: Mingjin Zhang; Jiannong Cao; Xiaoming Shen; Zeyang Cui;期刊: (发表日期: 2024-05-23)期刊分区:本地链接: Zhang 等 - 2024 …...
π0: A Vision-Language-Action Flow Model for General Robot Control
TL;DR 2024 年 Physical Intelligence 发布的 VLA 模型 π0,基于 transformer 流匹配(flow matching)架构,当前开源领域最强的 VLA 模型之一。 Paper name π0: A Vision-Language-Action Flow Model for General Robot Contr…...
RabbitMQ高级篇-MQ的可靠性
目录 MQ的可靠性 1.如何设置数据持久化 1.1.交换机持久化 1.2.队列持久化 1.3.消息持久化 2.消息持久化 队列持久化: 消息持久化: 3.非消息持久化 非持久化队列: 非持久化消息: 4.消息的存储机制 4.1持久化消息&…...
4、前后端联调文生文、文生图事件
4、前后端联调文生文、文生图事件 原文地址 1、底部【发送按钮】事件触发调用后端AI程序逻辑 <!-- 前端模板如下: --> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>小薛博客LLM大模型实战</title><me…...
深度学习中的提示词优化:梯度下降全解析
深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...
Midjourney 最佳创作思路与实战技巧深度解析【附提示词与学习资料包下载】
引言 在人工智能图像生成领域,Midjourney 凭借其强大的艺术表现力和灵活的创作模式,已成为设计师、艺术家和创意工作者的核心工具。作为 CSDN 博主 “小正太浩二”,我将结合多年实战经验,系统分享 Midjourney 的创作方法论&#x…...
【数字图像处理】半开卷复习提纲
1:要求 2张A4纸以内,正反面均可写 (不过博主由于墨水浸到背面了,采用了把2张单面通过双面胶粘起来的方法,结果考前半个小时都在用这个难用的双面胶。。。) 2:提纲内容 3:提示 考的…...
交通运输与能源融合发展——光储充在交通上的应用完整解决方案
在全球积极应对气候变化、推动可持续发展的大背景下,交通运输与能源领域的融合发展成为关键趋势。近日,交通运输部等十部门联合发布的《关于推动交通运输与能源融合发展的指导意见》,为这两个重要行业的协同前行指明了清晰的方向,…...
API 接口开放平台 Crabc 3.2 发布
2025 年 5 月 15 日,API 接口开放平台 Crabc 3.2 发布。 Crabc 是一款 API 接口开发平台、企业级接口管理和 SQL2API 平台。它支持动态数据源、动态 SQL 和标签,能接入多种 SQL 或 NoSQL 数据源,包括 MySQL、Oracle、达梦、TiDB、Hive、ES 和…...
基于智能推荐的就业平台的设计与实现(招聘系统)(SpringBoot Thymeleaf)+文档
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...
【web应用】配置Java JDK与maven3的环境变量
文章目录 一、控制面板 - 系统 - 高级系统设置-环境变量二、用户变量和系统变量的配置方法一样:三、查看是否配置成功 maven有两种安装方式: 1、IDEA捆绑安装,一般是maven3【这里配置的环境变量是捆绑安装这种方式】 2、手动下载安装插件 一、…...
编程日志5.7
二叉树的功能代码 #include<iostream> using namespace std; //二叉树结点定义 template<typename T> struct TreeNode { T val;//定义了一个类型为T的成员变量val,用于存储树节点的值 TreeNode* left;//定义了一个指向TreeNode类型的指针成员变量left,…...
室内定位:热门研究方向与未解难题深度解析
I. 引言:对普适性室内定位的持续探索 A. 室内定位在现代应用中的重要性 室内定位系统(IPS)正迅速成为众多应用领域的基石技术,其重要性源于现代社会人们约70%至90%的时间在室内度过的事实 1。这些应用横跨多个行业,包括应急响应 1、智能建筑与智慧城市 6、医疗健康(如病…...
图片通过滑块小图切换大图放大镜效果显示
图片通过滑块小图切换大图放大镜效果显示 实现目标: 显示一组图片列表,鼠标进入小图记录当下小图下标,通过小图下标在数组中对应图片显示到大图位置; 鼠标进入大图位置时,带动滑块移动,并将放大两倍的大图…...
[250515] 腾讯推出 AI 编程助手 CodeBuddy,对标 Cursor
目录 腾讯推出 AI 编程助手 CodeBuddy 腾讯推出 AI 编程助手 CodeBuddy 腾讯发布 CodeBuddy,一款 AI 编程助手,旨在提升开发者效率。 主要亮点: CodeBuddy: 全新英文品牌,面向全球开发者。Craft 模式: A…...
OpenCV光流估计:原理、实现与应用
一、什么是光流? 光流(Optical Flow)是计算机视觉中描述图像序列中像素运动模式的重要概念。它表示图像中物体在连续帧之间的表观运动,是由物体或相机的运动引起的。 光流的基本假设 亮度恒常性:同一物体点在连续帧中的亮度保持不变时间持…...
使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据(申请key教程)
使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据 目录 使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据📌 简介🛠 插件安装方法🌍 下载 DEM 数据步骤🔑 注册 OpenTopography 账号(如使用 Cope…...
PHP基础知识
【学习资料】 视频: https://www.bilibili.com/video/BV1Xh411S7G1?spm_id_from333.788.videopod.episodes&vd_sourcebe26b82da70367069ab00d6db4f4ffc0 文档:https://www.runoob.com/php/php-tutorial.html 目录 1,PHP是什么2ÿ…...
Kotlin 和 Java 混合开发时需要注意哪些问题
1 空安全(Null Safety) Kotlin 有严格的空安全机制(如非空类型的 String 和可空类型 String?),但是 Java 没有: Kotlin 代码调用 Java 代码:Java 中的所有引用类型默认都是可空的,…...
乘法口诀练习神器
请你利用python语言开发一个“乘法口诀练习神器”,主要辅助小学生练习乘法口诀,主要功能如下: 1. 能够随机循环出10道题,可以是乘法或者是除法。如果是乘法,确保两个因数都是1-9之间的整数;如果是除法&…...
How to configure Linux mint desktop
Backgrounds apt install mint-backgrounds-*Theme...
【golang】DNS 资源记录(RR)接口
Go 中 miekg/dns 包对 DNS 资源记录(RR)接口 的定义: type RR interface {Header() *RR_HeaderString() stringcopy() RRlen(off int, compression map[string]struct{}) intpack(...)unpack(...)parse(...)isDuplicate(r2 RR) bool }这个接…...
Vue中的自定义指令适用于哪些场景
自定义指令在 Vue 中非常灵活且功能强大,它们可以在多种场景中使用,以实现特定的 DOM 操作或行为 自定义样式和类 自定义指令可以用来动态地添加或修改元素的样式和类。这在需要根据数据动态调整样式时非常有用。 <div id"app"><d…...
边缘计算平台
本文来源 : 腾讯元宝 边缘计算平台是一种在靠近数据源头的网络边缘侧部署的分布式计算架构,通过融合网络、计算、存储和应用核心能力,就近提供实时、低延迟的智能服务。以下是其核心要点: 1. 定义与特点 定义&a…...
2025年5月H12-831新增题库带解析
组播基础 以下关于PIM-SM(SSM)的描述,错误的是哪一项? PIM-SM(SSM)无需维护RPPIM-SM(SSM)模型形成的组播分发树会一直存在,不会因为没有组播流量而消失PIM-SM(SSM)可以在成员端DR上基于组播源地址直接反向建立SPT在PIM-SM(SSM)中依日需要注册组播源 答…...
JavaScript - 运算符之逗号操作符与逗号分隔符(逗号操作符概述、逗号操作符用法、逗号分隔符、逗号分隔符用法)
一、逗号操作符概述 【表达式 1】, 【表达式 2】, 【表达式 3】, ..., 【表达式 N】逗号操作符(,)允许在一个语句中从左到右执行多个表达式,并返回最后一个表达式的值 二、逗号操作符用法 for 循环中的多变量控制 for (let i 0, j 10; i…...
AM1.5G太阳光模拟器参数
AM1.5G太阳光模拟器的参数通常包括光谱匹配度、空间均匀性、时间稳定性等关键指标,这些参数对于太阳能电池的测试和校准至关重要。以下是AM1.5G太阳光模拟器的主要参数: 光谱匹配度 AM1.5G光谱是指大气质量为1.5时,太阳光在地球表面的光谱分…...
YOLO11解决方案之距离计算探索
概述 Ultralytics提供了一系列的解决方案,利用YOLO11解决现实世界的问题,包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 测量两个物体之间的间距被称为特定空间内的距离计算,YOLO11使用两个边界框的中心…...
OkHttp用法-Java调用http服务
特点:高性能,支持异步请求,连接池优化 官方文档:提供快速入门指南和高级功能(如拦截器、连接池)的详细说明,GitHub仓库包含丰富示例。 社区资源:中文教程丰富,GitHub高…...
c/c++中程序内存区域的划分
c/c程序内存分配的几个区域: 1.栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,栈内存分配运算内置于处理器的指令集中,效率很高但是分配的内存容量有…...
JMeter聚合报告中的任务数和并发数区别
JMeter聚合报告中的任务数和并发数有本质的区别。 任务数(样本数) 任务数或样本数是指在性能测试中发出的请求数量。例如,如果模拟20个用户,每个用户发送100次请求,那么总的任务数或样本数就是2000次请求 并发…...
70、微服务保姆教程(十三)Docker容器详细讲义
一、关于Docker 1.1为什么要用docker? 随着开发的项目越来越复杂,软件越来越多,服务器越来越多,我们在开发和部署的时候会遇到很多问题,比如: 1.不同的应用程序可能会有不同的应用环境,比如Java开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都…...
2025年5月-信息系统项目管理师高级-软考高项-成本计算题
成本计算题挣值分析、成本计算题如何学?1、PV,EV,AC需要理解,根据题目给出的一些个条件需要求得这些值;2、CV,SV,CPI,SPI公式必须记住,需要根据求得的值判断项目的进度和成本的执行情况&#x…...
【BotSharp详细介绍——一步步实现MCP+LLM的聊天问答实例】
BotSharp详细介绍——一步步实现MCPLLM的聊天问答实例 一、MCP原理介绍二、创建BotSharp的项目,实现LLM推理机器人1、新建一个 解决方案,结构如下:2、先看下 MyWeatherPlugin3、创建MyWeatherMcpAPI 三、创建 MCP Server1、添加引用2、添加工…...
[Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化
文章目录 [Linux性能优化] 线程卡顿优化。一、问题定位:CPU 资源分析二、线程卡顿现场复现线程优化前图片线程优化后图片 [Linux性能优化] 线程卡顿优化。 一、问题定位:CPU 资源分析 线程卡顿通常与 CPU 资源竞争、线程调度异常相关,第一步…...
鸿蒙OSUniApp 开发的文件上传与下载功能#三方框架 #Uniapp
使用 UniApp 开发的文件上传与下载功能 前言 在移动应用开发中,文件上传与下载是非常常见且重要的功能需求。无论是上传用户头像、提交表单附件,还是下载资源文件、缓存图片,这些需求几乎存在于每一个成熟的应用中。UniApp 作为一个跨平台开…...
【MySQL】基础知识
MySQL(一)基础知识 MySQL 一、结构 1.客户端 2.服务器 分布式系统 二、存储 1.空间 1.1内存 1.1.1速度 1.1.2稳定性 1.1.3大小 1.1.4使用 1.2硬盘 1.2.1速度 1.2.2稳定性 1.2.3大小 1.2.4【Java学习】反射-CSDN博客 2.体系 表-数据库-服务器 3.特点 3.1…...
产品销量数据爬虫通用模板
最近遇到各行各业的需要爬取销售数据,每次写一个教程相对麻烦,所以思前考后我还是觉得写一个通用模板更适合。所以模板需要足够的灵活性,让用户能够自定义选择器。比如,产品标题、价格、销量的CSS选择器可能因网站而异,…...
一文讲透 Vue3 + Three.js 材质属性之皮革篇【扫盲篇】
文章目录 前言一、Three.js材质系统基础1.1 为什么选择PBR材质?1.2 关键参数解析 二、不同类型皮革的材质配置2.1 牛皮材质实现2.2 羊皮材质实现2.3 仿皮材质实现 三、高级贴图技术3.1 贴图制作流程3.2 组合贴图实战 四、性能优化策略4.1 贴图压缩技术4.2 材质共享4…...
mysql读写分离
一、读写分离原理 客户端连接代理层,代理层(中间件)来实现读操作给从服务器,写操作给主服务器。 二、示例 mycat实现读写分离 读写分离在主从复制的基础上 1客户机1代理1主2从1、网络主 192.168.10.101从1 192.168.10.102从2 …...