1、定义和区别(优缺点对比)

  • 聚类分为:基于划分、层次、密度、图形和模型五大类;
  • 均值聚类k-means是基于划分的聚类, DBSCAN是基于密度的聚类。区别为:

    1. k-means需要指定聚类簇数k,并且且初始聚类中心对聚类影响很大。k-means把任何点都归到了某一个类,对异常点比较敏感。DBSCAN能剔除噪声,需要指定邻域距离阈值eps和样本个数阈值MinPts,可以自动确定簇个数。

    2. K均值和DBSCAN都是将每个对象指派到单个簇的划分聚类算法,但是K均值一般聚类所有对象,而DBSCAN丢弃被它识别为噪声的对象。

    3. K均值很难处理非球形的簇和不同大小的簇。DBSCAN可以处理不同大小或形状的簇,并且不太受噪声和离群点的影响。当簇具有很不相同的密度时,两种算法的性能都很差。

    4. K均值只能用于具有明确定义的质心(比如均值或中位数)的数据。DBSCAN要求密度定义(基于传统的欧几里得密度概念)对于数据是有意义的。

    5. K均值算法的时间复杂度是O(m),而DBSCAN的时间复杂度是O(m^2)。
    6. DBSCAN多次运行产生相同的结果,而K均值通常使用随机初始化质心,不会产生相同的结果。

    7. K均值DBSCAN和都寻找使用所有属性的簇,即它们都不寻找可能只涉及某个属性子集的簇。

    8. K均值可以发现不是明显分离的簇,即便簇有重叠也可以发现,但是DBSCAN会合并有重叠的簇。

    9. K均值可以用于稀疏的高维数据,如文档数据。DBSCAN通常在这类数据上的性能很差,因为对于高维数据,传统的欧几里得密度定义不能很好处理它们。

2、kmeans原理

  • k-means:即均值聚类,对于给定样本集,按照样本之间的距离大小,将样本集划分为K个簇。目标是让簇内的点尽量连接在一起,而让簇间的距离尽量大。
  • 目标函数:如果用数据表达式表示,假设簇划分为(C1,C2,...Ck),则我们的目标是最小化平方误差E:

\[E = \sum_{i=1}^{k} \sum_{x \in C_{i}} ||x- \mu_{i}||_{2}^{2}\]

其中\(\mu\)是簇\(C_{i}\)的均值向量,也称为质心,表达式为:

\[\mu_{i} = \frac{1}{C_{i}} \sum_{x \in C_{i}} x\]

  • 直接求目标函数E的值是一个NP难的问题。NP(non-deterministic polynomial)是指非确定性多项式,即可用一定数量的运算去解决多项式时间内可解决的问题,而NP难不是一个NP问题。(NP->NPC->NP hard)

  • K-means算法流程:首先确定K值(可以根据经验指定,或者交叉验证选择合适k值),其次是选择k个初始化的质心(质心的选择对结果的影响很大,因此质心选择不能太近)。

优化算法暂时不作笔记。

  • k-means优点:

    1. 原理比较简单,实现也是很容易,收敛速度快。

    2. 聚类效果较优。

    3. 算法的可解释度比较强。

    4. 主要需要调参的参数仅仅是簇数k。

  • k-means缺点:

    1. K值的选取不好把握。

    2. 对于不是凸的数据集比较难收敛。

    3. 如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。

    4. 采用迭代方法,得到的结果只是局部最优。

    5. 对噪音和异常点比较的敏感。

