聚类算法实例分析
KMeans聚类 —— 1999年中国31省消费水平
- KMeans原理自述
:①随机挑选K个初始簇中心,并计算每一个原始数据与初始簇中心的距离(默认欧氏距离),分配给距离最近的簇;
:②此时计算每个簇的簇中心是否与初始簇中心相同,如若不同,将当前的簇中心替换掉初始簇中心,并重复步骤①;如若相同,则聚类结束。
源代码
原部分数据
import numpy as np
from sklearn.cluster import KMeans
//定义一个提取数据的函数
def loadData(filePath):
fr = open(filePath,'r+')
//此文件编码格式为:‘GB2312’,默认以‘gbk’方式去解码,所以不用再添加编码格式
lines = fr.readlines()
//readlines与read都读取全部文件,占内存大;readlines每次只读取一行,字符串对象,占用内存小,适合读取大文件
retData = []
retCityName = []
//readlines返回对象为列表;read返回字符串
for line in lines:
items = line.strip().split(",")
//strip移除字符串指定字符,默认为空格与换行符;并按‘,’隔开返回一个列表
retCityName.append(items[0])
retData.append([float(items[i]) for i in range(1,len(items))])
return retData,retCityName
if __name__ == '__main__':
data,cityName = loadData('city.txt')
//指定聚类中心的个数为4个
km = KMeans(n_clusters=4)
//计算簇中心以及为簇分配相应簇中心的序号
label = km.fit_predict(data)
//‘km.cluster_centers_’表示聚类中心点的坐标组成的数组;计算各城市消费指标的和
expenses = np.sum(km.cluster_centers_,axis=1)
//将城市 按label 分成 设定的簇
CityCluster = [[],[],[],[]]
//将每个簇的城市输出
for i in range(len(cityName)):
CityCluster[label[i]]