大家晚上好,我是阿涛。

今天的主题是聚类算法,小结一下,也算是炒冷饭了,好久不用真忘了。

小目录:

1.K-means聚类2.Mean-Shift聚类3.Dbscan聚类4.层次聚类5.GMM_EM聚类

【1】.K-means聚类

1.算法介绍

kmeans算法又名k均值算法,K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心(质量中心,可以利用球坐标进行三重积分求解),即用每一个的类的质心对该簇进行描述。可以看下图直观点:

2.算法思想

先从样本集中随机选取 k个样本作为簇中心,并计算所有样本与这 k个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇重新计算各个簇的新的“簇中心”,然后再继续距离知道簇中心不发生变化。

根据以上描述,我们可以得到实现kmeans算法的主要四点:

(1)簇个数 k 的选择

(2)各个样本点到“簇中心”的距离

(3)根据新划分的簇,更新“簇中心”

(4)重复上述2、3过程,直至"簇中心"没有移动

3.优缺点

优点:

1.容易实现,计算速度快

缺点:

1.可能收敛到局部最小值,在大规模数据上收敛较慢;我们必须提前知道数据有多少类/组。

2.K值需要预先给定,属于预先知识,很多情况下K值的估计是非常困难的,对于像计算全部微信用户的交往圈这样的场景就完全的没办法用K-Means进行。对于可以确定K值不会太大但不明确精确的K值的场景,可以进行迭代运算,然后找出Cost Function最小时所对应的K值,这个值往往能较好的描述有多少个簇类。

3.K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同

4.K-Means算法对离群点的数据进行聚类时,K均值也有问题,这种情况下,离群点检测和删除有很大的帮助。(异常值对聚类中心影响很大,需要离群点检测和剔除)

4.K-Means算法并不是适用所有的样本类型。它不能处理非球形簇、不同尺寸和不同密度的簇。如下图:

4.详细步骤

(1)K值的选择

k 的选择一般是按照实际需求进行决定,或在实现算法时直接给定 k 值。

(2)距离度量

将对象点分到距离聚类中心最近的那个簇中需要最近邻的度量策略,在欧式空间中采用的是欧式距离,在处理文档中采用的是余弦相似度函数,有时候也采用曼哈顿距离作为度量,不同的情况用的度量公式是不同的。

(补充:欧式空间:欧几里得空间就是在对现实空间的规则抽象和推广(从n<=3推广到有限n维空间))

欧式距离公式:

曼哈顿距离公式:

余弦相似度:

(3)新质心的计算

对于分类后的产生的k个簇,分别计算到簇内其他点距离均值最小的点作为质心(对于拥有坐标的簇可以计算每个簇坐标的均值作为质心)

(4)是否停止K-means

质心不再改变,或给定loop最大次数loopLimit

【2】.Mean-Shift聚类

1.算法介绍

Mean Shift算法,又称为均值漂移算法,Mean Shift的概念最早是由Fukunage在1975年提出的,在后来由Yizong Cheng对其进行扩充,主要提出了两点的改进:

  • 定义了核函数;

  • 增加了权重系数。

核函数的定义使得偏移值对偏移向量的贡献随之样本与被偏移点的距离的不同而不同。权重系数使得不同样本的权重不同。Mean Shift算法在聚类,图像平滑、分割以及视频跟踪等方面有广泛的应用。

2.算法思想

均值漂移聚类是基于滑动窗口的算法,来找到数据点的密集区域。这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个组/类的中心点。然后对这些候选窗口进行相似窗口进行去除,最终形成中心点集及相应的分组。

3.优缺点

优点:

(1)不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。

(2)基于密度的算法相比于K-Means受均值影响较小。

缺点:

(1)窗口半径r的选择可能是不重要的。

4.详细步骤

1. 确定滑动窗口半径r,以随机选取的中心点C半径为r的圆形滑动窗口开始滑动。均值漂移类似一种爬山算法,在每一次迭代中向密度更高的区域移动,直到收敛。在指定区域内计算出每个样本点漂移均值

2. 每一次滑动到新的区域,计算滑动窗口内的均值来作为中心点,滑动窗口内的点的数量为窗口内的密度。在每一次移动中,窗口会像密度更高的区域移动。

3. 移动窗口,计算窗口内的中心点以及窗口内的密度,知道没有方向在窗口内可以容纳更多的点,即一直移动到圆内密度不再增加为止。

