转自:kmean法和dbscan法的直观比较
K均值聚类使用非常广泛,作为更为古老的聚类方法,它的算法非常简单,而且速度很快。但是其缺点在于它不能识别非球形的簇。我们可以用一个简单的例子来观察K均值聚类的弱点。我们先构造一些人为数据,它是基于sin函数和cos函数构成的两组点。如果我们用传统的K均值聚类,结果如下图所示。其聚类结果是不理想的,因为它不能识别非球形的簇。

DBSCAN的算法是将所有点标记为核心点、边界点或噪声点,将任意两个距离小于eps的核心点归为同一个簇。任何与核心点足够近的边界点也放到与之相同的簇中。下面我们来使用R语言中的fpc包来对上面的例子实施密度聚类。其中eps参数设为0.6,即两个点之间距离小于0.6则归为一个簇,而阀值MinPts设为4。

从上图可以看到,DBSCAN方法很好的划分了两个簇。其中要注意参数eps的设置,如果eps设置过大,则所有的点都会归为一个簇,如果设置过小,那么簇的数目会过多。如果MinPts设置过大的话,很多点将被视为噪声点。

从这个例子中,我们可以看到基于密度聚类的优良特性,它可以对抗噪声,能处理任意形状和大小的簇,这样可以发现K均值不能发现的簇。但是对于高维数据,点之间极为稀疏,密度就很难定义了。

实现代码如下:
# 生成数据
x1 <- seq(0,pi,length.out=100)
y1 <- sin(x1) + 0.1*rnorm(100)
x2 <- 1.5+ seq(0,pi,length.out=100)
y2 <- cos(x2) + 0.1*rnorm(100)
data <- data.frame(c(x1,x2),c(y1,y2))
names(data) <- c('x','y')

# 用K均值聚类
model1 <- kmeans(data,centers=2,nstart=10)
library(ggplot2)
p <- ggplot(data,aes(x,y))
p + geom_point(size=2.5,aes(colour=factor(model1$cluster)))+
               opts(legend.position='top')

# 用fpc包中的dbscan函数进行密度聚类
library('fpc')
model2 <- dbscan(data,eps=0.6,MinPts=4)
p + geom_point(size=2.5, aes(colour=factor(model2$cluster)))+
               opts(legend.position='top')
以上为转载

kmean法和dbscan法的直观比较相关推荐

  1. python中怎么比较两个列表的大小_python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法...

    前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的三种排序算法,选择排序法 ...

  2. 拉格朗日乘数法和KKT条件的直观解释

    拉格朗日乘数法和KKT条件的直观解释 标签(空格分隔): 机器学习 linbin 2018-05-10 Abstract 在SVM的推导中,最优化问题是其中的核心,这里我们简单介绍下最优化问题,特别是 ...

  3. python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法

    前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的三种排序算法,选择排序法 ...

  4. R语言编写自定义函数计算R方、使用自助法Bootstrapping估计多元回归模型的R方的置信区间、可视化获得的boot对象、估计单个统计量的置信区间、分别使用分位数法和BCa法

    R语言编写自定义函数计算R方.使用自助法Bootstrapping估计多元回归模型的R方的置信区间.可视化获得的boot对象.估计单个统计量的置信区间.分别使用分位数法和BCa法(Bootstrapp ...

  5. 操作系统之进程调度——优先权法和轮转法(附上样例讲解)

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  6. 基于倒谱法和线性预测法估计基音频率(MATLAB和Python)

    基于倒谱法和线性预测法估计基音频率(MATLAB和Python) 倒谱法基音检测在python中实现 一帧信号的基音频率估计 wlen = 256 inc = 128 pitch = [] x1, F ...

  7. 乘基取整法是什么_十进制小数转二进制小数乘2取整法的直观理解

    乘2取整法介绍 举例:0.35转换成二进制 0.35×2=0.7 ······ 取0(d1) 0.7×2=1.4 ······ 取1(d2) 0.4×2=0.8 ······ 取0(d3) 0.8×2 ...

  8. 容量法和库仑法的异同点_卡尔费休滴定仪容量法与库仑法有什么区别

    卡尔费休滴定仪可分为体积法和库仑法两种方法,我们以前很少提到这两种方法,但每种方法的原理不同.他们之间有一定的区别.有什么区别?让我们知道. 一.卡尔费休滴定仪容量法的原理. 卡尔费休容量法测定水含量 ...

  9. 室内声场计算机模拟的声线跟踪法和虚声源法,基于声线跟踪法的室外声场仿真.doc...

    基于声线跟踪法的室外声场仿真 谭同德,史晓菲,赵新灿,常村红TAN Tong-de,SHI Xiao-fei,ZHAO Xin-can,CHANG Cun-hong郑州大学 信息工程学院,郑州 450 ...

  10. 《机器学习》课后习题 3.4 选择两个 UCI 数据集,比较 10 折交叉验证法和留 法所估计出的对率回归的错误率.

    参考了han同学的答案,数据集也可在han同学的github上下载. 3.4 选择两个 UCI 数据集,比较 10 折交叉验证法和留 法所估计出的对率回归的错误率. import numpy as n ...

最新文章

  1. python生成折线图-python 生成图表
  2. java8之重新认识HashMap(转自美团技术团队)
  3. ORACLE TEXT LEXER PREFERENCE(二)
  4. 为什么需要架构图,怎么画?
  5. 7-4 N皇后 (28 分)(思路+详解)
  6. 手把手带你入门Python爬虫(二、爬虫预备知识)
  7. 数据结构之查找算法:顺序查找
  8. hbuilder的aptana php插件无法提示命名空间之外函数和对象的解决办法
  9. 开源项目贡献者_扩大项目贡献者基础的5种方法
  10. addition过程 sgnb_5G NR接入优化问题排查思路
  11. 3.4 卷积的滑动窗口实现
  12. JDK源码解析--Object类
  13. 1 熊猫烧香病毒分析
  14. FinalData 数据恢复工具[绿色版]
  15. SVN工具添加忽略上传文件和取消忽略文件
  16. Ubuntu10.04正式版主目录加密BUG
  17. 计算机在材料科学中的应用实,计算机在材料科学与工程中的应用
  18. 设置QQ空间评论回复权限,包括日志、相册、说说、留言板的评论回复和留言权限,限制名单成员无评论回复权限
  19. Golang Fyne项目实战(含源码)
  20. VINS-Mono 代码解析六、边缘化(2)理论和代码详解

热门文章

  1. SqlServer常用对象查询
  2. 京东今天还在用 .NET 架构的原因是什么?
  3. MySQL 浅谈NOT NULL和DEFAULT的关系
  4. 17. 合并两个排序的链表(C++版本)
  5. docker可视化面板
  6. linux进程名称最大长度,linux – 进程名称长度的最大允许限制是多少?
  7. mysql 5.1 开启慢查询_mysql开启慢查询
  8. linux ping raw socket -(signal),***之旅――原始套接字(Raw Socket)透析(3)--用Raw Socket实现Ping...
  9. Java编程:栈的应用实例——逆波兰计算器
  10. 诚毅学院的计算机专业,诚毅学院计算机专业JAVA题目