• mooc机器学习第三天-聚类-K-means


    1.K-means算法介绍

    (1)

     (2)

     

     (3)例子应用

     

     2过程

     

     

     

     

     

     

     

     

     3.代码(里面我自己做了自我化的通俗注解)

    import sklearn
    import  numpy as np
    from  sklearn.cluster import KMeans
    
    #文件载入
    def loadData(filepath):
        fr=open(filepath,'r+',buffering=1,encoding='gbk')
        lines=fr.readlines()
        
        retDate=[]
        retCityname=[]
        
        for line in lines:
            items=line.strip().split(',')#默认去空格换行符,以“,”切片,返回参数列表
    #       print(items)
    #       print(line) 
            retCityname.append(items[0])
            retDate.append([float(items[i])  for i in range(1,len(items))])
            
        return retDate,retCityname
                                 
    if __name__=='__main__':
        Date,Cityname=loadData('/Users/helong/PycharmProjects/untitled1/study/machine_learning/聚类/31省市居民家庭消费水平-city.txt')
        km=KMeans(n_clusters=5)#n_clusters 聚类中心的个数
        label=km.fit_predict(Date)#导入数据后,label表示计算后各数据所属的标签,fit_predict表示计算簇中心以及为簇分配序号
        print(label)
        print(km.cluster_centers_)#每个簇的每种消费的mean值
        expenses=np.sum(km.cluster_centers_,axis=1)#每个簇的平均总消费()
        print("+++++++++++对比线+++++++++++")
        print(expenses)
        
        Citycluster=[[],[],[],[],[]]
        for i in range(len(Cityname)):
            Citycluster[label[i]].append(Cityname[i]) #把城市和标签一一对应
        for j in range(len(Citycluster)):
            print('Expenses:{}'.format(expenses[j]))
            print(Citycluster[j])
        
    

      输出结果(5个簇):

          

    [2 2 1 1 1 1 1 1 4 3 2 3 0 1 1 1 3 3 4 3 3 3 3 1 3 0 1 1 1 1 1]
    [[2678.035       633.905       269.28        184.94        392.22
       416.355       402.36        310.81      ]
     [1525.81533333  478.672       322.88266667  232.4         236.41866667
       457.53133333  344.81866667  190.21933333]
     [2682.70666667  594.52666667  712.15666667  417.3         422.24
       891.22        541.67333333  362.02666667]
     [2037.95222222  447.31444444  366.59444444  196.02111111  300.58333333
       597.70444444  437.36777778  232.28555556]
     [3383.74        451.985       728.965       351.6         669.44
       954.02        901.575       441.42      ]]
    +++++++++++对比线+++++++++++
    [5287.905      3788.758      6623.85       4615.82333333 7882.745     ]
    Expenses:5287.905
    ['福建', '西藏']
    Expenses:3788.758
    ['河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '江西', '山东', '河南', '贵州', '陕西', '甘肃', '青海', '宁夏', '新疆']
    Expenses:6623.849999999999
    ['北京', '天津', '浙江']
    Expenses:4615.823333333334
    ['江苏', '安徽', '湖南', '湖北', '广西', '海南', '重庆', '四川', '云南']
    Expenses:7882.745
    ['上海', '广东']

    注意:(1)这里的label输出顺序还是和愿数据城市的排序一样,便于城市对应相应的簇(归类),
    (2)label的编号只是单纯编号,没有经过排序(没有严格大小关系),但是每个簇的中心值(mean)数据是严格按照label的[0,1,2,3,。。。]
    的排序是顺序输出的

    2020-06-08




  • 相关阅读:
    Codeforces 1322B
    面向对象案例
    0428面向对象2.0
    0427 面向对象初识
    0427数组相关思想
    0426数组操作
    Eclipse使用技巧
    数组汇总0426
    0424数组练习
    数组习题练习0424
  • 原文地址:https://www.cnblogs.com/cheflone/p/13067668.html
Copyright © 2020-2023  润新知