【问题标题】:How to know which cluster do the new data belongs to after finishing cluster analysis完成聚类分析后如何知道新数据属于哪个聚类
【发布时间】:2015-12-28 02:55:33
【问题描述】:

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

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

【问题讨论】:

    标签: r cluster-analysis k-means


    【解决方案1】:

    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/

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 2012-07-14
      • 2020-10-10
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 2021-01-14
      相关资源
      最近更新 更多