ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

K-Means 聚类跑出 12 个簇,业务方问为什么不是 3 个——无监督学习翻车后我的 5 条军规

K-Means 聚类跑出 12 个簇,业务方问为什么不是 3 个——无监督学习翻车后我的 5 条军规 K-Means 聚类跑出 12 个簇,业务方问为什么不是 3 个--无监督学习翻车后我的 5 条军规周一例会后,产品经理在群里发来一条需求:「把用户按行为分群,用无监督学习就行,下周五出初版。」我当时刚把几篇无监督学习的综述论文刷完,聚类算法的伪代码能倒背如流,便一口答应。结果代码跑通当天,控制台打出 12 个簇中心,业务方当场反问:「我们预期大概 3~4 类用户,你给 12 个怎么看?」我支支吾吾解释了半天,自己都没底气。那天下班前,我把项目文件夹拖进「踩坑存档」,点开了一直收藏却总没空看的人工智能入门。这门课把机器学习的边界、监督与无监督的适用场景讲得极清楚。如果你也正被分类与聚类的概念搅成一团,不妨顺着这门课梳理一遍,它会用真实项目帮你划定什么时候该上无监督学习、什么时候不该--这一点在后面踩坑时救了我至少两次。为什么我敢一上来就啃无监督学习当时手头有个用户复购分析项目,标签不全,我自然想到了无监督学习。我心想这不就是聚类嘛,K-Means 套上去就完了。我在笔记本上写过一句话:「无监督学习不需要标签,所以比监督学习简单。」后来才知道这句话错得多离谱。我花了整整两周只在读理论:K-Means、DBSCAN、层次聚类,连高斯混合模型的 EM 推导都手推了一遍。但那段日子我一行代码都没写,全在记「无监督学习的本质是发现隐藏结构」。机器学习入门的课程里有一个观点对我冲击很大:学习一个新方向,应该在 2 小时内跑通第一个 demo,再用项目反推理论缺口。我当时反着来,结果就是项目启动会上我聊起轮廓系数头头是道,写起代码连数据列的数级都没看。当我终于打开 Jupyter,灾难才开始我直接pd.read_csv把用户表灌进去,去掉 user_id 列,剩下全是行为字段。没做任何数据预处理,连缺失值都没检查,就用 sklearn 的KMeans(n_clusters4)跑了。# 我的第一版代码,处处是雷 from sklearn.cluster import KMeans import pandas as pd df pd.read_csv(user_behavior.csv) X df.drop(user_id, axis1) # 未做标准化,字段量级差异巨大 kmeans KMeans(n_clusters4, random_state42) labels kmeans.fit_predict(X) print(kmeans.cluster_centers_[:2])输出让我傻眼:簇中心在购买金额那一列的数值超过 30000,而在登录次数列只有 0.3。我当时居然还觉得「聚出来了」。同事看了一眼数据问:「你做了特征缩放吗?购买金额 0~50000,登录次数 0~30,K-Means 只看得见购买金额。」这话一针见血。数据预处理中的标准化,就是把不同量级的特征拉到同一尺度,课程里用「做饭前要洗菜」来形容--我等于把泥巴直接倒进锅里。机器学习基础强调「机器学习管道」的概念:从数据清洗、特征工程、模型训练到评估,任何一环断裂,结果就没有意义。我之前只觉得「机器学习管道」是高级话题,入门不用管,结果第一个项目就栽在管道最前端。如果你也在入门阶段,可以先从这门课的管道一讲看起,它把预处理和特征工程拆成能直接复用的代码模板,能省掉不少搜索文档的时间。拿混淆矩阵评估聚类,我成了组里的梗更翻车的事情还在后面。我为了证明聚类有效,写了一段计算混淆矩阵的代码:from sklearn.metrics import confusion_matrix # 错误示范:无监督学习根本没有真实标签 cm confusion_matrix(true_labels, predicted_labels) # true_labels 从哪来? print(cm)我在周会上展示时,组长愣了一下:「你这是在用监督学习的指标给无监督学习打分?」那一刻我才意识到,混淆矩阵要求真实标签与预测标签一一对应,而无监督学习的标签是算法自己生成的,数字只是簇编号,和业务含义毫无关系。混淆矩阵的 TP/TN/FP/FN 全部建立在有标注的前提下。无监督学习的评估需要轮廓系数、Davies-Bouldin 指数这类指标。机器学习入门课里专门用一节对比了监督学习与无监督学习的评估体系,还给了可运行的 notebook。如果我早一周打开那个 notebook,至少不会在组会上闹出这样的笑话。我后来把这段 demo 重新做了一遍,对比表如下:场景适用评估指标是否需要真实标签监督分类混淆矩阵、准确率、召回率、F1需要无监督聚类轮廓系数、Davies-Bouldin 指数、Calinski-Harabasz 指数不需要这张表我后来贴在工位上,提醒自己跨出第一步前先搞清楚问题类型。AWS 基础知识的课程里有类似的结构化总结,把 AWS 机器学习服务分别对标到监督与无监督任务上,对想在云上直接搭建管道的同学尤其实用。补上人工智能入门后,我把同一个数据集重跑了一遍我终于放下「我已经懂了」的错觉,老老实实地看完了人工智能入门的每一个项目模块。这门课从零搭建机器学习项目:先分析数据分布,再决定用监督还是无监督学习,然后做特征工程、数据预处理,最后训练和评估。我照着课程里的清单重做了用户分群项目:from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score # 1. 标准化 scaler StandardScaler() X_scaled scaler.fit_transform(X) # 2. 降维避免维度灾难(特征数 10 时影响距离计算) pca PCA(n_components0.95, random_state42) # 保留95%方差 X_pca pca.fit_transform(X_scaled) # 3. 用轮廓系数确定 K best_k, best_score 2, -1 for k in range(2, 9): km KMeans(n_clustersk, random_state42) labels km.fit_predict(X_pca) score silhouette_score(X_pca, labels) if score best_score: best_k, best_score k, score print(f最优簇数: {best_k}, 轮廓系数: {best_score:.3f}) km_final KMeans(n_clustersbest_k, random_state42) final_labels km_final.fit_predict(X_pca)这次跑出来最优簇数是 4,轮廓系数从之前野蛮版本的 0.21 提到 0.58。我把结果讲给业务方时能解释清楚每个簇的特征,项目才算立住了。人工智能入门里的标准化和降维章节,用数据实验对比了处理前后的轮廓系数变化,如果我一开始就照着做,至少能省下两周的无效加班。5 条用无监督学习踩出来的军规先跑最小可用原型,再补理论无监督学习不能只读论文,机器学习入门里第一个 demo 就是拿 UCI 数据集跑 K-Means,10 分钟就能感受到维度、标准化对结果的影响。手上有跑通的结果,再去消化理论效率翻倍。数据预处理和特征工程决定了无监督学习的上限特征量级差异、缺失值、高维诅咒,每一条都能让聚类结果面目全非。数据预处理和特征工程这两块,我在后来一个 NLP 特征嵌入项目里又吃过亏--没有对文本向量做归一化,导致余弦相似度计算失效,最后也是翻回课程代码才定位。无监督学习的评估不能用监督那套忘记混淆矩阵,拥抱轮廓系数和 Davies-Bouldin 指数。如果你还在纠结「聚类准确率」,那说明你还没分清问题类型,机器学习基础里有专门讲这一步怎么判断。不要跳过 AWS 的现成工具后来我发现 Amazon SageMaker 内置了 K-Means 算法,自带标准化选项和维度感知,比自己手写 pipeline 可靠得多。亚马逊云科技机器学习的实操模块演示了如何在 20 分钟内从原始数据建到可调用的模型端点,这个效率对比我用纯 Python 硬写至少快了 3 倍。别觉得深度学习能自动替代特征工程很多同事提过「直接用自编码器做无监督特征学习不就行了」。我试过,在数据量不足 10 万条的情况下,自编码器提取的特征不一定比 PCA 好,训练成本却高了十几倍。深度学习入门里有对比实验,把自编码器与经典降维在同数据集上比较,结果一目了然--不是所有场景都需要搬出深度模型。把机器学习管道当成流水线,而不是工具箱从数据版本、特征存储到模型训练与部署,如果每一步都靠鼠标和临时脚本串联,项目一多就会彻底乱掉。AWS 基础知识把机器学习管道分解成可复用的模块,即使只用 SageMaker Studio 的基本功能,也能让实验回溯时间从几小时压缩到几分钟。先用人工智能入门建立全局观,再选择细分方向我当初如果先看完这门课,就会立刻知道自己面对的问题属于无监督学习下的聚类场景,而不是在那儿翻了几天的强化学习论文。人工智能入门帮你把 AI 版图铺开,你只需要对号入座,再决定是不是进一步看深度学习课程或生成式AI的内容。这些军规每一条都是真金白银的工时换来的,尤其是第一条和第二条,如果你正准备动手做一个无监督学习项目,不妨先点开人工智能入门的课程目录,核对一下自己的数据处理链路上有没有漏掉类似的环节--提前避开一个坑,可能就省下一整周的调试时间。
返回列表