赞
踩
k均值聚类算法(k-means clustering
algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
处理过程
(1)随机选择
k
k
k 个点作为初始的聚类中心
(2)对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
(3)对每个簇,计算所有点的均值作为新的聚类中心
(4)重复(2)、(3)直到聚类中心不再发生改变
算法流程:
以上算法流程引自周志华《机器学习》,从流程来看K-means算法计算步骤基本上可以概括为两个部分:(1)计算每一个对象到类簇中心的距离;(2)根据类簇内的对象计算新的簇类中心。
应用实例——31省份居民家庭消费调查(将城市按消费水平分类)
数据集展示:
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 if __name__ == '__main__': data,cityName = loadData('city.txt') km = KMeans(n_clusters=4) label = km.fit_predict(data) #聚类计算,获得标签 expenses = np.sum(km.cluster_centers_,axis=1) CityCluster = [[],[],[],[]] for i in range(len(cityName)): CityCluster[label[i]].append(cityName[i]) for i in range(len(CityCluster)): print("消费水平: %.2f" % expenses[i]) print(CityCluster[i])
聚成2类时:(n_clusters=2)输出如下
In [6]: run K_means.py
消费水平: 4040.42
['河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '江苏', '安徽', '江西', '山东', '河南', '湖南', '湖北', '广西', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '宁夏', '新疆']
消费水平: 6457.13
['北京', '天津', '上海', '浙江', '福建', '广东', '重庆', '西藏']
聚成3类时:(n_clusters=3)输出如下
In [8]: run K_means.py
消费水平: 3827.87
['河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '安徽', '江西', '山东', '河南', '湖北', '贵州', '陕西', '甘肃', '青海', '宁夏', '新疆']
消费水平: 5113.54
['天津', '江苏', '浙江', '福建', '湖南', '广西', '海南', '重庆', '四川', '云南', '西藏']
消费水平: 7754.66
['北京', '上海', '广东']
从输出结果看出消费水平相近的省市聚集在了一类。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。