ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python k-means聚类

2019-05-27 17:40:52  阅读:359  来源: 互联网

标签:plt means python pd 聚类 SSE model data


""
k-means聚类算法过程
1)从N个样本数据中随机选取k个作为初始的聚类中心
2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中
3)所有对象分配完成后,重新计算K个聚类的中心
4)与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转过程2),否则转过程5)
5)当质心不发生变化时停止并输出聚类结果

聚类的目标函数
使用误差平方和SSE作为度量聚类质量的目标函数,对于两种不同的聚类结果,选择误差平方
和较小的分类结果
"""
##使用K-Means算法聚类消费行为特征数据

#加载程序包

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
#读取数据

inputfile = '../data/consumption_data.xls' #销量及其他属性数据
outputfile = '../data/data_type.xls' #保存结果的文件名

data = pd.read_excel(inputfile, index_col = 'Id') #读取数据
data_zs = 1.0*(data - data.mean())/data.std() #数据标准化
"""
R:最近一次消费时间间隔
F:消费频率
M:消费总金额
"""

# '利用SSE选择k'
SSE = [] # 存放每次结果的误差平方和
for k in range(1, 9):
estimator = KMeans(n_clusters=k) # 构造聚类器
estimator.fit(data_zs)
SSE.append(estimator.inertia_)
X = range(1, 9)
plt.xlabel('k')
plt.ylabel('SSE')
plt.plot(X, SSE, 'o-')
plt.show()

k=5 #设定聚类数据为5类

model = KMeans(n_clusters = k)
model.fit(data_zs) #开始聚类

#简单打印结果
r1 = pd.Series(model.labels_).value_counts() #统计各个类别的数目
r2 = pd.DataFrame(model.cluster_centers_) #找出聚类中心
r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目
r.columns = list(data.columns) + [u'类别数目'] #重命名表头
print(r)

##输出误差平方和SSE
SSE = model.inertia_
print(SSE)
#详细输出原始数据及其类别
data_new = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #详细输出每个样本对应的类别
data_new.columns = list(data.columns) + [u'聚类类别'] #重命名表头
data_new.to_excel(outputfile) #保存结果


标签:plt,means,python,pd,聚类,SSE,model,data
来源: https://www.cnblogs.com/liu-304711/p/10931950.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有