2013-07-10 61 views
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 

回答

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/

相關問題