机器学习入门(十一)聚类算法

——–韦访 20181118

1、概述

这一讲,我们来学习聚类算法。我们之前学习的算法中,数据都是有标签的,属于有监督学习,如果数据没有标签,那怎么办?这就属于无监督学习了,而聚类算法就是用来解决无标签数据的分类问题。这一讲,我们主要学习两个聚类算法:K-MEANS算法和DBSCAN算法。下面分别来讲。

2、K-MEANS概述

先来看K-MEANS算法的几个基本概念,

K值:K值就是要指定的簇数,比如要分成5簇,就将K值设为5。这个参数是我们要设定的,也是比较难设定的一个参数,因为我们通常情况下是不知道数据集应该分为几个簇的。

质心:簇的中心,取向量各维的平均即可。

距离的度量:常用欧几里得距离和余弦相似度来度量距离,一般训练前先将数据标准化。比如x特征的数据为(0.01,0.15, 0.37),而y特征的数据为(194, 364, 968),如果不对数据进行预处理,那么,x的特征都小到可以忽略不计了。所以一般都会将数据标准化后再训练。

优化目标:目标函数为《机器学习入门(十一)聚类算法》,其实就是计算样本点到质心的距离,距离谁近,就归为哪个簇。

3、K-MEANS工作流程

下面给出K-MEANS怎么工作的示意图,看完就明白了,原理很简单。

《机器学习入门(十一)聚类算法》

 

假设我们要对图a进行分类,分成两簇。

  1. 、图a就是原始的数据。
  2. 、图b随机生成两个质心。
  3. 、图c分别计算所有点到两个质心的距离,然后,离哪个质心近就归于哪类。
  4. 、图d根据图c的分类重新求出质心,并更新质心。
  5. 、图e再别计算所有点到两个质心的距离,然后,离哪个质心近就归于哪类。
  6. 、图f根据新的分类重新求出质心,并更新质心。

然后就是一直重复着更新质心、重新分类的操作,直至质心无法再更新,也就是质心固定了了。

4、K-MEANS优劣势

优势:

简单、快速。

缺点:

K值难确定、复杂度与样本数量和维度成正相关、很难发现任意形状的簇。\

5、K-MEANS可视化演示

国外的一个大神做了个博客,里面有一些算法的可视化演示实例,我们就来直观的看看K-MEANS算法是怎么进行聚类的。网址:https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

《机器学习入门(十一)聚类算法》

 找到如上图的地方,然后,点”Randomly”,我们随机生成质心吧。

《机器学习入门(十一)聚类算法》

 然后出现上图的几个例子,我们随便选择“Gaussian Mixture”吧,

《机器学习入门(十一)聚类算法》

 上图明显的有3个簇,那么我们就选择3个质心,即点击三次“Add Centroid”,得到如下图,

《机器学习入门(十一)聚类算法》

 然后点击“GO”开始训练。

《机器学习入门(十一)聚类算法》

点击几次以后,就可以看到分类好了,这个效果还是不错的。但是,因为我们的质心刚开始是随机生成的,如果遇到下面这种情况,效果就不见得那么好了。

《机器学习入门(十一)聚类算法》

如上图,如果两个质心一开始就挨得比较近,那么,我们分得的簇就可以是以下这种情况了,

《机器学习入门(十一)聚类算法》

也就是说,质心的分布会对我们的结果产生很大的影响。

再说我们上面说的K-MEANS的第三个缺点,“很难发现任意形状的簇”,我们选择“Smiley Face”这个数据集来训练,如下图,

《机器学习入门(十一)聚类算法》

 我们直观上看,应该是分成4个簇吧?外面一个大圆脸,两个眼睛,一个嘴巴,现在我们来试试,先随机生成4个质心,

《机器学习入门(十一)聚类算法》

训练完后,大概分成如下簇,

《机器学习入门(十一)聚类算法》

这就跟我们想要的结果差得很大了。我们接下来讲的DBSCAN算法就能很好的对这个笑脸分类。

6、DBSCAN概述

DBSCAN的全称是Density-Based Spatial Clustering of Applications with Noise(具有噪声的基于密度的聚类方法),先来说它的几个基本概念,

E邻域:给定对象半径为r内的区域称为该对象的E邻域,这个半径r是我们要设置的一个参数。

核心对象:如果给定对象E邻域内的样本点数大于等于MinPts,则称该对象为核心对象,这个MinPts也是我们要设置的参数。

直接密度可达:若点p在点q的E邻域内,且q是核心对象,则p-q是直接密度可达。

密度可达:若有一串样本点p1,p2…pn,如果对任意pi与pi-1直接密度可达,那么对象p0到对象pn密度可达,其实这个就是直接密度可达的“传播”。

密度相连:若p到q和k都是密度可达,则q和k密度相连。

边界点:属于一个类的非核心对象。

噪音点:不属于任何一个类簇的点,也就是不与任何核心对象密度可达。

《机器学习入门(十一)聚类算法》

现在用上图来解释上述基本概念,每个圆的半径为r,每个圆的区域就是该圆心点的E邻域,MinPts为4,以点A为例,在A点E邻域内的三个红点与A点直接密度可达。而B点和C点都不能作为核心对象,所以它们作为红点簇的边界点。N点跟谁都不是密度可达,所以是噪音点。

DBSCAN算法不需要指定簇的个数,但需要指定E邻域的半径r和E邻域内的样本点个数的阈值MinPts。这两个参数也不是好设置的,只能靠多试。

7、DBSCAN工作流程

下面用一组伪代码来说明DBSCAN算法的工作流程,

《机器学习入门(十一)聚类算法》

 

8、DBSCAN优劣势

优势:

不需要指定簇的个数

可以发现任意形状的簇

擅长找到离群点,用在检测异常点的任务效果不错

劣势:

处理高维数据有些困难,可以对数据做降维处理

参数难选择,而且参数对结果的影响很多

效率比较慢

9、DBSCAN可视化演示

演示地址跟上面的差不多,都是一个网站的:https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

《机器学习入门(十一)聚类算法》

为了跟K-MEANS算法做对比,我们选择“Smiley Face”数据集,

《机器学习入门(十一)聚类算法》

epsilon和minPoints参数是可调的,我们使用默认的来试试好了,点击“GO”即可。

《机器学习入门(十一)聚类算法》

训练完以后,分成上图4个簇,效果还不错,其他的实例我就不试了,建议大家自己去玩一下。

总结:

其实在sklearn中很容易使用这两个算法的,因为都封装好了,后面做实例中再写了,先继续下一个算法的学习。

 

 

如果您感觉本篇博客对您有帮助,请打开支付宝,领个红包支持一下,祝您扫到99元,谢谢~~

《机器学习入门(十一)聚类算法》

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/rookie_wei/article/details/84236962
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