当前位置:   article > 正文

机器学习实战(三)—K均值聚类算法_离散隐变量

离散隐变量

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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

聚成2类时:(n_clusters=2)输出如下

In [6]: run K_means.py
消费水平: 4040.42
['河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '江苏', '安徽', '江西', '山东', '河南', '湖南', '湖北', '广西', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '宁夏', '新疆']
消费水平: 6457.13
['北京', '天津', '上海', '浙江', '福建', '广东', '重庆', '西藏']
  • 1
  • 2
  • 3
  • 4
  • 5

聚成3类时:(n_clusters=3)输出如下

In [8]: run K_means.py
消费水平: 3827.87
['河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '安徽', '江西', '山东', '河南', '湖北', '贵州', '陕西', '甘肃', '青海', '宁夏', '新疆']
消费水平: 5113.54
['天津', '江苏', '浙江', '福建', '湖南', '广西', '海南', '重庆', '四川', '云南', '西藏']
消费水平: 7754.66
['北京', '上海', '广东']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

从输出结果看出消费水平相近的省市聚集在了一类。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/813002
推荐阅读
相关标签
  

闽ICP备14008679号