4. 步骤一到三会产生很多个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,然后根据数据点所在的滑动窗口进行聚类。

【3】.Dbscan聚类

1.算法介绍

与均值漂移聚类类似,DBSCAN也是基于密度的聚类算法。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法,类似于均值转移聚类算法,但它有几个显著的优点。

2.算法思想

DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。

这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里其他的非核心对象样本都在这个核心对象的ϵϵ-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的ϵϵ-邻域中一定有一个其他的核心对象,否则这两个核心对象无法密度可达。这些核心对象的ϵϵ-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。

那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。

3.优缺点

优点:

(1)不需要知道簇的数量

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

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

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

缺点:

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

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

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

4.详细步骤

1. 首先确定半径r和minPoints. 从一个没有被访问过的任意数据点开始,以这个点为中心,r为半径的圆内包含的点的数量是否大于或等于minPoints,如果大于或等于minPoints则改点被标记为central point,反之则会被标记为noise point。

2. 重复1的步骤,如果一个noise point存在于某个central point为半径的圆内,则这个点被标记为边缘点,反之仍为noise point。重复步骤1,直到所有的点都被访问过。

【4】.GMM_EM聚类

1.算法介绍

K-Means的缺点在于对聚类中心均值的简单使用。下面的图中的两个圆如果使用K-Means则不能作出正确的类的判断。同样的,如果数据集中的点类似下图中曲线的情况也是不能正确分类的。

2.算法思想

使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。因此,每个高斯分布被分配给单个簇。
所以要做聚类首先应该找到数据集的均值和标准差,我们将采用一个叫做最大期望(EM)的优化算法。

3.优缺点

优点:

(1)GMMs使用均值和标准差,簇可以呈现出椭圆形而不是仅仅限制于圆形。K-Means是GMMs的一个特殊情况,是方差在所有维度上都接近于0时簇就会呈现出圆形。

(2)GMMs是使用概率,所有一个数据点可以属于多个簇。例如数据点X可以有百分之20的概率属于A簇,百分之80的概率属于B簇。也就是说GMMs可以支持混合资格。

缺点:

(1)计算复杂,是一种软聚类,给出样本的类别概率

补充:

当引入一些额外条件,GMM就退化成了K-means:

4.详细步骤

1. 选择簇的数量(与K-Means类似)并随机初始化每个簇的高斯分布参数(均值和方差)。也可以先观察数据给出一个相对精确的均值和方差。

2. 给定每个簇的高斯分布,计算每个数据点属于每个簇的概率。一个点越靠近高斯分布的中心就越可能属于该簇。

3. 基于这些概率我们计算高斯分布参数使得数据点的概率最大化,可以使用数据点概率的加权来计算这些新的参数,权重就是数据点属于该簇的概率。

4. 重复迭代2和3直到在迭代中的变化不大。

【5】.层次聚类

1.算法介绍

层次聚类算法分为两类:自上而下和自下而上。

