当前位置: 首页 > web >正文

【机器学习入门】4.4 聚类的应用——从西瓜分类到防控,看无监督学习如何落地

上一章我们学完了 K-means 算法的原理,很多入门学生可能会问:“聚类到底能解决什么实际问题?”—— 其实聚类早已渗透在农业、零售、安防等多个领域,比如帮果农分西瓜品质、帮商家精准营销、帮警方定位高危区域。

这篇文章会以 “场景化” 为核心,围绕 4 个典型应用(西瓜分类、水果分类、客户分类、fz地点识别),详细拆解 “聚类如何从数据到落地”,每个场景都配 “业务背景 + 数据特征 + 聚类流程 + 结果应用”,还穿插 Python 小实战,让你不仅懂 “聚类能做什么”,还会 “怎么做”,全程贴合入门认知,不搞复杂推导。

一、农业场景:西瓜分类 —— 用聚类区分 “好瓜坏瓜”

对于果农或超市采购来说,“快速区分西瓜品质” 是核心需求 —— 但传统方法靠 “拍瓜听声”,主观且不准确。用聚类算法,能通过西瓜的客观特征(如密度、含糖率)自动分组,实现 “数据化分类”。

1.1 问题背景:为什么需要聚类分西瓜?

  • 传统方法依赖经验:不同人拍瓜判断标准不同,容易出错;
  • 客观特征可量化:西瓜的 “密度”(果肉紧密程度)和 “含糖率”(甜度)是决定品质的关键,且能通过仪器测量;
  • 无标签数据:采购时只有西瓜的特征数据,没有 “好瓜 / 坏瓜” 标签,适合用无监督聚类。

1.2 数据与特征选择

我们有 30 个西瓜的样本数据,核心特征是 “密度” 和 “含糖率”(两个连续数值特征,无需复杂预处理),部分数据如下:

西瓜编号密度(g/cm³)含糖率(%)西瓜编号密度(g/cm³)含糖率(%)
10.6970.460160.5930.042
20.7740.376170.7190.103
30.6340.264180.3590.188
40.6080.318190.3390.241
50.5560.215200.2820.257

1.3 聚类流程(K-means 实战)

步骤 1:确定 K 值(簇的数量)

根据业务经验,西瓜品质可分为 “优质瓜、普通瓜、差瓜”3 类,故设 K=3。

步骤 2:数据预处理

特征 “密度” 和 “含糖率” 量纲一致(均为小数),无需标准化,直接用原始数据。

步骤 3:跑 K-means 算法,迭代过程

通过多次迭代,簇心逐渐稳定(以欧氏距离为度量),迭代过程的可视化如下(核心变化):

  • 第一次迭代:随机选 3 个初始簇心,西瓜样本按距离初步划分,簇内数据较分散;
  • 第二次迭代:更新簇心(取簇内均值),重新划分样本,部分低密度低含糖的西瓜归为 “差瓜簇”;
  • 第三次迭代:簇心移动距离缩小,高密高糖的西瓜(如编号 1、2、26)逐渐聚为 “优质瓜簇”;
  • 第四次迭代:簇心稳定(移动距离 < 0.01),聚类完成。
图片来源于网络,仅供学习参考
图片来源于网络,仅供学习参考
步骤 4:最终聚类结果
簇类别包含的西瓜编号(示例)簇心(密度,含糖率)品质判断
簇 0(优质)1、2、26、27、29(0.72, 0.45)高密高糖,好瓜
簇 1(普通)3、4、5、15、22(0.58, 0.28)中密中糖,普通
簇 2(差瓜)9、11、12、16、17(0.38, 0.12)低密低糖,差瓜

1.4 结果应用

  • 采购环节:按 “密度≥0.65 且含糖率≥0.35” 的优质簇标准采购,减少人工判断误差;
  • 定价环节:优质簇西瓜定价高 20%,差瓜做促销或加工成西瓜汁;
  • 种植优化:分析优质簇西瓜的生长环境(如土壤、光照),指导后续种植。

