机器学习基本模型与算法在线实验闯关
第10关:K均值聚类算法及其应用
相关知识
为了完成本关任务,你需要掌握:1.数据获取及标准化处理,2.利用KMeans创建K-均值聚类对象model,3.K-均值聚类分析
数据获取及标准化处理
注意指标之间的数据差异是比较大的,需要做规范化处理。变量或指标的单位不同,造成有些指标数据值非常大,而有些非常小,在模型运算过程中大的数据会把小的数据覆盖,造成模型失真,因此,需要对这些数据做规范化处理,或者说去量纲化。同时该数据存在空值(nan值),在进行规范化之前需要先对其进行填充处理。这个数据没有空值(nan值),在这里我们是直接使用均值-方差规范化处理数据。 示例如下:
#对X做均值-方差规范化处理from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaler.fit(X)X=scaler.transform(X)
输出:

利用KMeans创建K-均值聚类对象model
利用KMeans创建K-均值聚类对象model。 参数说明如下: n_clusters:设置的聚类个数K。 random_state:随机初始状态,设置为0即可。 max_iter:最大迭代次数。 示例如下:
model = KMeans(n_clusters = K, random_state=0, max_iter = 500)
K-均值聚类分析
聚类分析旨在找出数据对象之间的关系,对原数据进行分组打标签,标准是每个大组之间存在一定的差异性,而组内的对象存在一定的相似性,因此大组之间差异越大,组内的对象相似度越高,最终的聚类效果就越显著。 (1)导入K-均值聚类模块KMeans。
from sklearn.cluster import KMeans
(2)利用KMeans创建K-均值聚类对象model。
model = KMeans(n_clusters = K, random_state=0, max_iter = 500)
(3)调用model对象中的fit()方法进行拟合训练。
model.fit(X)
(4)获取model对象中的labels_属性,可以返回其聚类的标签。
c=model.labels_
示例如下:
#导入K-均值聚类模块KMeans。from sklearn.cluster import KMeans#利用KMeans创建K-均值聚类对象model。model = KMeans(n_clusters = K, random_state=0, max_iter = 500)#调用model对象中的fit()方法进行拟合训练。model.fit(X)#获取model对象中的labels_属性,可以返回其聚类的标签。c=model.labels_print(c)#聚类结果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 **********#
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)