Python机器学习应用之k-means聚类

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:['天津市', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省', '安徽省', '江西省', '广西壮族自治区', '重庆市', '贵州省', '云南省', '陕西省']

猜你喜欢

转载自blog.csdn.net/leifei2012/article/details/81667677