KMeans聚类算法应用

KMeans聚类算法应用

1999年31个省份平均每人全年消费支出

import numpy as np
from sklearn.cluster import KMeans
 
 
def loadData(filePath):         #利用loadData读取数据
    fr = open(filePath,'r+')     #r+:读写打开一个文本文件
    lines = fr.readlines()          #readlines()方法用于读取所有行(直到结束符 EOF)并返回列表
    retData = []                      #用来存储城市各项消费信息
    retCityName = []                      #用来储存城市名称
    for line in lines:
        items = line.strip().split(",")     #把每行每个字符分开,变成一个个list
        retCityName.append(items[0])           #把item第一个字符串添加到retCityName数组后面
        retData.append([float(items[i]) for i in range(1,len(items))])#len返回列表长度将数据储存在data
    return retData,retCityName           #返回城市名称及消费数据
 
     
if __name__ == '__main__':
    data,cityName = loadData('city.txt')   
    km = KMeans(n_clusters=5)          #设置五个簇中心
    label = km.fit_predict(data)         #计算簇中心给簇分配序号返回到label标签中
    expenses = np.sum(km.cluster_centers_,axis=1)      #横向计算每个城市的总开销,并把它归类到相应的簇里面并求平均,得到expense[i]从0到4
    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])

实验过程:

1.建立工程,导入相关sklearn相关包
2.加载数据,创建K-Means实例,并进行训练,获得标签:

     1. 利用loadData读取数据
     2. 调用Kmeans() fit_predict()进行计算
     3. 设置簇的个数
     4. 将每个簇的数据进行输出

参数说明

  1. n_clusters:用于指定簇聚类中心个数
  2. data:加载的数据(数据与py文件放在同一个文件夹中)
  3. axis=1:按行进行求和
  4. fit_predict():计算簇中心以及为簇分配序号
  5. readlines():一次读取整个文件 readline() 每次只读取一行,速度慢得多,仅当没有内存储存文件时,才应使用。

注:加载程序时的报错问题

ValueError:setting an array element with a sequence.

发现错误之后,我利用Pycharm进行一步一步的debug,跟踪data的变化情况。在这里插入图片描述
随后发现,是由于前后数组shape不一致导致的,只有一致时才能使用append,之后便意识到可能是数据出现了问题。果然,txt数据每行的末尾出现了空格。清除掉即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值