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

mlr3聚类学习器是否自动拆分训练测试集 直接训练会过拟合吗

1. clust.kmeans 不会在内部自动拆分数据集

mlr3 全系列学习器的train()方法默认都只会使用传入的全部样本完成拟合,没有内置自动拆分训练/测试集的逻辑,聚类学习器和监督学习器在这一点上完全一致。你代码中传入完整的usarrests任务,kmeans 就会用全部50个样本计算得到聚类质心,没有任何内部拆分操作。

2. 当前使用方式是否会导致过拟合需要结合使用场景判断

无监督聚类的「过拟合」定义和监督学习有区别,指的是拟合得到的聚类质心过度贴合当前数据集的随机噪声,放到新的同分布数据上时聚类效果明显下降:

  • 如果你只是要给当前已有数据集的所有样本划分聚类标签,不需要评估模型在新数据上的表现,那这种用法是无监督聚类的标准用法,不存在过拟合问题。
  • 如果你需要评估这个kmeans模型的泛化能力,那直接在训练全集上预测得到的各类聚类评估指标(比如轮廓系数、CH指数)都会偏高,无法反映模型在新数据上的真实表现,会给你「模型效果很好」的错误判断,后续用在新数据上就会出现效果跳水,也就是变相的过拟合问题。

你提供的示例代码逻辑如下:

library(mlr3)
library(mlr3cluster)

task = mlr_tasks$get("usarrests")
learner = mlr_learners$get("clust.kmeans")
learner$train(task)
preds = learner$predict(task = task)

如果需要评估泛化能力,建议手动拆分数据集后再训练和评估,示例如下:

# 按7:3比例拆分训练集和测试集
split = partition(task, ratio = 0.7)
# 仅用训练集拟合模型
learner$train(task, row_ids = split$train)
# 在测试集上预测,得到的指标才能反映泛化性能
preds_test = learner$predict(task, row_ids = split$test)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:03