凝聚层级聚类(HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一个单一的簇,然后计算所有簇之间的距离来合并簇,知道所有的簇聚合成为一个簇为止。

分裂(divisive)层次聚类:分裂的层次聚类与凝聚的层次聚类相反,采用自顶向下的策略,它首先将所有对象置于同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终止条件。该种方法一般较少使用。

2.优缺点

优点:

(1)不需要知道有多少个簇

(2)对于距离度量标准的选择并不敏感

缺点:

(1)效率低

3.详细步骤

1. 首先我们将每个数据点视为一个单一的簇,然后选择一个测量两个簇之间距离的度量标准。例如我们使用average linkage作为标准,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。

2. 在每次迭代中,我们将两个具有最小averagelinkage的簇合并成为一个簇。

3. 重复步骤2知道所有的数据点合并成一个簇,然后选择我们需要多少个簇。

后记:附上一个总结的聚类算法对比表

对了也附上代码把:

1.kmeans

结果:

2.Mean-shift

结果:

3.Dbscan聚类

结果:

4.GMM_EM

结果:

5.层次聚类

结果:

往期推荐阅读白话MCMC爬虫之scrapy框架不要再被这些图骗了我被诈骗了?极速可视化BI——Tableau

End

作者:涛网站:http://atshare.top/

半壶水全栈工程师,好读书,甚喜之

a*算法的优缺点_五种聚类算法一览与python实现相关推荐

  1. c++多元线性回归_五种优化算法实现多元线性回归

    实现多元线性回归的要求及假设条件: '''线性回归的假设条件:1.样本独立,即每个预测样本之间没有依赖关系:2.残差e要服从正态分布,即y_true-y_pred的残差需要服从高斯分布:3.特征之间独 ...

  2. a*算法的优缺点_轻松理解机器学习算法-朴素贝叶斯

    1.预备知识 贝叶斯定理(Bayes' theorem)是概率论中的一个定理,它跟随机变量的条件概率以及边缘概率分布有关.通常事件A在事件B发生的条件下的概率,与事件B在事件A发生的条件下的概率是不一 ...

  3. 算法的优缺点_各种电磁仿真算法的优缺点和适用范围(FDTD, FEM和MOM等)

    从实际工程应用的角度谈一下我对这几种算法的理解. 先说结论,FDTD算的快但是不精确,可以用来算电大尺寸的物体,要是一个物体的尺寸大于10个波长,一般的服务站是跑不动FEM的,那必须得用FDTD了.F ...

  4. 三维网格精简算法java版_几种常见算法的精简版-

    1 packagetest;2 3 importjava.nio.channels.SelectableChannel;4 5 importcom.itqf.bean.User;6 7 public ...

  5. 算法的优缺点_朴素贝叶斯算法的优缺点

      机器学习算法与自然语言处理推荐  来源:http://www.cnblogs.com/pinard/p/6069267.html 作者:刘建平Pinard [机器学习算法与自然语言处理导读]朴素贝 ...

  6. 一文盘点5种聚类算法,数据科学家必备!

    一文盘点5种聚类算法,数据科学家必备! https://www.toutiao.com/a6638164486228296195/ 来源:中国统计网 本文约4100字,建议阅读10+分钟. 本文为你分 ...

  7. python快速实现10种聚类算法

    文章目录 什么是聚类? 什么是聚类算法? 安装库 创建一个测试二分类数据集 亲和力传播算法AP 聚合聚类 BIRCH DBSCAN K均值 Mini-Batch K-均值 均值漂移聚类 OPTICS ...

  8. 数据科学家必须要掌握的5种聚类算法

    编译 | AI科技大本营 参与 |  刘 畅 编辑 |  明 明 [AI科技大本营导读]聚类是一种将数据点按一定规则分群的机器学习技术.给定一组数据点,我们可以使用聚类算法将每个数据点分类到一个特定的 ...

  9. python 三种聚类算法(K-means,AGNES,DBScan)

    python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44   作者:weixin_42134141 这篇文章主要介绍了pyth ...

最新文章

  1. 今天看论坛,有这样一句话,深有同感,还是家里好
  2. cmake编译时支持gdb调试
  3. 老师学python可以干嘛-学 Python 都用来干嘛的?
  4. 使用 docker 搭建 web 服务环境
  5. 如何删除需要管理员权限才能删除的文件夹
  6. 简单谈谈linux的文件权限问题
  7. 综合实践活动信息技术小学版第三册电子课本_峄城区初中信息技术、综合实践活动学科教师素养提升培训圆满落幕...
  8. cisco交换机堆叠
  9. java 前置通知_spring aop中的前置通知
  10. 自己构造公共程序(3)--DataGrid小方法
  11. 给notepad++添加右键菜单
  12. codeforces 360B
  13. cad一键卸载工具叫什么_CAD卸载清理工具
  14. (学习笔记)图像处理——同态滤波
  15. 【经验分享】嵌入式C语言开发如何有效地排查内存泄露的疑难问题?
  16. 模型压缩——重参数化
  17. 树莓派系统安装和环境配置
  18. 2022.02.16【读书笔记】|基于深度学习的生命科学 第2章 深度学习概论(下)
  19. 一款针对百某盘的神器
  20. ATPG之STIL格式说明

热门文章

  1. [LeetCode] Binary Tree Paths
  2. unlink与close关系
  3. 1、ASP.NET MVC入门到精通——新语法
  4. 中兴通讯应用之星一键手机电子书解决方案
  5. linux 下oracle启动步骤
  6. cat /proc/maps 进程内存映射【转】
  7. linux系统基础调优32条技巧
  8. Bootstrap3.0学习第十轮(下拉菜单、按钮组、按钮式下拉菜单)
  9. jquery基础总结
  10. sql server之数据库语句优化