美文网首页统计
大师兄的数据分析学习笔记(二十六):聚类(二)

大师兄的数据分析学习笔记(二十六):聚类(二)

作者: superkmi | 来源:发表于2022-09-16 17:23 被阅读0次

    大师兄的数据分析学习笔记(二十五):聚类(一)
    大师兄的数据分析学习笔记(二十七):聚类(三)

    四、DBSCAN算法

    • DBSCAN算法是一种基于密度的算法,即一定区域内,密度达到一定程度的数据形成一,否则只是离群点,这样就有以下两个问题:
    1. 区域有多大。
    2. 密度有多大。
    • 基本概念:
    1. E邻域:给定对象半径为E内的区域内称为该对象的E邻域。
    2. 核心对象:如果给定对象E邻域内的样本点数大于等于MinPts,则称该对象为核心对象
    3. 直接密度可达:对于样本集合D,如果样本点q在p的E邻域内,并且p为核心对象,那么对象q从对象p直接密度可达
    4. 密度可达:对于样本集合D,给定一串样本点p1,p2....pn,p=p1,q=pn,假定对象pi从pi-1直接密度可达,那么对象q从对象p密度可达
    5. 密度相连:存在样本集D中的一点o,如果对象o到对象p和对象q都密度可达,那个p和q密度相连
    • DBSCAN算法的目的就是找到密度相连对象的最大集合。
    • 算法优点:
    1. 离群点不敏感。
    • 算法问题:
    1. 计算点相邻的点比较困难,需要KD-Tree等数据结构辅助。
    2. 参数计算比较麻烦。
    >>>import numpy as np
    >>>import matplotlib.pyplot as plt
    >>>from sklearn.datasets import make_circles,make_blobs,make_moons
    >>>from sklearn.cluster import DBSCAN
    
    >>>n_samples = 1000
    >>>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
    >>>colours = "bgrcmyk"
    >>>data = [circles,moons,blobs,random_data]
    >>>models = [("None",None),("DBSCAN",DBSCAN(min_samples=3,eps=0.2))]
    
    >>>fig = 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(int)
    >>>        fig.add_subplot(len(models),len(data),inx*len(data)+i+1)
    >>>        plt.title(clt_name)
    >>>        [plt.scatter(X[p,0],X[p,1],color=colours[clt_res[p]]) for p in range(len(X))]
    >>>plt.show()
    

    相关文章

      网友评论

        本文标题:大师兄的数据分析学习笔记(二十六):聚类(二)

        本文链接:https://www.haomeiwen.com/subject/xzxznrtx.html