如何使用r中的k-means聚类算法对一组未标记的数据进行分类



我是R语言的新手。我有两个数据集。一个被标记为"训练"数据集(Iris数据集),另一个是"测试"数据集,这是一个未标记的数据集。我需要对"Iris"数据集进行聚类,然后使用聚类的中心将每个测试用例基于最近的距离放置到一个聚类中,然后将每个测试用例分配到一个聚类中。

set.seed(20)
pCluster <- kmeans(Trainingdata[, 3:4], 3, nstart = 20)
pCluster

上面的代码确实对"训练"数据集进行了聚类,但不知道如何使用我从上面的代码中得到的中心来标记"测试"数据集。任何帮助都会很感激。

您可以从pCluster对象中获取中心值,如下所示:

pCluster$centers

这为您提供了花瓣的值。宽度和花瓣。长度

  Petal.Length Petal.Width
1     1.462000    0.246000
2     4.269231    1.342308
3     5.595833    2.037500

你现在可以做的是计算测试数据到中心的距离(取决于你的测量),并分配最接近的一个。

combinedMatrix = rbind(pCluster$Centers,testData[,3:4])
dist(combinedMatrix)

这给出了一个距离矩阵,其中包含每个点到集群中心的距离。作为附带说明,在使用kmeans(至少对于最常见的距离度量)时,您应该规范化输入数据,否则具有高绝对值的特征将掩盖具有低绝对值的特征。

然而,我不确定你想要达到什么目的。K-means通常不以这种方式使用,即在测试和训练数据中分离。

你的目标是为测试集创建一个分类器吗?如果是这样,有更好的方法来实现这一点。如果你想坚持距离的概念,你可以看看k -最近邻算法。如果你能告诉我们你的最终目标是什么,我很乐意给你更多的指导。

最新更新