美文网首页
聚类算法应用——K-means

聚类算法应用——K-means

作者: 敬子v | 来源:发表于2019-10-07 10:48 被阅读0次

    聚类:K-means算法

    k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。

    处理的思路:

    1.随机选择k个点作为初始的聚类中心;
    2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
    3.对每个簇,计算所有点的均值作为新的聚类中心
    4.重复2、3直到聚类中心不再发生改变

    图解:

    image.png

    下面是对31个省份的人均消费水平的聚类算法,从而可以看出每个省的消费水平。
    所需要的数据:
    链接: https://pan.baidu.com/s/1Uw2pIAQwm6q7D1zJL-CHSw 提取码: cfbk

    #-*- coding:utf-8 -*-
    import numpy as np
    from sklearn.cluster import KMeans
    def loadData(filepath):#调用函数时直接输入路径
        fr=open(filepath,'r+',encoding='gbk') #只读模式,文本的编辑方式是'gbk'
        lines=fr.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))]) #第二列到最后一列都是数据,变成n个数列的形式,才能计算每个数据
        for i in range(len(items)):
            return retCityName,retData
    # loadData("city.txt")
    
    if __name__ == '__main__':
        CityName,Data=loadData('city.txt')
        km=KMeans(n_clusters=3)  #这两步完成了聚类算法,第一步,调用Kmeans算法,然后是利用调用的算法进行距离的计算,同时进行分类,并且设置标签
        lable=km.fit_predict(Data) #lable=[2 0 1 1 1 1 1 1 2 0 0 1 0 1 1 1 0 1 2 0 0 0 0 1 0 0 1 1 1 1 1],#通过数据对城市进行分类
        expense=np.sum(km.cluster_centers_,axis=1) #计算出每个省份的总的消费情况,便于了解各省的人均支出 #聚类之后对各个簇里面的数值求均值
        # print(expense)
        #进行聚类之后,再打印输出
        CityCluster=[[],[],[]]
        for i in range(len(CityName)):
            CityCluster[lable[i]].append(CityName[i])  #将每个簇的城市输出
        for i in range(len(CityCluster)):
            print("Expense:%.2f"%expense[i])   #将每个簇的平均花费输出
            print(CityCluster[i])
    

    调用KMeans方法所需参数:
    其它参数:
    • n_clusters:用于指定聚类中心的个数 • data:加载的数据
    • init:初始聚类中心的初始化方法 • label:聚类后各数据所属的标签
    • max_iter:最大的迭代次数 • axis: 按行求和
    • 一般调用时只用给出n_clusters即可,init 默认是k-means++,max_iter默认是300
    • fit_predict():计算簇中心以及为簇分配序号

    结果:

    Expense:5113.54
    ['天津', '江苏', '浙江', '福建', '湖南', '广西', '海南', '重庆', '四川', '云南', '西藏']
    Expense:7754.66
    ['北京', '上海', '广东']
    Expense:3827.87
    ['河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '安徽', '江西', '山东', '河南', '湖北', '贵州', '陕西', '甘肃', '青海', '宁夏', '新疆']
    

    很明显,可以看出来消费水平较高的是北上广

    相关文章

      网友评论

          本文标题:聚类算法应用——K-means

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