聚类算法(part1)--DBSCAN
学习笔记,仅供参考,有错必纠
参考书目:《数据挖掘导论》;《R语言实战》;《应用预测建模》;《R语言与数据挖掘》;等
聚类
密度聚类
基于密度的聚类寻找被低密度区域分离的高密度区域。DBSCAN是一种简单、有效的基于密度的聚类算法,它解释了基于密度的聚类方法的许多重要概念。
基于中心的方法
在基于中心的方法中,数据集中特定点的密度通过对该点EpsEpsEps半径之内的点计数(包括点本身)来估计。如下图所示,点A的EpsEpsEps半径内点个数为7,且包括A本身:
该方法实现简单,但是点的密度取决于指定的半径,例如,如果半径足够大,则所有点的密度都等于数据集中的点数m,同理,如果半径太小,则所有点的密度都是1。
根据基于中心的密度进行点分类
密度的基于中心的方法使得我们可以将点分类为(1)稠密区域内部的点(核心点),(2)稠密区域边缘上的点(边界点),(3)稀疏区域中的点(噪声或背景点)。下图展示了核心点、边界点和噪声点的概念:
核心点:这些点在基于密度的簇内部。点的邻域由距离函数和用户指定的距离参数EpsEpsEps决定,核心点的定义是,如果该点的给定邻域内的点的个数超过给定的阈值
MinPtsMinPtsMinPts,则该点为核心点,其中MinPtsMinPtsMinPts也是一个用户指定的参数。上图中,点A是核心点。边界点:边界点不是核心点,但它落在某个核心点的邻域内。上图中,点B是边界点。边界点可能落在多个核心点的邻域内。
噪声点:噪声点是既非核心点也非边界点的任何点。上图中,点C是噪声点。
DBSCAN算法
给定核心点、边界点和噪声点的定义,DBSCAN算法可以非正式地描述如下,任意两个足
够靠近(相互之间的距离在Eps之内)的核心点将放在同一个簇中。同样,任何与核心点足够靠近的边界点也放到与核心点相同的簇中中,如果一个边界点靠近不同簇的核心点,则可能需要解决平局问题。噪声点被丢弃。下面是实现步骤:
- 将所有点标记为核心点、边界点或噪声点;
- 删除噪声点;
- 为距离在Eps之内的所有核心点之间赋予一条边;
- 每组连通的核心点形成一个簇;
- 将每个边界点指派到一个与之关联的核心点的簇中。
时间复杂性和空间复杂性
DBSCAN的基本时间复杂度是OOO(m*找出Eps邻域中的点所需要的时间),其中m是点的个数。在最坏的情况下,时间复杂度是O(m2)O(m^2)O(m2).然而,在低维空间,有一些数据结构,比如kd树,可以有效地检索特定点给定距离内的所有点,时间复杂度将降至O(mlogm)O(mlogm)O(mlogm)。
即使对于高维数据,DBSCAN的空间复杂度依然是O(m)O(m)O(m),因为对每个点,它只需要维持少量数据,即簇标号和每个点是核心点、边界点还是噪声点的标识。
选择DBSCAN的参数
当然,还有如何确定Eps和MinPts的问题。基本方法是观察点到它的k个最近邻的距离(称为k-距离)的特性。对于属于某个簇的点,如果k不大于簇的大小的话,则k-距离
将很小(理解:因为在同一个族内)。
注意,尽管因簇的密度和点的随机分布不同而有一些变化,但是如果簇密度的差异不是很极端的话,在平均情况下变化不会太大,然而,对于不在簇中的点(如噪声点),k-距离
将相对较大。因此,如果我们对于某个k,计算所有点的k-路离
,以递增次序将它们排序,然后绘制排序后的值,则我们会看到k-距离
的急剧变化,对应于合适的Eps值。如果我们选取该距离为Eps参数,而取k的值为MinPts参数,则k-距离
小Eps的点将被标记为核心点,而其他点将被标记为噪声或边界点。
如果k的值太小,则少量邻近点的噪声或离群点将可能不正确地标一记为簇。如果k的值太大,则小簇(尺寸小于k的簇)可能会标记为噪声。
R语言实践
相关函数:
library(fpc)
db = dbscan(data, eps, MinPts)
plotcluster(data, db$cluster)
聚类算法(part1)--DBSCAN相关推荐
- (3)聚类算法之DBSCAN算法
文章目录 1.引言 2.`DBSCAN`相关定义 3.`DBSCAN`密度聚类思想 3.1 `DBSCAN`算法定义 3.2 DBSCAN算法流程 4.`DBSCAN`算法实现 4.1 使用`nump ...
- 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】
密度聚类方法的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中. 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一 ...
- 聚类算法Clustering-KMeans/DBSCAN/DenPeak/NormalizeCut/RCC
本文结构安排 经典聚类算法:线性聚类 Kmeans 经典聚类算法:非线性聚类 DBSCAN.谱聚类 新兴聚类算法:DenPeak,RCC K-means K-means clustering is a ...
- 基于密度的聚类算法:DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层次聚类方法不同, ...
- 聚类算法之DBSCAN算法之一:经典DBSCAN
DBSCAN是基于密度空间的聚类算法,与KMeans算法不同,它不需要确定聚类的数量,而是基于数据推测聚类的数目,它能够针对任意形状产生聚类. 1.epsilon-neighborhood epsoi ...
- 机器学习8—聚类算法之DBSCAN和Birch算法
聚类算法 一.基于密度的聚类DBSCAN算法 1.1DBSCAN算法的基本概念 1.2DBSCAN算法参数选择 1.3DBSCAN算法原理 1.4DBSCAN算法中dbscan()函数的说明 1.5D ...
- java dbscan_聚类算法之DBScan(Java实现)
DBScan是一种基于密度的聚类算法,它有一个核心点的概念:如果一个点,在距它Eps的范围内有不少于MinPts个点,则该点就是核心点.核心和它Eps范围内的邻居形成一个簇.在一个簇内如果出现多个点都 ...
- R实现K均值算法,层次聚类算法与DBSCAN算法
1.聚类的基本概念 聚类分析(cluster analysis)仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组.其目标是,组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不 ...
- 聚类算法之DBScan(Java实现)[转]
package orisun;import java.io.File; import java.util.ArrayList; import java.util.Vector; import java ...
最新文章
- TypeError: can only concatenate str (not “int“) to str
- LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)
- 还原软件实施更安全防护机器狗
- java运行机制是什么_JAVA运行机制
- Anaconda 镜像使用帮助
- CCF201503-2 数字排序
- ubuntu安装postgreSQL 9.3
- bzoj 1003: [ZJOI2006]物流运输
- java true false 异或_三元运算符21?true:false;
- nodejs之路-[0]安装及简易配置
- 数据抽取的常见理论方法
- rt-thread驱动篇(07)---STM32F429单片机SD卡驱动添加
- warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
- iWebShop核心团队启动shukai新域名,进入全案SEO网络营销领域发力SEO众包外包服务
- RC / RL串联电路计算
- java liveness_并发 - 活跃度(Liveness) - 《Java 编程要点(Essential Java)》 - 书栈网 · BookStack...
- 求教吉他继续提高的方法
- 牛客 · 奇♂妙拆分
- Linux Alsa声卡驱动(2):代码分析
- 微软ODBC服务器驱动,系统要求、安装和驱动程序文件
热门文章
- flask_mail用法实例
- ubuntu16.04/20.04 xfce4下面使用护眼软件redshift
- 不安装cudnn可不可以_Ubuntu16.04+gtx1060+cuda8.0+cudnn8.0+tensorflow安装
- 用java制作心理测试软件_0基础学习制作app
- biee mysql_BIEE 11g linux下连接mysql数据源
- npm script 的实践
- amazeui学习笔记--css(布局相关3)--辅助类Utility
- cocos2dx3.0五种屏幕适配模式,及FIXED_WIDTH、FIXED_HEIGHT使用
- 分隔list,让页面成多行多列遍列
- 002 在大数据中基础的llinux基本命令