K-means计算城市聚类

作者: 只是不在意 | 来源:发表于2017-06-30 12:11 被阅读0次

    前阵子有朋友请教,如果有一份各城市的指标表,一共是20个城市 X 24个指标,包括城市GDP、人均GDP、人均存款等,应该如何分类?

    1.png

    如果不考虑原有的一二三线城市分布,而利用各个指标进行分类(正确说应该是聚类),我想到的就是K-means方法。

    K-means是非监督学习(unsupervised learning)中最简单也是最常用的一种聚类算法,它的计算过程非常直观:

    1、随机取k个元素,作为k个簇的各自的中心。
    2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
    3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
    4、全部元素按照新的中心重新聚类。
    5、重复第4步,直到聚类结果不再变化。

    image.png

    按照以上的距离算法,取值范围大的属性,例如gdp的数字差别,会产生更大的距离影响,这样不利于反映真实的相异度。为了解决这个问题,一般要对属性值按照比例进行规格化,(scale)映射到[0,1]区间。平衡各个属性对距离的影响。
    代码如下:

    install.packages("corrplot")
    library(corrplot)
    
    install.packages("readr")
    library(readr)
    setwd("E:")
    city<-read_csv("city.csv")
    head(city)
    
    #设立一个空数据框,城市名跟原来的相同
    data<-as.data.frame(matrix(ID<-city$city))
    
    #重点是这里:将表格2-25列进行循环,每一列指标用kmeans方法分成三类,再将每个城市的分类加入新的表格中。
    for (m in 2:25){
      my.km<-kmeans(scale(city[,m]),center=3)
      data<-cbind(data,my.km$cluster)
    }
    
    names(data)<-names(city)
    

    这样最后成为的就是一个矩阵,在excel里直观显示如此:

    2.png

    这个可以继续往下挖掘,例如各个指标间的相互联系,可以用cor函数做,也可以直接用corrplot来做可视化。

    corr <- cor(data[2:25])
    corrplot(corr)
    
    3.png

    从图中可以看出,GDP与政府花费是有着很强大正相关关系。因此,如何选择重要的指标,正切利用或排除这些相互影响的因素,是做好预测和聚类的不可忽略的关键一步。
    以上仅为初步探讨,欢迎批评指正。


    参考文件
    http://www.cnblogs.com/leoo2sk/archive/2010/09/20/k-means.html

    相关文章

      网友评论

        本文标题:K-means计算城市聚类

        本文链接:https://www.haomeiwen.com/subject/bhsucxtx.html