【Python算法】聚类分析算法——DBSCAN聚类算法

举报
Micker 发表于 2020/04/10 15:02:59 2020/04/10
【摘要】 【Python算法】聚类分析算法——DBSCAN聚类算法1. DBSCAN聚类算法定义  DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇(即要求聚类空间中的一定区域内所包含对象的数目不小于某一给定阈值),并在具有...

【Python算法】聚类分析算法——DBSCAN聚类算法

1. DBSCAN聚类算法定义

  DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇(即要求聚类空间中的一定区域内所包含对象的数目不小于某一给定阈值),并在具有噪声的空 间数据库中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。

2. DBSCAN聚类算法步骤

  DBSCAN 聚类算法需要两个参数:扫描半径(eps)和最小包含点数(min_samples)。
  第一步为遍历所有点,寻找核心点;第二步为连通核心点,并在此过程中扩展某个分类集合中点的个数,DBSCAN 聚类算法的步骤过程图解如图 所示。

image.png


  聚类算法步骤图解在图 中,第一步就是寻找红色的核心点,第二步就是用绿色的箭头连通红色点。图中以绿色的线条为中心被分成了两类,没在黑色圆中的点是噪声点。

3. DBSCAN聚类算法优缺点

  优点:

  • DBSCAN 聚类算法可以发现任意形状的聚类。

  缺点:

  • 随着数据量的增加,对 I/O、内存的要求也随之增加;

  • 如果密度分步不均匀,聚类效果会较差。

4. DBSCAN聚类算法语法结构

  DBSCAN 聚类算法主要使用以下语法结构:

  • sklearn.cluster.

  DBSCAN 此函数中的主要参数有以下两个:
  (1) eps:两个样本之间的最大距离,即扫描半径;

  (2) min_samples:作为核心点的话邻域(即以其为圆心,eps 为半径的圆,含圆上的点) 中的最小样本数(包括点本身);
  (3) core_sampleindices:核心样本指数;
  (4) labels_:数据集中每个点的集合标签给,噪声点标签为-1。


1.操作系统
  操作机:Linux_Ubuntu
  操作机默认用户:root

2.实验工具
1.python

image.png

  Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。
  由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。  众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功
能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。

2.Numpy

image.png

  NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。
  NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

3.scikit-learn

image.png

scikit-learn

        Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上,开放源码,可商业使用 - BSD license

4.Matplotlib

image.png

        Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

5.pandas

image.png

        Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

步骤1: 导入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


步骤2: 绘制不同形态散点图

代码如下:

#两层圆形
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"


步骤3: 对散点图进行分别进行无处理和DBSCAN处理

代码如下:

data=[circles,moons,blobs,random_data]
models=[("None",None),
        ("DBSCAN",DBSCAN(min_samples=3,eps=0.2)),]


步骤4: 获取点的键值对并绘制在坐标图中

代码如下:

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()

image.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。