当我们做分类和回归的时候,我们通常会设置测试和训练集来帮助我们建立和改进模型。
但是,我们在做聚类的时候,是不是也需要设置测试集和训练集呢?为什么?
当我们做分类和回归的时候,我们通常会设置测试和训练集来帮助我们建立和改进模型。
但是,我们在做聚类的时候,是不是也需要设置测试集和训练集呢?为什么?
是的,因为聚类也可能存在过拟合问题。例如,增加集群数量总是会“提高性能”。
这是一个使用 K-Means 聚类的演示:
K-means 的目标函数是
有了这样的目标,较低的意味着“更好”的模型。
假设我们有以下数据(虹膜数据),选择簇数为总是比选择簇数为 “更好” 。那么选择集群会比集群好。我们可以继续这条轨道并以成本结束:只需使集群的数量等于数据点的数量,并将所有集群中心放在相应的点上。
d=iris[,c(3,4)]
res4=kmeans(d, 4,nstart=20)
res3=kmeans(d, 3,nstart=20)
par(mfrow=c(1,2))
plot(d,col=factor(res4$cluster),
main=paste("4 clusters J=",round(res4$tot.withinss,4)))
plot(d,col=factor(res3$cluster),
main=paste("3 clusters J=",round(res3$tot.withinss,4)))
如果我们有延迟数据进行测试,它将防止我们过度拟合。同样的例子,假设我们选择了大量的集群并将每个集群中心放置在训练数据点上。测试误差会很大,因为测试数据点不会与训练数据重叠。
不,这通常是不可能的。
很少有聚类可以像分类器一样使用。只有使用 k-means、PAM 等,您才能评估“泛化”,但从那时起,聚类变得更加多样化(和有趣)。事实上,即使是旧的层次聚类也不能很好地推广到“新”数据。聚类不是分类。许多分类方法不能很好地转移到聚类;包括超参数优化。
如果您只有部分标记的数据,则可以使用这些标签来优化参数。但是集群的一般情况是你想了解更多关于你的数据集的信息;所以你运行了几次聚类,调查有趣的聚类(因为通常,一些聚类显然太小或太大而没有意义!)并记下你得到的一些见解。聚类是帮助人类探索数据集的工具,而不是自动的东西。但是您不会“部署”集群。它们太不可靠了,单个聚类永远不会“说明全部”。
不,您不会在无监督学习中使用训练和测试。无监督学习中没有目标函数来测试算法的性能。