无监督学习中的过拟合
过多簇、成分或噪声方向会让无监督模型追随训练细节,需要稳定性和独立价值验证。
学习前需要掌握
背景与问题
没有人工标签,不代表模型无法过度适应训练样本。更多簇可以把每个点单独包住,更多主成分可以把训练输入重构得几乎无误差,但这些目标改善未必对应有用结构。
无监督任务更需要明确“希望保留什么关系”,并结合稳定性、独立数据与领域证据,而不能只追求训练目标最小。
概念定义
无监督过拟合指方法捕捉了当前样本中特有的噪声或细节,而未形成能在目标范围内复现的结构。它不能只靠监督准确率定义,也不能因缺少标签而被忽略。
内部指标、重构误差、簇内平方和和业务有效性回答不同问题。某个优化目标持续变好,并不自动证明聚类或表示更可靠。
直观理解
把每个训练点都设为自己的簇,可以得到零簇内误差,却几乎没有压缩或解释作用。类似地,完整保留所有维度通常比降维重构好,但不一定达到降噪与简化目的。
K 等于样本数时,训练目标可以轻易为零
构造一维点 [0,1,10,11]。K=2 的自然分组中心为 0.5、10.5,簇内平方和是 4×0.25=1;K=4 时每个点自成一簇,训练平方和为 0。
不能据此认定 K=4 更有业务意义;此时每簇只有一个样本,常见轮廓评价也不满足通常的有效簇数条件。应检查简化、稳定性与独立使用目的,而不是只看零训练误差。
核心原理
固定数据下增加 K 通常不会增加最优簇内平方误差,因此不能仅用训练惯性选择簇数。轮廓等内部指标也有适用条件和簇形状偏好,应作为部分证据。
用重采样、合理参数扰动或独立时间/人群检查结构能否复现。聚类编号可任意置换,比较时应使用适当的对齐或分组一致性度量,不能把编号不同直接当成不稳定。
预处理和降维同样必须遵守训练边界。如果用全数据学到主成分,再声称对留出数据验证了完整流程,已经改变了独立性。
领域解释与下游任务能补充证据,但反复使用某套外部标签挑选方法后,这些标签也参与了选型。最终报告应说明用了哪些信息与仍存在的限制。
数学表达
核心表达
使用独立数据、参数扰动、重采样稳定性、下游任务和领域解释共同评价。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1留出独立数据
- 2改变 K/成分数
- 3改变随机种子
- 4比较稳定性
代码对应位置
示例 1核对零训练惯性不等于有用分组:让相同四个点在不同簇数下比较训练目标。
计算与实现步骤
- 留出独立数据
- 改变 K/成分数
- 改变随机种子
- 比较稳定性
- 检查下游表现
- 领域审查
代码实现
示例 1
核对零训练惯性不等于有用分组
example_01.py用途:让相同四个点在不同簇数下比较训练目标。
from sklearn.cluster import KMeans
X = [[0.0], [1.0], [10.0], [11.0]]
for k in [2, 4]:
model = KMeans(n_clusters=k, n_init=10, random_state=7).fit(X)
print(f"k={k} inertia={model.inertia_:.4f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
让相同四个点在不同簇数下比较训练目标。
X- 完整特征矩阵,每行一个样本、每列一个特征。
model- 组合预处理和估计器的模型对象。
Step 1 · 1–5 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
from sklearn.cluster import KMeans
X = [[0.0], [1.0], [10.0], [11.0]]
for k in [2, 4]:
model = KMeans(n_clusters=k, n_init=10, random_state=7).fit(X)
print(f"k={k} inertia={model.inertia_:.4f}")预期输出或运行结果
k=2 inertia=1.0000 k=4 inertia=0.0000
常见错误 · 2 条
- 只最小化训练簇内误差
- 内部指标唯一化
实际应用
- 聚类
- PCA
- 异常检测
常见错误
- 只最小化训练簇内误差
- 内部指标唯一化
推荐学习资料
参考库不会生成虚假资源或无效外部链接。