【老计带你懂AI算法】07聚类没有标准答案时让机器自己把数据分堆开头从有答案到没答案前面五篇讲的模型有个共同的前提你得先给数据打好标签。这是垃圾邮件那不是、这套房卖了多少钱、这个肿瘤是良性还是恶性。机器是照着你给的标准答案学的这叫监督学习。可现实里大量数据根本没有标签。你有一百万个用户的行为数据没人事先告诉你谁是谁一类你有一堆商品也没人标好哪些该归一起。这时候你想让机器帮你自动把相似的东西归到一堆怎么办这就是无监督学习要干的事其中最典型、最常用的就是聚类。聚类的目标很朴素在没有标准答案的情况下让机器根据数据本身的相似程度自动把它们分成若干堆术语叫簇。同一堆里的尽量像不同堆之间尽量不像。打个比方你走进一个陌生的大聚会没人给你介绍谁是谁。但你观察一会儿就会发现那边一群人聊投资、这边一群人聊带娃、角落几个人聊游戏你自然而然就把人分成了几堆。你靠的不是谁贴了标签而是他们表现出来的相似性。聚类就是让机器干这件事。K-Means找几个中心点让数据抱团最经典、最常用的聚类算法叫K-MeansK均值思路特别直观。它的核心想法是假设数据能分成K堆那每一堆应该都有一个中心堆里的点都围着自己的中心抱团。于是它要做的就是找到这K个最合适的中心位置让每个点都离它所属的那个中心尽可能近。它怎么找是个特别巧妙的反复迭代过程我用大白话描述第一步随机撒K个中心点比如你想分3堆就先随便撒3个点当临时中心。第二步每个数据点看自己离哪个中心最近就先归到那一堆。第三步每一堆归好后重新计算这堆的真正中心把堆里所有点的位置平均一下得到新中心这就是均值的由来。第四步中心挪动了那每个点离哪个中心最近可能就变了回到第二步重新归堆再算新中心……这个归堆、算中心、再归堆、再算中心的循环反复进行直到中心不再明显移动、分堆稳定下来聚类就完成了。你可以想象成一群人围着几个临时召集人站队召集人根据身边站了谁不断挪到人群正中间人们又根据召集人的新位置重新站队来回几轮就自然形成了几个稳定的圈子。K-Means的软肋K要你自己定K-Means有个绕不开的问题那个K分几堆得你自己事先指定。可现实里你往往并不知道数据该分几堆这就尴尬了。有个常用的办法帮你挑K叫手肘法。思路是把K从小到大试一遍分2堆、3堆、4堆……每次算一下堆内的点离中心有多紧凑这个指标。K越大堆分得越细、点离中心自然越近这个指标一路下降。但你会发现降到某个K之后再增加堆数紧凑度的提升就不明显了曲线出现一个像手肘一样的拐点。那个拐点对应的K通常就是比较合适的分堆数。它背后的直觉是拐点之前每多分一堆都带来明显收益拐点之后收益骤减说明再细分意义不大了。除了K要指定K-Means还有几个脾气得知道它假设每堆大致是圆形、大小差不多的遇到形状怪异比如弯月形的数据堆就会分错它对初始中心的随机位置敏感撒得不好可能收敛到不太好的结果实践中会多撒几次取最好的sklearn默认就这么做它还对离群点敏感一个极端的outlier能把中心拽偏。DBSCAN按密度圈人群还能揪出离群点针对K-Means的软肋另一个经典算法DBSCAN换了个完全不同的思路它不找中心点而是看密度。DBSCAN的想法很符合直觉一堆数据如果某个区域点挤得密密麻麻那这片就是一个簇点和点之间稀稀拉拉的地方就是簇的边界而那些孤零零、周围没几个邻居的点就是噪声离群点。它顺着密集的区域一点点蔓延把连成一片的稠密点圈成一个簇。这带来几个K-Means没有的好处不用事先指定分几堆它自己根据密度算出来有几个簇。能发现任意形状的簇弯月形、环形都行因为它是顺着密度蔓延的不假设是圆的。天生能识别离群点那些不属于任何稠密区域的点会被直接标记为噪声这在异常检测里很有用下一篇孤立森林会专门讲异常检测。当然它也有自己的脾气它靠两个参数控制多密才算密一个是邻域半径一个是成簇的最少点数这俩参数得调而且当数据里不同簇的疏密程度差异很大时用一套统一的密度标准就不好使了。还有一类层次聚类像画家谱除了K-Means和DBSCAN还有一类值得知道的思路叫层次聚类它的画风又不一样像在给数据画一棵家谱树。它有两种走法。一种是自底向上一开始把每个点都当成一个独立的小簇然后每一步把最相近的两个簇合并成一个就像亲戚关系里先合并最亲的再一层层往上合最后所有点合成一大家子。另一种是自顶向下反过来先把所有点当一大堆再逐步往下拆分。层次聚类最迷人的产出是一棵叫树状图的东西它记录了谁先和谁合并、在多相似的程度上合并的完整过程。好处是你不用像K-Means那样事先定死分几堆而是可以事后看着这棵树在你想要的相似程度上横切一刀切出几堆就是几堆非常灵活。打个比方这就像看家谱你想按直系亲属分就切浅一点、想按整个家族分就切深一点一棵树满足不同粒度的需求。它的代价是计算量大数据一多就慢所以更适合中小规模、且你想看清数据层层嵌套结构的场景比如生物学里给物种分类天生就是层层嵌套的。记住聚类不止一种玩法K-Means求快、DBSCAN看密度识异形、层次聚类给你一棵可任意切分的关系树各有各的用武之地。输入和输出长什么样输入一批没有标签的样本每个样本若干数值特征。因为聚类基本都靠算距离所以和上一篇的KNN、SVM一样特征通常要先标准化。输出每个样本被分到的簇编号0号堆、1号堆……。DBSCAN还会把离群点单独标记出来通常标为-1。注意这些编号只是分组标识没有大小和好坏含义聚类只告诉你谁和谁一伙至于每伙代表什么要你自己去解读。上代码K-Means和DBSCAN对比用sklearn在同一份数据上跑两种聚类。输入二维坐标点。输出每个点的簇编号。# 依赖pip install scikit-learnfromsklearn.datasetsimportmake_moonsfromsklearn.clusterimportKMeans,DBSCANfromsklearn.preprocessingimportStandardScalerimportnumpyasnp# 造一份两个弯月形的数据,专门难为假设圆形的K-MeansX,_make_moons(n_samples300,noise0.06,random_state0)XStandardScaler().fit_transform(X)# 聚类前先标准化# K-Means:硬指定分2堆kmKMeans(n_clusters2,n_init10,random_state0)km_labelskm.fit_predict(X)print(K-Means 分出的簇:,np.unique(km_labels))# DBSCAN:按密度自动成簇,还能标离群点dbDBSCAN(eps0.3,min_samples5)db_labelsdb.fit_predict(X)print(DBSCAN 分出的簇(含-1噪声):,np.unique(db_labels))print(DBSCAN 识别出的离群点数量:,int(np.sum(db_labels-1)))# 简单看一下两者对弯月形的处理差异(不画图,看每个簇的样本数)forname,labelsin[(K-Means,km_labels),(DBSCAN,db_labels)]:vals,countsnp.unique(labels,return_countsTrue)print(f{name}各簇样本数:,dict(zip(vals.tolist(),counts.tolist())))运行输出示例K-Means 分出的簇: [0 1] DBSCAN 分出的簇(含-1噪声): [-1 0 1] DBSCAN 识别出的离群点数量: 4 K-Means 各簇样本数: {0: 150, 1: 150} DBSCAN 各簇样本数: {-1: 4, 0: 148, 1: 148}运行你会体会到差异面对弯月形数据K-Means因为假设圆形往往会把两个月牙从中间硬切开、分得不自然而DBSCAN顺着密度蔓延能漂亮地把两个弯月各自圈成一簇还顺手标出零星的噪声点。这直观展示了两个算法适用的数据形状不同。关键参数K-Means的n_clusters分几堆最关键、要你定可用手肘法辅助。K-Means的n_init多撒几次初始中心取最好缓解对初始值敏感的问题。DBSCAN的eps邻域半径和min_samples成簇最少点数这两个共同定义多密才算一簇是DBSCAN调参的核心。优缺点与适用场景K-Means简单、快、易懂适合数据量大、各簇大致圆形且大小相近的场景如用户分群、图像颜色量化。软肋是要指定K、只认圆形、怕离群点。DBSCAN不用指定簇数、能识别任意形状和离群点适合形状不规则的数据和需要顺带做异常检测的场景。软肋是参数要调、对疏密差异大的数据不友好。聚类整体适合探索性分析先看看数据能自然分成几类、用户或商品分群、异常检测、给数据打初步标签。不适合你其实已经有明确标签、该用监督学习的场景那样用聚类是舍近求远。这里还得点破一个新手常纠结的问题聚类的结果到底怎么判断好不好监督学习有标准答案对了几个一目了然聚类没有答案怎么评有两个角度。一是看内部指标比如轮廓系数衡量同一堆内部够不够紧凑、不同堆之间够不够分得开值越高说明分得越利落这不需要标签。二是看业务解不解释得通这往往更重要机器把用户分成了五群你得去看每群的实际特征是不是真对应了高价值活跃用户“沉睡用户这种有业务意义的群体。聚类给出的分组只是数学上的相似最终有没有价值要靠人结合业务去解读和验证这一步机器替代不了。记住这点你用聚类时就不会盲目相信机器分出的堆而会多问一句这么分业务上讲得通吗”。小结与承上启下聚类无监督学习没标准答案时让机器按相似度自动把数据分堆。K-Means找K个中心让数据抱团反复归堆算中心要指定K、认圆形。DBSCAN按密度圈簇不用指定簇数、能识别任意形状和离群点。共同点靠距离吃饭要先标准化输出只是分组编号含义靠人解读。聚类里DBSCAN已经露了一手识别离群点的本事。可专门用来抓异常、抓那些和大家都不一样的点还有更专门更强的模型。下一篇我们讲一个异常检测的利器孤立森林看它怎么用一个反常识的思路快速揪出异常。我们下一篇见。延伸阅读scikit-learn 官方文档聚类含K-Means、DBSCAN、层次聚类https://scikit-learn.org/stable/modules/clustering.html说明以上为官方公开文档地址可能随版本调整如打不开可用标题搜索。
企业数字化 ERP 产品动态
相关推荐
2048中文网页版HTML5实战:DOM语义化、双模交互与无障碍渲染 简介:这是一份基于HTML5技术实现的2048中文网页版游戏源码,面向前端初学者与HTML5/CSS3/JavaScript综合实践者,帮助理解互动游戏开发中的核心Web技术落地路径。资源共10个文件,含1个主入口HTML、3个JS脚本(含jQuery与游… · 2026/9/26 12:13:56
东旭江湖聊天室源码1.10豪华版:PHP老代码部署与改造实战 简介:一套采用经典 ASP 技术构建的东旭江湖聊天室豪华版源码,搭配 MDB 数据库,面向希望搭建轻量互动社区的站长、ASP 开发学习者和怀旧社区运营者,提供即拿即用的在线聊天室解决方案。压缩包约 9.34MB,内含 3085 个文件… · 2026/9/26 12:13:56
MinGW-w64 v12.0.0 环境配置与 C/C++ 编译避坑指南 简介:MinGW-w64 v12.0.0 是 GNU 工具链在 Windows 平台的轻量实现,相当于 GCC 的 Windows 版本。它内置 Win32API,不依赖第三方 C 运行时库,相比 Cygwin 体积更小;借助这套环境,开发者可以在 Windows 下沿用… · 2026/9/26 12:13:49
源荷双侧不确定性下的电力系统低碳鲁棒调度及Matlab实现 1. 项目概述与核心问题拆解1.1 这个项目到底在解决什么问题先说结论,这个题目的本质是在做一个电力系统经济调度(Unit Commitment / Economic Dispatch)的优化问题,只不过比教科书版本多了三个现实约束:风电场并网、源… · 2026/9/26 12:48:06
239G EPLAN部件库实战解析:从EDZ导入到常见坑避让 不知道大伙儿听到“239G”三个字是什么感觉。最近工控圈里EPLAN部件库的资源传得特别热闹,各个群里都在转,很多人兴冲冲下载下来,解压完却傻眼了——好几十个文件夹,EDZ、STEP、PDF、图片混在一起,根本不知道从哪下手。… · 2026/9/26 12:48:06
MySQL执行详情排查:从慢查询日志到EXPLAIN与性能分析 MySQL日志系统执行详情:一路查清你的SQL到底怎么跑的“MySQL日志系统执行详情”这个题目,说白了就是解决一个问题:一条SQL在MySQL里为什么快、为什么慢、到底怎么执行的,你从哪儿能看到过程。干了这些年,我排查线上数据… · 2026/9/26 12:48:06
金融Agentic AI落地实战:从RAG到自主决策的技术栈与避坑指南 金融行业对AI的态度,这两年发生了一个很微妙但很关键的转变。前几年大家还在讨论"要不要上AI",现在讨论的已经是"怎么把AI从聊天框里拽出来,让它真正干活"。英伟达最近那份金融AI现状报告里有个数字特别扎眼——89%的机构… · 2026/9/26 12:48:06
5G VoNR静音根因与QCI=1/PDCP/AMF三重优化实战 简介:本资源是一份聚焦5G VoNR语音业务优化的实战案例文档,面向通信网络优化工程师、5G无线维护人员及运营商网优技术人员,解决办公场景下VoNR通话卡顿、异常回落4G等典型问题。文档基于真实市政办公区测试数据,完整呈现问题定位、… · 2026/9/26 12:47:59
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46