机器学习第十六讲:K-means → 自动把超市顾客分成不同消费群体

资料取自《零基础学机器学习》
查看总目录:学习大纲

关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南


K-means是一种用于自动将相似数据分组的无监督学习算法。下面用超市顾客分组的例子详细讲解:

一、核心原理(类似整理杂货铺)

假设你有一堆散落的商品要分类摆放,但不知道应该分几类。K-means的解决步骤是:

  1. 随机选位置:先猜测分3类,在卖场随机选3个货架位置作为初始"中心点" 12
  2. 就近摆放:把所有商品摆到离它最近的货架周围,形成3个临时区域 2
  3. 调整中心:在每个临时区域中心放个新货架,替代原来的随机位置 2
  4. 重复优化:根据新货架位置重新摆放商品,直到货架位置不再明显变化 2
graph LR
    A[随机选3个中心点] --> B{商品归类到最近中心}
    B --> C[计算每个类的新中心]
    C --> D{中心是否变化?}
    D -- 是 --> B
    D -- 否 --> E[得到最终分类]

二、超市顾客分群实战

案例背景:某超市收集了200名顾客的:

  • 年收入(万元)
  • 消费分数(0-100分,综合消费金额和频率)3
flowchart TD
    数据准备 --> 选择特征
    选择特征 --> 确定K值
    确定K值 --> 聚类分析
  1. 选择关键特征:这里选年收入和消费分数,就像选"尺子"来度量顾客差异 3

    示例数据片段:
    | 顾客ID | 年收入 | 消费分数 |
    0013882
    0024378
  2. 确定分组数量K:用手肘法找最佳分组数 2

    • 原理:计算不同K值时的总误差(各点到中心的距离和)
    • 图示:当误差下降变缓时,就像人手臂的"肘关节",选这个K值

      # 代码示例(Python)
      cost = []
      for k in 1到10:
        用K-means分组
        记录当前总误差
      plt.plot(cost)  # 找肘部拐点
  3. 生成4个消费群体(当K=4时)34

    • 簇1(蓝):高收入-高消费 → 重点维护的VIP客户
    • 簇2(绿):中等收入-高消费 → 高潜力客户
    • 簇3(红):低收入-低消费 → 普通客户
    • 簇4(青):高收入-低消费 → 需提升消费意愿

三、应用价值与局限

适用场景 ➔ 银行客户分群/新闻主题聚类/市场细分 5
优点:简单高效,适合处理大型数据集
缺点:需要人工确定K值,对异常值敏感

生活类比:就像给图书馆散落的书籍分类,先估计大概有几个主题区,不断调整书架位置直到形成自然的图书集群 2

目录:总目录
上篇文章:机器学习第十五讲:决策树全面讲解:像玩"20个问题"游戏猜身份🎮
下篇文章:机器学习第十七讲:PCA → 把100维数据压缩成3D视图仍保持主要特征


1《零基础学机器学习》第一章第三节类型划分
5《零基础学机器学习》第五章第五节聚类算法
342参见客户聚类案例代码(《零基础学机器学习》第十章教学用例)


  1. 1-3
  2. 3
  3. 1
  4. 2
  5. 5-3

kovli
22 声望23 粉丝