KMeans聚类算法应用

Jillian ·
更新时间:2024-09-21
· 529 次阅读

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. 将每个簇的数据进行输出 参数说明 n_clusters:用于指定簇聚类中心个数 data:加载的数据(数据与py文件放在同一个文件夹中) axis=1:按行进行求和 fit_predict():计算簇中心以及为簇分配序号 readlines():一次读取整个文件 readline() 每次只读取一行,速度慢得多,仅当没有内存储存文件时,才应使用。 注:加载程序时的报错问题 ValueError:setting an array element with a sequence. 发现错误之后,我利用Pycharm进行一步一步的debug,跟踪data的变化情况。在这里插入图片描述 随后发现,是由于前后数组shape不一致导致的,只有一致时才能使用append,之后便意识到可能是数据出现了问题。果然,txt数据每行的末尾出现了空格。清除掉即可。 作者:weixin_38432968



kmeans 算法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号