k-means聚类算法:
以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低.
- 随机选择k个点作为初始的聚类中心
- 对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
- 对每个簇,计算所有点的均值作为新的聚类中心
重复2,3直到聚类中心不再发生变化
k-means应用
通过聚类,了解2016年各个省份的生产总值情况
- 使用sklearn.cluster.Kmeans
import numpy as np
from sklearn.cluster import KMeans
import csv
import logging
def loadData(filePath):
lines=csv.reader(open(filePath))
retData = []
retCityName = []
for line in lines:
retCityName.append(line[0])
retData.append([line[1]])
return retData[1:],retCityName[1:]
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO,format = '%(levelname)s - %(message)s')
path=r'C:/Users/fei/Desktop/julei.csv'
data,cityName = loadData(path)
km = KMeans(n_clusters=4)
label = km.fit_predict(data) #fit_predict()需要输入2D数据,也由此方法实现k-means聚类,label变量存储聚类后分类结果.
logging.info(label)
expenses = km.cluster_centers_
CityCluster = [[],[],[],[]]
for i in range(len(cityName)):
CityCluster[label[i]].append(cityName[i])
for i in range(len(CityCluster)):
print("Expenses:%.2f:%s" % (expenses[i][0],CityCluster[i]))
*代码部分来自Python机器学习应用课程
INFO - [0 3 0 3 3 3 3 3 0 2 0 3 0 3 2 0 0 0 2 3 1 3 0 3 3 1 3 1 1 1 1]
Expenses:33289.25:['北京市', '河北省', '上海市', '浙江省', '福建省', '河南省', '湖北省', '湖南省', '四川省']
Expenses:4632.63:['海南省', '西藏自治区', '甘肃省', '青海省', '宁夏回族自治区', '新疆维吾尔自治区']
Expenses:75422.56:['江苏省', '山东省', '广东省']
Expenses:17415.64:['天津市', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省', '安徽省', '江西省', '广西壮族自治区', '重庆市', '贵州省', '云南省', '陕西省']