【Python算法】聚类分析算法——系统聚类算法
【Python算法】聚类分析算法——系统聚类算法
1. 系统聚类算法定义
系统聚类也称为多层次聚类,就是按照某种方法进行层次分类,直到满足某种条件为止。它分类的单位由高到低呈树状结构,且所处的位置越低,其所包含的对象就越少,但这些对 象间的共同特征就越多。该聚类方法只适合在数据量较小的时候使用,数据量过大的时候速度会非常慢。
系统聚类算法主要将对象分成两类:
凝聚:从上到下。首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在同一个簇中,或者某个终结条件被满足;
分裂:从上到下。首先将所有对象都置于同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象都自称一簇,或者达到了某个终止条件,此种方法较少用。
2.操作系统
操作机:Linux_Ubuntu
操作机默认用户:root
3.实验工具
3.1.python
Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。
由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。
众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
3.2.Numpy
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
3.3.scikit-learn
scikit-learn,Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上开放源码,可商业使用 - BSD license。
3.4.Matplotlib
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
3.5.pandas
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
4. 导入numpy,matploitlib,sklearn库
代码如下:
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_circles,make_blobs,make_moons from sklearn.cluster import KMeans,DBSCAN,AgglomerativeClustering n_samples=1000
5.绘制不同形态散点图
代码如下:
#两层圆形 circles=make_circles(n_samples=n_samples,factor=0.5,noise=0.05) #两个月牙形 moons=make_moons(n_samples=n_samples,noise=0.05) #三个团形 blobs=make_blobs(n_samples=n_samples,random_state=8,center_box=(-1,1),cluster_std=0.1) #全局随机 random_data=np.random.rand(n_samples,2),None #指定聚类颜色 colors="bgrcmyk"
6. 对散点图进行分别进行无处理和系统聚类处理
代码如下:
data=[circles,moons,blobs,random_data] models=[("None",None), ("Agglomerative",AgglomerativeClustering(n_clusters=3,linkage="ward"))]
7. 获取点的键值对并绘制在坐标图中
代码如下:
from sklearn.metrics import silhouette_score f=plt.figure() for inx,clt in enumerate(models): clt_name,clt_entity=clt for i,dataset in enumerate(data): X,Y=dataset if not clt_entity: clt_res=[0 for item in range(len(X))] else: clt_entity.fit(X) clt_res=clt_entity.labels_.astype(np.int) f.add_subplot(len(models),len(data),inx*len(data)+i+1) #plt.title(clt_name) try: print(clt_name,i,silhouette_score(X,clt_res)) except: pass [plt.scatter(X[p,0],X[p,1],color=colors[clt_res[p]]) for p in range(len(X))] plt.show()
注意:结果输出会有延迟。
- 点赞
- 收藏
- 关注作者
评论(0)