• 软件——机器学习与Python,聚类,K——means


     K-means是一种聚类算法:

    这里运用k-means进行31个城市的分类

    城市的数据保存在city.txt文件中,内容如下:

    BJ,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64
    TianJin,2459.77,495.47,697.33,302.87,284.19,735.97,570.84,305.08
    HeBei,1495.63,515.90,362.37,285.32,272.95,540.58,364.91,188.63
    ShanXi,1406.33,477.77,290.15,208.57,201.50,414.72,281.84,212.10
    NMG,1303.97,524.29,254.83,192.17,249.81,463.09,287.87,192.96
    LiaoNing,1730.84,553.90,246.91,279.81,239.18,445.20,330.24,163.86
    JiLin,1561.86,492.42,200.49,218.36,220.69,459.62,360.48,147.76
    HLJ,1410.11,510.71,211.88,277.11,224.65,376.82,317.61,152.85
    ShangHai,3712.31,550.74,893.37,346.93,527.00,1034.98,720.33,462.03
    JiangSu,2207.58,449.37,572.40,211.92,302.09,585.23,429.77,252.54
    ZheJiang,2629.16,557.32,689.73,435.69,514.66,795.87,575.76,323.36
    AnHui,1844.78,430.29,271.28,126.33,250.56,513.18,314.00,151.39
    FuJian,2709.46,428.11,334.12,160.77,405.14,461.67,535.13,232.29
    JiangXi,1563.78,303.65,233.81,107.90,209.70,393.99,509.39,160.12
    ShanDong,1675.75,613.32,550.71,219.79,272.59,599.43,371.62,211.84
    HeNan,1427.65,431.79,288.55,208.14,217.00,337.76,421.31,165.32
    HuNan,1942.23,512.27,401.39,206.06,321.29,697.22,492.60,226.45
    HuBei,1783.43,511.88,282.84,201.01,237.60,617.74,523.52,182.52
    GuangDong,3055.17,353.23,564.56,356.27,811.88,873.06,1082.82,420.81
    GuangXi,2033.87,300.82,338.65,157.78,329.06,621.74,587.02,218.27
    HaiNan,2057.86,186.44,202.72,171.79,329.65,477.17,312.93,279.19
    ChongQing,2303.29,589.99,516.21,236.55,403.92,730.05,438.41,225.80
    SiChuang,1974.28,507.76,344.79,203.21,240.24,575.10,430.36,223.46
    GuiZhou,1673.82,437.75,461.61,153.32,254.66,445.59,346.11,191.48
    YunNan,2194.25,537.01,369.07,249.54,290.84,561.91,407.70,330.95
    XiZang,2646.61,839.70,204.44,209.11,379.30,371.04,269.59,389.33
    SHanXi,1472.95,390.89,447.95,259.51,230.61,490.90,469.10,191.34
    GanSu,1525.57,472.98,328.90,219.86,206.65,449.69,249.66,228.19
    QingHai,1654.69,437.77,258.78,303.00,244.93,479.53,288.56,236.51
    NingXia,1375.46,480.89,273.84,317.32,251.08,424.75,228.73,195.93
    XinJiang,1608.82,536.05,432.46,235.82,250.28,541.30,344.85,214.40

    本来数据的头一个是中文的,但是由于中文读取需要解码,出了一些问题,索性改成了城市名字的拼音,每一行都是一个城市的数据

    然后把city.txt 文件保存到路径文件夹下。这个文件夹是根据编辑软件设定的,我用的是spyder,然后建立了一个工程,就把city.txt文

    件考到了工程目录下。

    之后在工程中输入一下程序:

    '''
    created on Wed Jul 05 09:13:43 2017
    author: GXTon
    email :g159147t@163.com
    jiaotashidi qiuzhenwushi
    '''
    #

    import numpy as np                        #要用k-means算法,需要导入numpy
    from sklearn.cluster import KMeans #只导入一部分,


    def loadData(filePath):        #创建一个读取数据的函数
           fr = open(filePath,'r+')       #这里是去读
           lines = fr.readlines()  #.read()每次读取整个文件,通常用于将文件内容放到一个字符串变量中

                                                 #.readlines()一次读取整个文件(类似于.resd())

                                                 #.readline()每次只读取一行,通常比.readlines()慢得多。仅当没有足够内存时才使用它。
           retData = []  #用于存储城市的各项消费信息
      retCityName = []  #用于存储城市名称
      for line in lines:
      items = line.strip().split(",")
      retCityName.append(items[0])
      retData.append([float(items[i]) for i in range(1,len(items))])
      return retData,retCityName    #返回值:返回城市名称,以及该城市的各项消费信息。


    if __name__ == '__main__':     #这里相当于主函数
       data,cityName = loadData('city.txt')   #利用loadData方法读取数据,加载数据
       km = KMeans(n_clusters=4)             #创建实例,创建k-means算法,这里把所有分成4组;

                                                                 #调用k-means方法所需参数:n_clusters,用于指定聚类中心的个数

                                                                  #init,初始聚类中心的初始化方法

                                                                   #max_iter,最大的迭代次数

                                                                   #一般调用时只用给出n_clusters即可,init默认是k-means++,max_iter默认是300
       label = km.fit_predict(data)         #调用Kmeans()fit_predict()方法进行计算,

                                                          #作用是计算簇中心以及为为簇分配符号,label:聚类后个数据所属的标签。
       expenses = np.sum(km.cluster_centers_,axis=1)    #axis按行求和
    #print(expenses)
       CityCluster = [[],[],[],[]]
       for i in range(len(cityName)):   #将城市按照label分成设定的簇
      CityCluster[label[i]].append(cityName[i])  #将每个簇的城市输出
       for i in range(len(CityCluster)):
      print("Expenses:%.2f" % expenses[i])   #将每个簇的平均花费输出
      print(CityCluster[i])

     点击运行,便能出来结果。

    其中n_clusters类,消费水平相近的城市聚集在一类中

    expense:聚类中心点的数值加和,也就是平均消费水平

    实现过程:

    1、建立工程,导入sklearn相关包

         import numpy as np

         from sklearn.cluster import KMeans

     

  • 相关阅读:
    一个在LINUX里安装MS LIB的工具
    Debian 5网易更新源
    ZT:apache转发实现iis和apache共享80端口
    SuSE 安装 永中Office
    [ZT]用dd备份主引导记录
    opensuse 11.3使用fcitx的办法
    在debian5上安装vmware server 2.0.2的尝试
    VHCS wait to be added问题解决
    debian里的NAT转发设置
    Linux操作系统下安装USB移动硬盘的方法
  • 原文地址:https://www.cnblogs.com/chulin/p/7189880.html
Copyright © 2020-2023  润新知