第10关:K均值聚类算法及其应用

相关知识

为了完成本关任务,你需要掌握:1.数据获取及标准化处理,2.利用KMeans创建K-均值聚类对象model,3.K-均值聚类分析

数据获取及标准化处理

注意指标之间的数据差异是比较大的,需要做规范化处理。变量或指标的单位不同,造成有些指标数据值非常大,而有些非常小,在模型运算过程中大的数据会把小的数据覆盖,造成模型失真,因此,需要对这些数据做规范化处理,或者说去量纲化。同时该数据存在空值(nan值),在进行规范化之前需要先对其进行填充处理。这个数据没有空值(nan值),在这里我们是直接使用均值-方差规范化处理数据。 示例如下:


  1. #对X做均值-方差规范化处理
  2. from sklearn.preprocessing import StandardScaler
  3. scaler = StandardScaler()
  4. scaler.fit(X)
  5. X=scaler.transform(X)

输出:

,

利用KMeans创建K-均值聚类对象model

利用KMeans创建K-均值聚类对象model。 参数说明如下: n_clusters:设置的聚类个数Krandom_state:随机初始状态,设置为0即可。 max_iter:最大迭代次数。 示例如下:


  1. model = KMeans(n_clusters = K, random_state=0, max_iter = 500)
K-均值聚类分析

聚类分析旨在找出数据对象之间的关系,对原数据进行分组打标签,标准是每个大组之间存在一定的差异性,而组内的对象存在一定的相似性,因此大组之间差异越大,组内的对象相似度越高,最终的聚类效果就越显著。 (1)导入K-均值聚类模块KMeans


  1. from sklearn.cluster import KMeans

(2)利用KMeans创建K-均值聚类对象model


  1. model = KMeans(n_clusters = K, random_state=0, max_iter = 500)

(3)调用model对象中的fit()方法进行拟合训练。


  1. model.fit(X)

(4)获取model对象中的labels_属性,可以返回其聚类的标签。


  1. c=model.labels_

示例如下:


  1. #导入K-均值聚类模块KMeans。
  2. from sklearn.cluster import KMeans
  3. #利用KMeans创建K-均值聚类对象model。
  4. model = KMeans(n_clusters = K, random_state=0, max_iter = 500)
  5. #调用model对象中的fit()方法进行拟合训练。
  6. model.fit(X)
  7. #获取model对象中的labels_属性,可以返回其聚类的标签。
  8. c=model.labels_
  9. print(c)#聚类结果
  10. print(jlzx)#各个类的聚类中心

输出:[[-0.3721276 -0.44736933 -0.48435591 0.28091289] [ 1.4367086 0.59122318 1.38155812 0.16521737] [ 2.89799735 -2.15833071 2.77017304 1.60589541] [-0.4112915 0.84123017 -0.21997107 -0.72010329]] [2 1 3 0 3 3 3 3 2 1 1 0 3 0 3 0 0 0 0 0 3 0 0 0 3 3 0 0 0 0 3]

编程要求

根据提示,在右侧编辑器补充代码,对表中数据做K-均值聚类分析,并在控制台中输出聚类结果和各个类的聚类中心。

测试说明

平台会对你编写的代码进行测试。


开始你的任务吧,祝你成功!

任务代码

********** Begin **********#
#读取“农村居民人均可支配收入来源2016.xlsx”数据表,数据来源于2016年《中国统计年鉴》,
# 首先,对指标数据作均值-方差标准化处理,注意首列为地区名称,不用标准化
# 其次,对标准化后的指标数据,作K-均值聚类分析(K=4),
# 最后,给出聚类分析结果,用一个序列Fs来表示,其中index为地区名称,值为所属类别的标签值(0、1、2、3)。
def return_values():
    #导入K-均值聚类模块KMeans。
    from sklearn.cluster import KMeans
    from sklearn.preprocessing import StandardScaler
    import pandas as pd
    import numpy as np
    Data=pd.read_excel('农村居民人均可支配收入来源2016.xlsx')
    X=Data.iloc[:,1:]
    #对X做均值-方差规范化处理
    scaler = StandardScaler()
    scaler.fit(X) 
    X=scaler.transform(X)
    #利用KMeans创建K-均值聚类对象model。
    model = KMeans(n_clusters = 4, random_state=0, max_iter = 500) 
    #调用model对象中的fit()方法进行拟合训练。
    model.fit(X)
    #获取model对象中的labels_属性,可以返回其聚类的标签。
    c=model.labels_#聚类结果
    jlzx = model.cluster_centers_#各个类的聚类中心
    Fs=pd.Series(c,index=Data['地区'])#地区

    return Fs
#********** End **********#

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