6. DBSCAN浮光略影

news/2024/5/20 7:28:31 标签: 机器学习, 聚类

6. DBSCAN浮光略影

机器学习易陷入一个误区:以为机器学习是若干种算法(方法)的堆积,熟练了“十大算法”或“二十大算法”一切即可迎刃而解,于是将目光仅聚焦在具体算法推导和编程实现上;待到实践发现效果不如人意,则又转对机器学习发生怀疑。须知,书本上仅能展示有限的典型“套路”,而现实世界任务千变万化,以有限之套路应对无限之变化,焉有不败!现实中更多更多时候,需要根据任务特点对套路进行改造融通。算法是“死”的,思想才是“活”的。欲行此道,则务须把握算法背后的思想脉络,无论创新科研还是应用实践,皆以此为登堂入室之始。

--西瓜书

DBSCAN是一种基于密度的聚类方法,把空间中扎堆的样本视为一类,类和类之间由低密度区域隔开,把不在任何一类的数据视为异常。那么要怎么样刻画“密度”这一概念呢?

DBSCAN通过2个参数espmin_samples把样本点分为3类:核心点,边缘点和异常点。

  • 核心点。指在 ϵ \epsilon ϵ邻域内至少包含min_samples个样本的点。
  • 边缘点。指在核心点 ϵ \epsilon ϵ邻域内,但是自己的邻域内的点的数目小于min_samples。边缘点在簇的边缘。
  • 异常点。不在任何核心点的邻域内的点被划为异常。

因此一类样本点包括核心点和边缘点,也就是密度大的点。异常点即为密度小的点。调大min_samples或调小esp会提高簇的密度。参数min_samples主要控制对噪声的容忍度。在有噪声和大数据集上,可以增大这个参数。参数esp是至关重要的,需要根据数据的特点自行设置。

下图(来自sklearn)大点表示核心点,小点表示边缘点,黑点表示异常点。

图片来自sklearn示例

杂记

  1. 以前以为聚类需要知道类个数
  2. 算法实现使用ball trees,kd-trees来确定点的邻居,这避免了计算完整的距离矩阵。找机会看下ball trees,kd-trees.
  3. sklearn文档中提到“Due to this rather generic view, clusters found by DBSCAN can be any shape, as opposed to k-means which assumes that clusters are convex shaped.”凸是因为kmearns要计算到中心的距离,所以一定是凸的。
  4. 数据的输入顺序会影响聚类结果。原因一是有一些边缘点既在A类核心点的邻域内,也在B类核心点的邻域内,先聚A类的话,这些点就会被归为A类,先聚B类的话,这些点就会被归为B类;另一个原因是简单的记号问题,举例来说假设按ABC三类数据按顺序输入,那么算法给出的标签是123,要是按照BAC的顺序输入,算法给出的标签也是123。也就是说算法已经区分开3类了,只是给的代号不同罢了。

参考:
5. sklearn
6. 西瓜书


http://www.niftyadmin.cn/n/634753.html

相关文章

Uva 11464 偶数矩阵

题目链接&#xff1a;https://uva.onlinejudge.org/external/114/11464.pdf 和开关问题类似&#xff0c;只不过现在是用的位运算操作更简单了&#xff0c;其中要注意的是&#xff0c;只能将0变成1. 1 #include <bits/stdc.h>2 3 using namespace std;4 5 #define inf 0x3…

SSD S.M.A.R.T

经过多年HDD硬盘厂商的完善&#xff0c;S.M.A.R.T已经形成了一些标准&#xff0c;但对于SSD来说&#xff0c;大多数S.M.A.R.T都是自定义的&#xff0c;以至于每个厂商所提供的参数并不一致&#xff0c;但大体都会参考HDD S.M.A.R.T来设定。 SSD S.M.A.R.T信息保存在特定的区域中…

检测视频中的人脸,并画出矩形框

检测视频中的人脸&#xff0c;并画出矩形框&#xff0c;这是一个测试程序&#xff0c;由于很多人经常会用到&#xff0c;写下以备不时之需。 #include"stdafx.h" #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include &l…

7. np.where, np.argwhere, df.where, df.mask

7. np.where, np.argwhere, df.where, df.mask 7.1 np.where numpy.where(condition[, x, y]) 根据条件选择x或y的元素返回。如果condition为真&#xff0c;返回x的元素&#xff1b;反之返回y的元素 a np.arange(10)a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])np.where(a <…

Java日期工具类,Java时间工具类,Java时间格式化

Java日期工具类&#xff0c;Java时间工具类&#xff0c;Java时间格式化 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ©Copyright 蕃薯耀 …

人脸检测、人脸对齐、人脸跟踪、3D建模的人脸图像库

人脸检测、人脸对齐、人脸跟踪、3D建模可能会用到的人脸图像库&#xff1a;怒点这里就好。 这是国外的网址&#xff0c;需要的自己想办法翻越吧&#xff0c;嘿嘿

8. 比较concat, append, merge, join

8. 比较concat, append, merge, join 连接DataFrame 8.1 比较 连接方向 concat可以横向纵向连接对象&#xff1b;appned是纵向连接对象&#xff1b;merge和join是横向连接对象。 连接对象 concat&#xff0c;append一次可以连接多个对象&#xff0c;可以是多个Series、DataFr…

Oracle 自定义数据类型Type

引言 这个月项目中实现了一个动态汇总并且导出到Excel的功能&#xff0c;妈蛋&#xff0c;为了实现这个功能&#xff0c;一个网格页面就用了20个存储过程和自定义函数&#xff0c;终于完成了初步测试工作&#xff0c;其中快把我所掌握的不掌握的Oracle知识都快用完了&#xff…