You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找文本分类中K-means聚类的过拟合与欠拟合问题

K-means在文本分类任务中欠拟合、过拟合的查找判定方法

注意K-means属于无监督算法,和监督分类模型的拟合判定逻辑有差异,排查前先固定文本表征基线:用同一套TF-IDF/词向量输出、同一份数据集切分规则,不要把文本特征本身的质量问题和聚类拟合问题混为一谈。

欠拟合判定方法

欠拟合本质是聚类模型连训练集文本的固有簇结构都没捕捉到,簇内差异大、簇间无明确边界,符合以下任意2条即可判定:

  • 量化指标层面:训练集上轮廓系数低于0.2,Calinski-Harabasz指数显著低于同数据集其他参数下的结果;簇内平方和(Inertia)随K值变化的曲线在你当前选定的K值位置仍处于陡峭下跌区间,没有进入平缓的“肘部”区间。比如做中文新闻分类选了K=3,但K从3涨到8的过程中Inertia每次跌幅都超过20%,说明K值远小于真实类别数,是典型欠拟合。
  • 语义核验层面:随机抽取每个簇的Top20高频关键词、10条代表性文本,会发现单个簇内混杂了完全不相关的语义类别,比如体育类簇里混了近一半财经、科技类文本;簇心对应的高频词以全数据集通用的无意义词为主(比如未清理干净的停用词、泛化程度极高的通用词),没有明确的语义指向。
  • 效果验证层面:不管是训练集还是测试集,聚类结果和真实标签的归一化互信息(NMI)、调整兰德指数(ARI)都低于0.3,且调大K值、增加迭代次数max_iter让模型充分收敛后,指标涨幅能超过15%。

欠拟合的常见触发原因包括:K值设置远小于真实类别数、迭代次数设置过低导致模型未收敛、文本表征信息损失过大(比如embedding维度压得太低、关键特征被过滤)、噪声点过多拉偏簇心。

过拟合判定方法

过拟合本质是模型把训练集里的噪声、偶然共现的边缘特征当成了通用簇结构,训练集上表现虚高,泛化到同分布新文本时效果骤降,符合以下任意2条即可判定:

  • 量化指标层面:训练集上的轮廓系数、Calinski-Harabasz指数看起来很高,但用训练得到的固定簇心给留出测试集文本分配簇标签后,测试集轮廓系数较训练集跌幅超过30%,Inertia涨幅超过40%;同时Inertia曲线在你选定的K值位置已经进入完全平缓的区间,继续增大K值Inertia几乎不下降,说明设置的簇数过多,把训练集里的离群噪声都单独划成了簇。
  • 语义核验层面:单个簇覆盖的语义极度狭窄,甚至出现大量单簇样本量低于3的碎簇,簇心对应的高频词是某几篇训练文本里的偶然专有名词(比如某篇体育稿里提到的球员冷门绰号,并非体育类别的通用特征),多数碎簇没有统一可解释的语义,只是少数相似噪声点的小聚合。
  • 效果验证层面:训练集上聚类结果和真实标签的NMI、ARI能达到0.8以上,但测试集上直接掉到0.4以下,且调小K值、增加单簇最小样本量限制、过滤低频次噪声特征后,测试集指标有明显上涨。

快速排查流程

按这个步骤走10分钟就能定位问题:

  1. 先跑完特征预处理流程,过滤停用词、文档频率低于2的极低频词,排除特征工程带来的干扰。
  2. 遍历K从2到你预估真实类别数的2倍区间,分别记录三个值:训练集Inertia、训练集轮廓系数、测试集轮廓系数,画成折线图:
  • 选定的K在肘部左侧,训练集、测试集指标双低,就是欠拟合
  • 选定的K在肘部右侧较远位置,训练集指标高、测试集指标骤降,就是过拟合
  1. 固定K值后抽每个簇的代表性文本做人工语义校验,大量跨语义混杂就是欠拟合,大量无意义小碎簇就是过拟合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:54:20