3

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

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
4

1 回答 1

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 个明确的课程:

在此处输入图像描述

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

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

在此处输入图像描述

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

于 2013-07-10T10:16:07.000 回答