DBSCAN

void DBSCAN(D,eps,minpts):
    C = 0
    for each unvisited point P in dataset D:
        mark p as visited
        neighborpts = regionQuery(p,eps)
        if sizeof(neighborpts) < minpts:
            mark p as noise
        else 
            c = next cluster
            expandCluster(P,neighborpts,c,eps,minpts)

void expandCluster(P,neighbors,c,eps,minpts):
    add P to cluster c
    for each point P' in P's neighbor
        if P' is unvisited:
            mark P as visited
            neighbors' =  regionQuery(P,eps)
            if sizeof(neighbors') >=minpts:
                neighbors = neighbots join with neighbors'    
        if P' is not memeber of any cluster:
            add P' to cluster c

void regionQuery(p,eps):
    return neighbors in eps-distance

DBSCAN的主要优点有:

1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
3) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

DBSCAN的主要缺点有:

1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
3) 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值𝜖,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

全部评论

相关推荐

点赞 评论 收藏
转发
投递腾讯云智研发等公司7个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务