一起读代码_K-means-31省消费水平

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法

其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

聚类(clustering):就是根据数据的“相似性”将数据分为多类的过程。 评估两个不同样本之间的“相似性” ,通常使用的方法就是计算两个样本之间的“距离”。 使用不同的方法计算样本间的距离会关系到聚类结果的好坏。
样本间的距离计算常见的有:欧氏距离、曼哈顿距离、马氏距离、夹角余弦
欧氏距离
曼哈顿距离
马氏距离
夹角余弦
我们需要用到的实验数据:(点击可下载)
实验数据
代码详解:

import numpy as np
from sklearn.cluster import KMeans
def loaddata(filepath):   #定义一个数据加载函数,输入值为文件路径,返回值为各类数据和对应省份名字
    fr=open(filepath,'r')#以只读方式打开
    lines=fr.readlines()#读取所有行
    retdata=[]
    retcityname=[]
    for line in lines:
        items=line.strip().split(",")#将读取的数据删去换行符'\n',并用逗号分隔开
        retcityname.append(items[0])#将第一项(城市名)添加到数组retcityname中
        retdata.append([float(items[i])for i in range(1,len(items))])#将同一行内剩余数据依次添加到retdata中,需要注意使用float[]进行类型转化从而达到运算浮点数而不是字符型变量#
     return retdata,retcityname
if __name__=='__main__':
    data,cityname=loaddata('31省市居民家庭消费水平-city.txt')
    km=KMeans(n_clusters=4)#创建kmeans分类器,指定聚类中心个数(分类类别数)为4#
    label=km.fit_predict(data)#计算簇中心以及为簇分配序号
    expenses=np.sum(km.cluster_centers_,axis=1)#聚类中心数据求和,求和方式为按行相加#
    print(expenses)
    CityCluster=[[],[],[],[]]#四类对应四组数据
    for i in range(len(cityname)):
        CityCluster[label[i]].append(cityname[i])#将每一类中的城市名添加至对应类别中#
    for i in range(len(CityCluster)):
        print("Expenses:%.2f"%expenses[i])
        print(CityCluster[i])

运行结果:在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值