1.5 Python 小实战:西瓜聚类可视化

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans# 1. 准备30个西瓜的密度和含糖率数据(完整数据)
X = np.array([[0.697, 0.460], [0.774, 0.376], [0.634, 0.264], [0.608, 0.318], [0.556, 0.215],[0.403, 0.237], [0.481, 0.149], [0.437, 0.211], [0.666, 0.091], [0.243, 0.267],[0.245, 0.057], [0.343, 0.099], [0.639, 0.161], [0.657, 0.198], [0.360, 0.370],[0.593, 0.042], [0.719, 0.103], [0.359, 0.188], [0.339, 0.241], [0.282, 0.257],[0.748, 0.232], [0.714, 0.346], [0.483, 0.312], [0.478, 0.437], [0.525, 0.369],[0.751, 0.489], [0.532, 0.472], [0.473, 0.376], [0.725, 0.445], [0.446, 0.459]
])# 2. 初始化K-means(K=3)
kmeans = KMeans(n_clusters=3, init='k-means++', random_state=42)
y_pred = kmeans.fit_predict(X)  # 每个西瓜的簇标签
centers = kmeans.cluster_centers_  # 簇心# 3. 可视化结果
plt.figure(figsize=(10, 6))
# 绘制不同簇的西瓜
colors = ['red', 'blue', 'green']
labels = ['优质瓜', '普通瓜', '差瓜']
for i in range(3):plt.scatter(X[y_pred == i, 0], X[y_pred == i, 1],s=80, c=colors[i], label=labels[i], alpha=0.7)
# 绘制簇心
plt.scatter(centers[:, 0], centers[:, 1], s=200, c='black', marker='x', label='簇心')
# 标签与网格
plt.xlabel('西瓜密度(g/cm³)')
plt.ylabel('西瓜含糖率(%)')
plt.title('K-means西瓜聚类结果(K=3)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()# 输出优质瓜的密度和含糖率范围
high_quality = X[y_pred == 0]
print("优质瓜密度范围:", high_quality[:, 0].min(), "~", high_quality[:, 0].max())
print("优质瓜含糖率范围:", high_quality[:, 1].min(), "~", high_quality[:, 1].max())

二、生鲜零售:水果分类 —— 自动化区分不同品类

超市或生鲜电商需要 “快速分拣水果”(如区分苹果、香蕉、橙子),传统人工分拣效率低、成本高。用聚类算法,能通过水果的客观特征(重量、尺寸、颜色)自动分类,实现 “无人化分拣”。

2.1 问题背景:为什么需要聚类分水果?

  • 人工分拣痛点:速度慢(每人每小时分拣 200 斤)、易混淆(相似水果如青苹果和青柠);
  • 特征可量化:水果的 “重量”“高度”“宽度”“颜色” 可通过传感器或相机采集;
  • 无标签场景:分拣线上的水果只有特征数据,没有提前贴 “苹果 / 香蕉” 标签,适合聚类。

2.2 数据与特征工程

核心特征选择(4 个关键特征)
特征名称描述数据类型处理方式
重量水果的重量(g)连续数值直接使用(如 192g、342g)
高度水果竖直方向的长度(cm)连续数值直接使用(如 8.4cm、9.0cm)
宽度水果水平方向的长度(cm)连续数值直接使用(如 7.3cm、9.4cm)
颜色水果表皮的颜色(RGB 值)分类数据归一化(如绿色→0.55,橙色→0.74)
示例数据(4 个水果样本)
水果序号重量(g)高度(cm)宽度(cm)颜色(归一化后)特征向量
11928.47.30.55(绿色)(192, 8.4, 7.3, 0.55)
23429.09.40.74(橙色)(342, 9.0, 9.4, 0.74)
31707.67.90.88(红色)(170, 7.6, 7.9, 0.88)
41166.18.50.71(黄色)(116, 6.1, 8.5, 0.71)

2.3 聚类流程与结果

步骤 1:数据预处理
  • 特征量纲统一:重量(100+g)与高度(cm)量纲差异大,用 “标准化” 处理(均值 = 0,标准差 = 1);
  • 确定 K 值:已知水果分 4 类(假设还有 1 个香蕉样本),设 K=4。
步骤 2:聚类结果

通过 K-means 聚类后,4 个水果被分为 4 个簇,对应不同品类:

簇类别包含水果序号簇心(标准化后)品类判断特征共性
簇 01(0.2, 0.3, 0.1, 0.2)青苹果中重量、中尺寸、绿色
簇 12(1.8, 0.8, 1.5, 0.8)橙子重、大尺寸、橙色
簇 23(-0.1, -0.2, 0.4, 1.2)红苹果中重量、中尺寸、红色
簇 34(-0.9, -1.5, 0.6, 0.7)香蕉轻、小高度、黄色

2.4 结果应用

  • 自动化分拣:在分拣线安装传感器,采集水果特征后,根据聚类标签触发机械臂分拣(如簇 1→橙子通道);
  • 库存管理:按聚类结果统计各品类库存(如红苹果剩 50 斤、橙子剩 30 斤),及时补货;
  • 陈列优化:将同一簇的水果(如青苹果、红苹果)放在相邻货架,提升用户体验。

三、营销场景:客户分类 —— 精准定位目标客群

电信、电商等行业的核心需求是 “精准营销”—— 比如电信运营商需要针对 “预付费客户” 推送不同活动,避免 “全员发券” 的资源浪费。用聚类算法,能按客户行为特征(充值、短信、浏览)分群,实现 “千人千策”。

3.1 问题背景:为什么需要聚类分客户?

  • 传统营销痛点:对所有预付费客户推相同充值活动,高价值客户觉得优惠小,低活跃客户觉得没必要;
  • 行为特征可量化:客户的 “月充值额”“月短信发送量”“月网站浏览时长” 能从后台提取;
  • 无标签场景:没有 “高价值 / 低价值” 标签,需通过行为自动分群。

3.2 数据与特征选择

核心特征(3 个行为特征)
特征名称描述数据示例
月充值额客户每月平均充值金额(元)50 元、200 元、10 元
月短信发送量客户每月平均发送短信条数20 条、150 条、5 条
月网站浏览时长客户每月平均浏览运营商网站时长(分钟)30 分钟、120 分钟、5 分钟
示例数据(5 个预付费客户)
客户 ID月充值额(元)月短信量(条)月浏览时长(分钟)特征向量
C120030120(200, 30, 120)
C25015020(50, 150, 20)
C31055(10, 5, 5)
C41804090(180, 40, 90)
C56012015(60, 120, 15)

3.3 聚类流程与结果

步骤 1:预处理与 K 值
  • 标准化处理:消除量纲差异;
  • 确定 K 值:按业务需求分 3 群,设 K=3。
步骤 2:聚类结果
簇类别包含客户 ID簇心(原始数据)客户群标签行为共性
簇 0C1、C4(190, 35, 105)高价值活跃客户高充值、低短信、高浏览
簇 1C2、C5(55, 135, 17.5)短信高频客户中充值、高短信、低浏览
簇 2C3(10, 5, 5)低活跃客户低充值、低短信、低浏览

3.4 结果应用

  • 高价值客户(簇 0):推送 “会员套餐”(充 200 送 50,享专属客服),提升留存;
  • 短信高频客户(簇 1):推送 “短信包优惠”(10 元买 100 条短信),提升消费频次;
  • 低活跃客户(簇 2):推送 “首充优惠”(充 10 送 5),激活客户活跃度。

通过聚类营销,运营商的活动转化率提升 30%,资源浪费减少 50%。

四、安防场景:识别fz地点 —— 定位高危区域,辅助警力部署

警方需要 “高效分配警力”—— 比如在城市中找出 “fz高发区域”,避免 “全城巡逻” 的低效。用聚类算法,能通过fz数据(地点、类型、时间)自动聚出高危区,实现 “精准防控”。

4.1 问题背景:为什么需要聚类分fz地点?

  • 传统巡逻痛点:警力分散,对fz高发区覆盖不足;
  • fz数据可量化:fz地点(经纬度)、fz类型(dq = 1,zp= 2)、发生时间(小时)可记录;
  • 无标签场景:没有 “高危 / 低危” 标签,需通过数据规律自动划分。

4.2 数据与特征选择

核心特征(3 个关键特征)
特征名称描述数据示例
经度fz发生地点的经度坐标116.40
纬度fz发生地点的纬度坐标39.90
fz类型编码fz类型的数值编码1(dq)、2(zp)
示例数据(6 起fz记录)
犯罪 ID经度纬度fz类型编码发生时间(小时)特征向量
CR1186.4039.90122(116.40, 39.90, 1)
CR2186.4139.91123(116.41, 39.91, 1)
CR3186.3539.85215(116.35, 39.85, 2)
CR4186.4039.90101(116.40, 39.90, 1)
CR5186.3939.89121(116.39, 39.89, 1)
CR6186.3639.86216(116.36, 39.86, 2)

4.3 聚类流程与结果

步骤 1:数据预处理
  • 特征选择:重点关注 “经度 + 纬度 + fz类型”,时间特征暂不参与(后续可扩展);
  • 确定 K 值:根据fz类型分 2 类,设 K=2。
步骤 2:聚类结果

通过 K-means 聚类后,6 起fz分为 2 个簇,对应不同高危区域:

簇类别包含fz ID簇心(经纬度)fz类型占比区域判断风险等级
簇 0CR1、CR2、CR4、CR5(116.40, 39.90)dq 100%商圈 A高风险
簇 1CR3、CR6(116.35, 39.85)zp 100%写字楼 B中风险

4.4 结果应用

  • 警力部署:在高风险商圈 A 增加 “22:00-02:00” 的巡逻频次(dq多发生在深夜);
  • 监控优化:在商圈 A 加装高清摄像头,覆盖簇心周边 500 米范围;
  • 预警系统:当商圈 A 某晚dq案超过 3 起时,自动触发 “临时增派警力” 指令。

通过聚类防控,商圈 A 的dq案发生率下降 45%,群众安全感提升。

五、聚类应用的通用步骤:帮你举一反三

从西瓜分类到fz防控,虽然场景不同,但聚类的核心流程是相通的。总结为 6 步,帮你应对任何聚类应用场景:

步骤 1:明确业务问题(Why)

  • 先想 “为什么要用聚类”:是分品质?分客户?还是定区域?
  • 例:“超市需要自动化分拣水果,减少人工成本”—— 明确业务目标。

步骤 2:选择核心特征(What)

  • 选 “与业务目标强相关” 的特征,避免无关特征(如分西瓜不用 “西瓜表皮纹路”);
  • 例:分客户选 “充值额、短信量”,不选 “客户性别”(除非与消费行为相关)。

步骤 3:数据预处理(How)

  • 处理缺失值:用均值 / 中位数填充;
  • 统一量纲:量纲差异大时用 “标准化” 或 “归一化”;
  • 去除异常值:如客户充值额 10000 元(可能是误录),需删除或修正。

步骤 4:确定 K 值(How many)

  • 业务经验:如分水果已知 4 类,直接设 K=4;
  • 肘部法则:计算不同 K 值的 “簇内平方和(WCSS)”,找下降幅度突变的 K 值。

步骤 5:运行聚类算法(Run)

  • 入门选 K-means:简单、高效,适合大多数场景;
  • 复杂场景选 DBSCAN:适合非球形簇(如犯罪区域是长条状)。

步骤 6:结果解读与应用(Use)

  • 结合业务解读簇含义:如 “高充值高浏览” 对应高价值客户;
  • 落地到业务动作:如推送优惠、增派警力,避免 “只聚类不应用”。

六、总结:聚类的价值 —— 无标签数据的 “规律挖掘者”

聚类的核心价值在于 “无需标签,从数据中找规律”—— 它不像分类需要 “老师教答案”,而是靠数据自身的相似性自动分组,尤其适合 “不知道结果是什么” 的探索性场景。

对于入门学生,建议从 “小场景” 入手实践:比如用自己的消费数据(每月外卖次数、网购金额)做聚类,分 “高频消费、中频消费、低频消费” 三群;或用水果图片的像素特征做聚类,感受高维数据的聚类过程。

聚类是无监督学习的 “敲门砖”,学好它,后续学习异常检测、降维等技术会更轻松。如果本文有哪个场景或步骤没看懂,欢迎在评论区留言,我们一起拆解!

http://www.xdnf.cn/news/19645.html

相关文章:

  • Mac上如何安装mysql
  • 阿里云代理商:轻量应用服务器介绍及搭建个人博客教程参考
  • 【赵渝强老师】阿里云大数据MaxCompute的体系架构
  • Git基础使用和PR贡献
  • 02-Media-1-acodec.py 使用G.711编码和解码音频的示例程序
  • 电子电气架构 --- 智能电动车EEA电子电气架构(上)
  • 时序数据库IoTDB:为何成为工业数据管理新宠?
  • (Mysql)MVCC、Redo Log 与 Undo Log
  • 《探索C++11:现代C++语法的性能革新(上篇)》
  • C++11 ——— lambda表达式
  • 前端必看:为什么同一段 CSS 在不同浏览器显示不一样?附解决方案和实战代码
  • 血缘元数据采集开放标准:OpenLineage Guides 使用 Apache Airflow® 和 OpenLineage + Marquez 入门
  • 使用Spring Boot对接印度股票市场API开发实践
  • Linux初始——Vim
  • [VLDB 2025]阿里云大数据AI平台多篇论文被收录
  • Matrix-Breakout: 2 Morpheus靶场渗透
  • docker本地部署dify,nginx80端口占用的报错
  • 环境搭建汇总
  • Burp Suite 插件 | 提供强大的框架自动化安全扫描功能。目前支持1000+POC、支持动态加载POC、指定框架扫描。
  • 代码随想录刷题Day47
  • 前端测试深度实践:从单元测试到E2E测试的完整测试解决方案
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(八)
  • 华宇TAS应用中间件与长城科技两款产品完成兼容互认证
  • 卷积神经网络训练全攻略:从理论到实战
  • 矩阵中寻找好子矩阵
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 【git】解决Failed to connect to github.com port 443: Timed out
  • 如何修复Lyra Starter Game的按键绑定功能?
  • 智能运维新范式:自动化如何提升企业IT效率
  • 二叉树OJ习题