3、DBSCAN原理

  • DBSCAN定义:是一种基于密度的聚类算法,可以通过样本分布的紧密程度决定,同一类别的样本之间是紧密相连的,不同样本是是分离的。

  • DBSCAN原理:基于一组邻域来描述样本集的紧密程度,参数\((\epsilon, MinPts)\)用来描述领域的样本分布紧密程度。其中\(\epsilon\)是某一样本的邻域距离阈值,\(MinPts\)描述了某一样本的距离为\(\epsilon\)的邻域中样本个数阈值。

  • DBSCAN思想:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。假定样本集为\(D=(x_{1},x_{2},...,x_{m})\),则有以下重要定义:

    1. \(\epsilon\)-邻域:对于xj∈D,其ϵ-邻域包含样本集D中与xj的距离不大于ϵ的子样本集,即Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}, 这个子样本集的个数记为|Nϵ(xj)| ;

    2. 核心对象:对于任一样本xj∈D,如果其ϵ-邻域对应的Nϵ(xj)至少包含MinPts个样本,即如果|Nϵ(xj)|≥MinPts,则xj是核心对象。 

    3. 密度直达:如果xi位于xj的ϵ-邻域中,且xj是核心对象,则称xi由xj密度直达。注意反之不一定成立,即此时不能说xj由xi密度直达, 除非且xi也是核心对象。

    4. 密度可达:对于xi和xj,如果存在样本样本序列p1,p2,...,pT,满足p1=xi,pT=xj, 且pt+1由pt密度直达,则称xj由xi密度可达。也就是说,密度可达满足传递性。此时序列中的传递样本p1,p2,...,pT−1均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也不满足对称性,这个可以由密度直达的不对称性得出。

    5. 密度相连:对于xi和xj,如果存在核心对象样本xk,使xi和xj均由xk密度可达,则称xi和xj密度相连。注意密度相连关系是满足对称性的。

  • DBSCAN聚类算法流程:

  • DBSCAN优点:

    1. 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。

    2. 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。

    3. 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

  • DBSSCAN缺点:

    1. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。

    2. 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。

    3. 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

  • 凸集:集合中的任意两点连线的点都在该集合中,则称该集合为凸集;凹集为非凸集。而凸数据集是指集合以数据记录为点的集合。例如,\(ConvexSet = \{(x1,x2,...), (x1,x2,...)', (x1,x2,...)'',...,(x1,x2,...)^{n}\}\)

参考

1.[博客园]https://www.cnblogs.com/hdu-2010/p/4621258.html

2.[刘建平博客]https://www.cnblogs.com/pinard/p/6208966.html

3.[刘建平博客]https://www.cnblogs.com/pinard/p/6164214.html

机器学习 之k-means和DBSCAN的区别的更多相关文章

  1. 机器学习 - 算法 - 聚类算法 K-MEANS / DBSCAN算法

    聚类算法 概述 无监督问题 手中无标签 聚类 将相似的东西分到一组 难点 如何 评估, 如何 调参 基本概念 要得到的簇的个数  - 需要指定 K 值 质心 - 均值, 即向量各维度取平均 距离的度量 ...

  2. 机器学习之K近邻算法(KNN)

    机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...

  3. 机器学习中 K近邻法(knn)与k-means的区别

    简介 K近邻法(knn)是一种基本的分类与回归方法.k-means是一种简单而有效的聚类方法.虽然两者用途不同.解决的问题不同,但是在算法上有很多相似性,于是将二者放在一起,这样能够更好地对比二者的异 ...

  4. 软件——机器学习与Python,聚类,K——means

    K-means是一种聚类算法: 这里运用k-means进行31个城市的分类 城市的数据保存在city.txt文件中,内容如下: BJ,2959.19,730.79,749.41,513.34,467. ...

  5. 机器学习-LR推导及与SVM的区别

    之前整理过一篇关于逻辑回归的帖子,但是只是简单介绍了一下了LR的基本思想,面试的时候基本用不上,那么这篇帖子就深入理解一下LR的一些知识,希望能够对面试有一定的帮助. 1.逻辑斯谛分布 介绍逻辑斯谛回 ...

  6. 【机器学习】k近邻算法(kNN)

    一.写在前面 本系列是对之前机器学习笔记的一个总结,这里只针对最基础的经典机器学习算法,对其本身的要点进行笔记总结,具体到算法的详细过程可以参见其他参考资料和书籍,这里顺便推荐一下Machine Le ...

  7. 机器学习之K近邻算法

    K 近邻 (K-nearest neighbor, KNN) 算法直接作用于带标记的样本,属于有监督的算法.它的核心思想基本上就是 近朱者赤,近墨者黑. 它与其他分类算法最大的不同是,它是一种&quo ...

  8. 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)

    No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...

  9. 机器学习实战-k近邻算法

    写在开头,打算耐心啃完机器学习实战这本书,所用版本为2013年6月第1版 在P19页的实施kNN算法时,有很多地方不懂,遂仔细研究,记录如下: 字典按值进行排序 首先仔细读完kNN算法之后,了解其是用 ...

随机推荐

  1. SpringBoot cookie工具类

    code: import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.annot ...

  2. HDU 4825 Xor Sum(01字典树)题解

    思路:先把所有数字存进字典树,然后从最高位贪心. 代码: #include<set> #include<map> #include<stack> #include& ...

  3. P3211 [HNOI2011]XOR和路径

    思路 看到异或,容易联想到二进制位之间是相互独立的,所以可以把问题变成每个二进制位为1的概率再乘上(1<<pos)的值 假设现在考虑到pos位,设f[i]为第i个节点期望的异或和第pos位 ...

  4. volatile 变量使用

    1,对其它线程可见性.原理是:别的线程每次使用前都是要刷新一下值,并不是原子性同步.所有还是会出现线程不安全. 2,禁止指令重新排序.也就是会出现机器实际执行可能和代码的顺序不一样.使用volatil ...

  5. 论文笔记之 SST: Single-Stream Temporal Action Proposals

    SST: Single-Stream Temporal Action Proposals 2017-06-11 14:28:00 本文提出一种 时间维度上的 proposal 方法,进行行为的识别.本 ...

  6. %lld 和 %I64d的区别

    参考一个博客的链接:https://blog.csdn.net/thunders01/article/details/38879553

  7. vue动态改变样式

    <i class="el-icon-arrow-left" :style="{'color': deadColorArr[index]}" @click= ...

  8. DataTableHelper

    public class DataTableHelper { /// <summary> /// 给DataTable增加一个自增列 /// 如果DataTable 存在 identity ...

  9. Java处理微信公众号文章图片不显示微信

    http://blog.csdn.net/just4you/article/details/52933620

  10. Linux let 命令

    命令:let let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量.如果表达式中包含了空格或其他特殊字符,则必须引起来. 语法格式 let arg ...