完成聚类分析后,如何知道新数据属于哪个集群

时间:2013-07-10 10:04:21

标签: r cluster-analysis k-means

完成集群分析后,当我输入一些新数据时,如何知道数据属于哪个集群?

data(freeny)
library(RSNNS)
options(digits=2)
year<-as.integer(rownames(freeny))
freeny<-cbind(freeny,year)
freeny = freeny[sample(1:nrow(freeny),length(1:nrow(freeny))),1:ncol(freeny)]
freenyValues= freeny[,1:5]
freenyTargets=decodeClassLabels(freeny[,6])
freeny = splitForTrainingAndTest(freenyValues,freenyTargets,ratio=0.15)
km<-kmeans(freeny$inputsTrain,10,iter.max = 100)
kclust=km$cluster

1 个答案:

答案 0 :(得分:3)

kmeans返回一个对象,其中包含$centers中聚类中心的坐标。您想要找到新对象最接近的聚类(根据距离的平方和):

v <- freeny$inputsTrain[1,] # just an example
which.min( sapply( 1:10, function( x ) sum( ( v - km$centers[x,])^2 ) ) )

以上内容返回8 - 与分配了freeny$inputsTrain第一行的群集相同。

在另一种方法中,您可以先创建一个聚类,然后使用受监督的机器学习训练一个模型,然后将其用作预测。但是,模型的质量取决于聚类实际上代表数据结构的程度以及您拥有的数据量。我用PCA(我最喜欢的工具)检查了你的数据:

pca <- prcomp( freeny$inputsTrain, scale.= TRUE )
library( pca3d )
pca3d( pca )

我的印象是,您最多可以使用6到7个明确的课程:

enter image description here

但是,应该运行更多kmeans诊断(肘图等)以确定最佳群集数量:

wss <- sapply( 1:10, function( x ) { km <- kmeans(freeny$inputsTrain,x,iter.max = 100 ) ; km$tot.withinss } )
plot( 1:10, wss )

enter image description here

该图表显示3-4个类别为最佳。有关更复杂和信息量更丰富的方法,请参阅群集图:http://www.r-statistics.com/2010/06/clustergram-visualization-and-diagnostics-for-cluster-analysis-r-code/