ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

机器学习学习笔记(七):聚类,KMeans、肘部法与客户分群实战

机器学习学习笔记(七):聚类,KMeans、肘部法与客户分群实战 系列第七篇也是收官篇。前面六篇的算法全都有标签有监督这篇换赛道数据没有答案让算法自己找出结构。KMeans 是无监督学习的第一个算法也是面试里聚类话题下几乎唯一的考点。本篇看完要回答的四个面试题聚类和分类的区别KMeans 的实现流程K 值怎么选肘部法的原理聚类效果怎么评估没有标签用什么指标一、聚类没有老师批改作业的学习回顾概述篇的分类体系有监督学习的样本有特征有标签无监督学习有特征、无标签。聚类就是无监督学习的代表根据样本之间的相似性把样本自动划分到不同的类别簇中。相似性怎么算最常用的是欧氏距离KNN 篇的公式直接复用距离越近的样本越像就归到同一堆。要注意不同的相似度计算方法、不同的聚类准则会得到不同的聚类结果课件那道选择题考的就是这个相似度只能用欧氏距离衡量是错误说法。聚类的目的在没有先验知识的情况下自动发现数据集中的内在结构和模式。典型应用用户画像与广告推荐、新闻聚类、恶意流量识别、图像分割、离群点检测信用卡异常消费、基因片段分析。聚类算法的两个分类维度维度类别按颗粒度粗聚类、细聚类按实现方式KMeans按质心、层次聚类逐层划分、DBSCAN按密度、谱聚类按图论本篇主攻通用性最强的 KMeans。二、KMeans 的实现流程面试背这个K 是事先确定的常数表示最终的聚类类别数。流程四步随机选择 K 个样本点作为初始聚类中心计算每个样本到 K 个中心的距离归到最近中心所在的簇根据每个簇内的样本点重新计算聚类中心取均值新中心与旧中心一致则停止否则回到第 2 步直到收敛一个容易忽略的点KMeans 的训练和预测界限很模糊。第 2 步分配和第 3 步更新中心交替进行本质是在最小化所有样本到其所属中心的距离之和和有监督算法的损失函数 迭代优化是同一个骨架只是没有标签参与。APIfromsklearn.clusterimportKMeans estimatorKMeans(n_clusters5,random_state22,n_init10)y_kmeansestimator.fit_predict(X)n_clusters指定簇数默认 8fit_predict相当于先fit再predict一步拿到每个样本的簇编号。三、聚类效果怎么评估没有标签换一把尺子有监督学习用准确率、F1 对着标准答案打分聚类没有答案只能衡量簇内够不够紧、簇间够不够开。三个指标3.1 SSE误差平方和簇内紧凑度SSE∑i1k∑p∈Ci∥p−mi∥2SSE \sum_{i1}^{k}\sum_{p \in C_i} \left\| p - m_i \right\|^2SSEi1∑k​p∈Ci​∑​∥p−mi​∥2其中CiC_iCi​是第 i 个簇ppp是簇内样本mim_imi​是该簇质心。SSE 越小数据点越接近各自的中心簇内越紧凑。SSE 有个致命特性K 越大 SSE 必然越小。极端情况 K 样本数每个点自成一簇SSE 0但毫无意义。所以不能直接挑 SSE 最小的 K要找下降突然变缓的拐点这就是肘部法。3.2 肘部法Elbow Method找拐点让 K 从 1 迭代到某个上限每次聚类后记录 SSE。SSE 曲线前期陡降、后期平缓形状像手肘拐点肘部对应的 K 就是最佳簇数。直觉拐点之前多分一类能显著变紧拐点之后再加簇只是把本就紧凑的堆再切开收益骤减。3.3 轮廓系数Silhouette Coefficient簇内紧 簇间开对每个样本计算两个值a它到同簇其他样本的平均距离越小越紧和 b它到最近其他簇所有样本的平均距离越小簇间越近。该样本的轮廓系数sb−amax⁡(a,b)s \frac{b - a}{\max(a, b)}smax(a,b)b−a​全体样本轮廓系数的均值在 [-1, 1] 之间越接近 1 越好。它同时考虑了簇内和簇间比只看簇内的 SSE 更全面常和肘部法互相印证。另有 CH 指数Calinski-Harabasz簇间方差与簇内方差之比越大越好计算快适合大数据集快速筛 K。四、实战商场客户分群案例背景商场有 200 个客户的记录含性别、年龄、年收入千美元、消费指数1 到 100商场根据消费行为打的分。需求对客户分群找到业务突破口找出黄金客户。数据没有标签没有这是黄金客户的标注这正是聚类的主场。特征取年收入和消费指数两列importpandasaspdfromsklearn.clusterimportKMeansfromsklearn.metricsimportsilhouette_score,calinski_harabasz_score datasetpd.read_csv(./data/customers/customers.csv)Xdataset.iloc[:,[3,4]]kmeansKMeans(n_clusters5,random_state22,n_init10)y_kmeanskmeans.fit_predict(X)4.1 肘部法和轮廓系数一起上双双指向 K5KSSE轮廓系数1269981.3不可算2181363.60.29693106348.40.4676473679.80.4932544448.50.5539最高637233.80.5398730259.70.5264825012.90.4579922837.00.45021019755.60.4416看 SSE从 K4 到 K5 一步降了 29231K5 到 K6 只降 7215下降率在 K5 处突然变缓肘部就在这。看轮廓系数K5 恰好是全程最高点 0.5539之后单调下滑。两个独立指标给出同一个答案这个 K5 就很可信。CH 指数同 K 下为 247.4作对照。4.2 五个簇长什么样K5 时各簇质心年收入消费指数与客户数簇质心客户数业务解读0(88.2, 17.1)35收入高但消费低守财型需要精准触达1(86.5, 82.1)39收入高消费高黄金客户2(55.3, 49.5)81收入中等消费中等基本盘人数最多3(26.3, 20.9)23收入低消费低价格敏感型4(25.7, 79.4)22收入低但消费高年轻冲动型年龄中位数偏低聚类结果一眼可见五团。最有商业价值的是右上角的黄金客户群39 人商场可以对他们做会员深度运营而左上角的守财型收入高、消费低是潜在转化对象值得专门设计营销策略。聚类产出的不是准确率而是可执行的业务分组这是无监督学习和有监督学习在产出形态上的本质区别。五、易错点聚类没有准确率可言没有标签就没有对错评估只能用 SSE、轮廓系数、CH 这类内部指标或有可靠外部参照时用外部指标KMeans 对初始中心敏感随机选的初始中心不好可能收敛到局部最优bad center 导致歪的结果。sklearn 默认用 k-means 优化初始点选取并用n_init跑多轮取最优复现实验必须固定random_stateKMeans 假设簇是凸形球状且大小相近对长条形、环形、密度差异大的簇效果差那些场景该用 DBSCAN 或谱聚类特征量纲差异大时必须标准化KMeans 建立在距离上收入最大 137和消费指数最大 99量纲接近所以本例直接用了换成年收入 vs 存款元这种差距悬殊的组合不做标准化等于让存款独裁。KNN 篇的结论在这里同样成立肘部法的肘不总是清晰有些数据 SSE 曲线平滑无拐点这时以轮廓系数为主或直接从业务角度定 K比如商场预设营销方案就 4 档n_init保持默认即可新版 sklearn 默认 10 或 auto自己设成 1 会放大初始中心敏感性六、知识清单聚类无监督按相似性常用欧氏距离自动分簇相似度准则不同结果不同分类维度颗粒度粗/细实现方式KMeans 按质心、层次、DBSCAN 按密度、谱按图论KMeans 四步定 K、随机选中心、最近距离分配、均值更新中心、迭代至收敛APIKMeans(n_clusters5)fit_predict一步出簇编号SSE簇内误差平方和越小越紧但 K 越大必然越小不能单独用来选 K肘部法SSE 下降突然变缓的拐点即最佳 K轮廓系数[-1, 1]越接近 1 越好同时衡量簇内紧与簇间开CH 指数越大越好计算快七、面试高频问答Q1聚类和分类的区别分类是有监督学习训练样本有标签模型学习特征到标签的映射预测新样本的类别聚类是无监督学习样本没有标签按相似性距离自动把样本分成若干簇类别是算法发现的不是预先定义的。评估方式也不同分类看准确率、F1聚类看 SSE、轮廓系数等内部指标。Q2KMeans 的流程有什么缺点流程随机选 K 个初始中心样本按最近距离分配到簇用簇内均值更新中心交替迭代直到中心不再变化。缺点K 要事先指定且对结果影响大对初始中心敏感可能陷入局部最优只能发现凸形球状簇对异形簇和密度不均的数据失效对噪声和离群点敏感均值会被拉偏。Q3K 值怎么确定肘部法K 从小到大扫描画 SSE 曲线下降突然变缓的拐点即最佳 K轮廓系数扫描 K 取均值最高者。两者经常配合使用互相印证实际业务中还要结合先验知识比如营销方案的分档数。Q4KMeans 和 KNN 是一回事吗经典送分/送命题不是。KNN 是有监督分类算法没有训练过程预测时找 K 个最近邻样本投票KMeans 是无监督聚类算法有迭代训练过程K 是簇的数量。两者只是都用欧氏距离、名字里都有 K其余完全不同。系列完结七篇到这里全部写完。回顾整个系列的主线总览篇知识地图与学习方法概述篇AI/ML/DL、三要素、建模流程、拟合问题线性回归篇损失函数、正规方程与梯度下降、正则化KNN 篇距离、归一化/标准化、交叉验证与网格搜索、分类评估体系决策树篇CART、基尼系数、泰坦尼克生存预测、剪枝集成学习篇Bagging/Boosting、随机森林、OOB聚类篇KMeans、肘部法、轮廓系数、客户分群系列所有案例代码都在本地跑通后才收录数据集和脚本整理在同一个仓库目录里。后续更新深度学习和大模型方向的内容时会在总览篇的目录里继续挂新篇目。感谢追更评论区见。
返回列表