失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 聚类分析 - K-means - Python代码实现

聚类分析 - K-means - Python代码实现

时间:2020-04-12 01:39:32

相关推荐

聚类分析 - K-means - Python代码实现

算法简介

K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。

算法过程如下:

1)从N个文档随机选取K个文档作为中心点;

2)对剩余的每个文档测量其到每个中心点的距离,并把它归到最近的质心的类;

3)重新计算已经得到的各个类的中心点;

4)迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束。

算法优缺点:

优点:

对处理大数据集,该算法保持可伸缩性和高效性算法快速、简单,易于理解;

缺点:

在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的,具体应用中只能靠经验选取;对噪声和孤立点数据敏感,导致均值偏离严重;当数据量非常大时,算法的时间开销是非常大的;初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果。

代码实现

第一步:读取文件,简单查看数据

import pandas as pdimport numpy as npfrom pandas import DataFrame,Seriesfrom sklearn.cluster import KMeansfrom sklearn.cluster import Birch#读取文件datafile = u'E:\\pythondata\\julei.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略outfile = u'E:\\pythondata\\julei_out.xlsx'#设置输出文件的位置data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件则用read_csvd = DataFrame(data)d.head()

列名:助攻,身高,比赛时间,年龄,得分,根据这几项进行聚类。

第二步:聚类

#聚类mod = KMeans(n_clusters=3, n_jobs = 4, max_iter = 500)#聚成3类数据,并发数为4,最大循环次数为500mod.fit_predict(d)#y_pred表示聚类的结果#聚成3类数据,统计每个聚类下的数据量,并且求出他们的中心r1 = pd.Series(mod.labels_).value_counts()r2 = pd.DataFrame(mod.cluster_centers_)r = pd.concat([r2, r1], axis = 1)r.columns = list(d.columns) + [u'类别数目']print(r)#给每一条数据标注上被分为哪一类r = pd.concat([d, pd.Series(mod.labels_, index = d.index)], axis = 1)r.columns = list(d.columns) + [u'聚类类别']print(r.head())r.to_excel(outfile)#如果需要保存到本地,就写上这一列

第三步:可视化,简单的标注上分为哪一类怎么能满足?当然要看看可视化效果,毕竟注意一目了然的判断聚类的效果

#可视化过程from sklearn.manifold import TSNEts = TSNE()ts.fit_transform(r)ts = pd.DataFrame(ts.embedding_, index = r.index)import matplotlib.pyplot as plta = ts[r[u'聚类类别'] == 0]plt.plot(a[0], a[1], 'r.')a = ts[r[u'聚类类别'] == 1]plt.plot(a[0], a[1], 'go')a = ts[r[u'聚类类别'] == 2]plt.plot(a[0], a[1], 'b*')plt.show()

因为K-means 算法过于大众化,而且代码其实比较简单的,所以备注比较少,如果需要备注或者有任何疑问,欢迎留言。

如果觉得《聚类分析 - K-means - Python代码实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。