博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DBSCAN注意事项
阅读量:2457 次
发布时间:2019-05-10

本文共 1163 字,大约阅读时间需要 3 分钟。

DBSCAN共包括3个输入数据:数据集D,给定点在邻域内成为核心对象的最小邻域点数:MinPts,邻域半径:Eps,其中Eps和MinPts需要根据具体应用人为设定。

(1)  Eps的值可以使用绘制k-距离曲线(k-distance graph)方法得当,在k-距离曲线图明显拐点位置为对应较好的参数。若参数设置过小,大部分数据不能聚类;若参数设置过大,多个簇和大部分对象会归并到同一个簇中。

K-距离:K距离的定义在DBSCAN算法原文中给出了详细解说,给定K邻域参数k,对于数据中的每个点,计算对应的第k个最近邻域距离,并将数据集所有点对应的最近邻域距离按照降序方式排序,称这幅图为排序的k距离图,选择该图中第一个谷值点位置对应的k距离值设定为Eps。一般将k值设为4。

MinPts的选取有一个指导性的原则(a rule of thumb),MinPts≥dim+1,其中dim表示待聚类数据的维度。MinPts设置为1是不合理的,因为设置为1,则每个独立点都是一个簇,MinPts≤2时,与层次距离最近邻域结果相同,因此,MinPts必须选择大于等于3的值。若该值选取过小,则稀疏簇中结果由于密度小于MinPts,从而被认为是边界点儿不被用于在类的进一步扩展;若该值过大,则密度较大的两个邻近簇可能被合并为同一簇。因此,该值是否设置适当会对聚类结果造成较大影响。

DBSCAN原理伪代码:

(1) 首先将数据集D中的所有对象标记为未处理状态(2) for(数据集D中每个对象p) do(3)    if (p已经归入某个簇或标记为噪声) then(4)         continue;(5)    else(6)         检查对象p的Eps邻域 NEps(p) ;(7)         if (NEps(p)包含的对象数小于MinPts) then(8)                  标记对象p为边界点或噪声点;(9)         else(10)                 标记对象p为核心点,并建立新簇C, 并将p邻域内所有点加入C(11)                 for (NEps(p)中所有尚未被处理的对象q)  do(12)                       检查其Eps邻域NEps(q),若NEps(q)包含至少MinPts个对象,则将NEps(q)中未归入任何一个簇的对象加入C;(13)                 end for(14)        end if(15)    end if(16) end for

转自https://blog.csdn.net/zhouxianen1987/article/details/68945844 

你可能感兴趣的文章
Java FilterInputStream close()方法与示例
查看>>
Java RandomAccessFile readChar()方法及示例
查看>>
python xor_Python XOR和数组| 竞争编码问题
查看>>
mcq 队列_MCQ | 软件工程基础知识/简介(1)
查看>>
分区 主分区 和 扩展分区_等和分区
查看>>
css中图片左右边距_CSS中的边距
查看>>
程序员简历工作模式_简历的完整形式是什么?
查看>>
shell -eom_EOM的完整形式是什么?
查看>>
java中null是常量吗_C_NULL Julia中的常量
查看>>
python中divmod_divmod()函数以及Python中的示例
查看>>
hypot函数_hypot()函数与C ++中的示例
查看>>
c++中atan2函数_atan2()函数以及C ++中的示例
查看>>
python函数示例_带Python示例的complex()函数
查看>>
math.ceil带小数点_Python中带有示例的math.ceil()方法
查看>>
sinh_带有Python示例的math.sinh()方法
查看>>
摄氏温度转换华氏温度_什么是摄氏温度?
查看>>
python中的元类_Python中的元类
查看>>
Java AWT TextField
查看>>
scala特质_Scala的特质
查看>>
python关键字和保留字_Python关键字
查看>>