数据集是city.txt(代码和数据集资源私信分享)
一、k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似
度,而簇间的相似度较低。
其处理过程如下:
1.随机选择k个点作为初始的聚类中心;
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
3.对每个簇,计算所有点的均值作为新的聚类中心
4.重复2、3直到聚类中心不再发生改变
二、kmeans实例练习
通过聚类了解1999年各个省份的消费水平在国内的情况
#无监督学习-K-Means聚类,默认欧氏距离 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(',') retCityName.append(items[0]) retData.append([float(items[i]) for i in range(1,len(items))]) return retData,retCityName #创建K-means算法实例,并进行训练,获得标签 if __name__=='__main__': data,cityName = loadData('H:\city.txt') km = KMeans(n_clusters=3) #3个簇中心,聚成3类 label = km.fit_predict(data) #K-means模型训练数据 expenses = np.sum(km.cluster_centers_,axis=1) #聚类中心点的数值加和,也就是平均消费水平 print(expenses) CityCluster = [[],[],[]] #将城市按label分成不同的簇 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])
聚成三类的结果
聚成四类的结果
由运行结果可以看出消费水平相近的省市聚集在一类中,如消费水平最高的 北京,上海,广州j聚在了消费最高的类别。