You need to enable JavaScript to run this app. 如何用Python的K-Means聚类确定电影用户评分数据集的最优簇数并实现可视化
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的K-Means聚类确定电影用户评分数据集的最优簇数并实现可视化

适配稀疏电影评分场景的最优簇数确定方案
  • 前置校验先避坑:
    • 所有距离计算、指标统计的逻辑必须和训练带余弦相似度的KMeans时的规则完全统一,全程用余弦距离,别训练时算余弦、评估簇数时换欧氏距离,否则选出来的k完全不匹配实际聚类逻辑
    • 计算相似度时要明确跳过空白无评分的维度,千万别把空白值当成0(差评)参与计算,不然会把没看过同部片的用户误判为相似度为0,从根源上导致聚类结果失真
  • 分步骤选最优、最稳定的簇数:
    • 肘部法则初步筛选:因为样本只有100余名用户,直接从k=1遍历到k=15即可,每个k值重复跑5次KMeans抵消随机初始质心的影响,记录每个k下的平均簇内平方和(SSE,即所有样本到所属簇质心的余弦距离平方均值),把k和对应平均SSE画成折线,找折线斜率骤降的拐点——也就是之前SSE随着k增大快速下降,过了这个点之后下降速度明显放缓的位置,对应的k就是初步候选值,别选k=2这种过于粗放的簇数,满足不了后续分群推荐的精度要求。
    • 轮廓系数二次校验:同样在k=2到k=15的范围内遍历,每个k下计算全量样本的平均轮廓系数(综合衡量簇内紧凑度、簇间分离度的指标),保留轮廓系数Top3的k值。这个值越高,说明当前簇数下不会硬拆相似用户、也不会硬凑不相关用户到同一个簇里。
    • 稳定性验证筛除随机敏感的k:对前面筛选出的3个左右候选k,每个k重复跑20次KMeans,每次计算不同随机种子下聚类结果的两两调整兰德指数(ARI),选ARI平均值最接近1的k——这个值越接近1,说明聚类结果不受初始随机质心影响,哪怕换个随机种子也不会出现大面积用户换簇的情况,就是你要的最稳定的簇数。
    • 业务逻辑兜底校验:别完全依赖数值指标,拿到最终选定的k对应的聚类结果后,每个簇随机抽3-5个用户,核对他们实际打出过好评的电影偏好是否一致,如果出现同一个簇里既有动画偏好用户、又有恐怖片片偏好用户的情况,哪怕数值指标再好,这个k也不符合你的核心推荐逻辑,需要重新调整。
聚类结果的可视化实现指导
  • 降维适配:因为原始特征是200余部电影的高维稀疏数据,直接绘图维度太高没有参考性,用t-SNE做二维降维即可。降维时要开启余弦相似度距离匹配,针对百级的样本量把perplexity参数调到10-15,不要用默认的欧氏距离降维,否则会扭曲原来的用户相似度结构。
  • 核心可视化内容:
    • 分群结构散点图:把t-SNE降维后的二维坐标作为x、y轴,每个用户点按对应所属的簇标签涂不同颜色,同个簇的点用半透明椭圆圈出边界并标注簇编号,直观观察不同簇之间是否存在明显分离,有没有出现散点交叉、边界模糊的问题。
    • 簇偏好特征条形图:对每个簇统计簇内用户对每部电影的好评率(即簇内给这部电影打1的人数/簇内给这部电影有有效评分的人数),挑每个簇好评率最高的Top5电影做成横向条形图,能直观看到每个簇的用户核心偏好,避免聚类结果和实际用户偏好脱节。
  • 避坑提醒:样本量只有100余位用户,没必要做复杂的三维动态交互图,二维静态图足够清晰展示分群结构;降维只是用来辅助观察分群效果的,不要把降维后的二维距离当成真实的用户相似度来调整聚类结果。

内容的提问来源于stack exchange,提问作者ToBeEXP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 06:45:09