您的位置:首页 > 其它

王小草【机器学习】笔记--无监督算法之聚类

2016-12-08 16:48 936 查看
标签(空格分隔): 王小草机器学习笔记

1. 聚类的概述

存在大量未标注的数据集,即只有特征,没有标签的数据。

根据这些特征数据计算样本点之间的相似性。

根据相似性将数据划分到多个类别中。

使得,同一个类别内的数据相似度大,类别之间的数据相似度小。

2. 相似性的度量方法

2.1 欧式距离

欧氏距离指的是在任何维度的空间内,两点之间的直线距离。距离越大,相似度越小,距离越小,相似度越大。公式如下:



2.2 曼哈顿距离

曼哈顿距离(Manhattan DistanceCity)也叫街区距离(Block Distance)。两点之间的距离是直角三角形的两条边长和。



国外一般是分一个一个街区的,要想从街区的一角走到另一角,不能直接穿过,必须沿着街区两边的道路走。



所以上图中两点的曼哈顿距离是:

|x1-w1|+|x2-w2|

2.3 汉明距离Hamming Distance

假设有两组数据分别是两个用户在淘宝上买过的东西,如下图,假设1-17是17件商品,如果买了就在该用户下标记为1,没买的标记为0.根据这两组数据比较AB两个用户在购物行为上的相似性。

汉明距离的做法是,如果AB都没有买或都买了,表示他们行为一致,距离为0,相似度高;如果他们的行为不同,那么在该商品种类下距离为1,最后将17件商品对应的距离相加(也就是把1相加),求和的结果就是汉明距离



2.4 皮而逊相关系数

Pearson相关系数是用来衡量两个数据集合是否在一条线上面。

Pearsion相关系数的范围是[-1,1],如果完全正相关则为1,完全负相关则为-1,完全不先关则为0.



pearsion相关系数在回归中应用普遍,比如在建立回归模型之前,需要先计算各个自变量与应变量之间的相关度,如果相关度小,则应该讲该自变量从模型中去掉。另外,也有必要计算自变量之间的两两相关性,如果自变量之间存在相关性大的变量,那么非常有必要将其中一个剔除或者使用主成分分析PCA进行特征降维,因为线性回归的假设之一是自变量都是互相独立的,如果有自变量先关则会导致共线性,影响模型的质量与预测的准确度。

2.5 余弦相似度

通过计算两个向量的夹角余弦值来评估他们的相似度。因为我们认为夹角如果越大则相距越远,夹角小则距离近,余弦值越接近1。

计算余弦角的公式:



假设向量a、b的坐标分别为(x1,y1)、(x2,y2)则余弦相似度为:



设向量 A = (A1,A2,…,An),B = (B1,B2,…,Bn) 。推广到多维:



皮尔逊先关系数与预先相似度的关系:

相关系数即将x,y坐标向量各自平移到原点后的夹角余弦。

这即解释了为何文档间求距离使用夹角余弦,因为这一物理量表征了文档去均值化后的随机向量间的相关系数。

文档的去均值就是将计算文档的tf-idf值。

然后再将tf-idf来做余弦相似性。

2.6 杰卡德相似系数

Jaccard similarity coefficient

两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。杰卡德相似系数是衡量两个集合相似度的一种指标。



假设样本A和样本B是两个n维向量,而且所有维度的取值都是0或1。例如,A(0,1,1,0)和B(1,0,1,1)。我们将样本看成一个集合,1表示集合包含该元素,0表示集合不包含该元素。

p:样本A与B都是1的维度的个数

q:样本A是1而B是0的维度的个数

r:样本A是0而B是1的维度的个数

s:样本A与B都是0的维度的个数

那么样本A与B的杰卡德相似系数可以表示为:



此处分母之所以不加s的原因在于:

对于杰卡德相似系数或杰卡德距离来说,它处理的都是非对称二元变量。非对称的意思是指状态的两个输出不是同等重要的,例如,疾病检查的阳性和阴性结果。

按照惯例,我们将比较重要的输出结果,通常也是出现几率较小的结果编码为1(例如HIV阳性),而将另一种结果编码为0(例如HIV阴性)。给定两个非对称二元变量,两个都取1的情况(正匹配)认为比两个都取0的情况(负匹配)更有意义。负匹配的数量s认为是不重要的,因此在计算时忽略。

杰卡德相似度算法没有考虑向量中潜在数值的大小,而是简单的处理为0和1,不过,做了这样的处理之后,杰卡德方法的计算效率肯定是比较高的,毕竟只需要做集合操作。

2.7 相对熵

相对熵也叫K-L距离,计算公式如下:



2.8 Hellinger距离

计算过程如下:



该距离满足三角不等式,是对称,非负距离

2.9 基于密度的相似性

Density-based methods define similarity as the distance

between derived density “bubbles” (hyper-spheres).



3. K-means聚类的过程与步骤

给定一个有N个对象的数据集,构造数据的K各簇。k<=n。满足下列条件:

1.每个簇至少包含一个对象

2.每个对象属于且仅属于一个簇

3.将满足上述条件的K个簇称作一个合理的划分。

基本思想:

对于给定的类别数目k,首先给出初始的划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。

3.1 k-means算法基本步骤

The three-step k-means methodology is given

1.确定输入样本

假定输入样本为S=x1, x2, x3,…,xm

2.选择初始的k个类别中心,μ1, μ2, μ3,…,μk

3.对每个样本xi,都与各个类别中心求相似性,然后将它标记为与它相似度最高的那个类别中心所在的类别。即:



4.在新的类别中选出一个新的类别中心(该类中所有样本的均值)



5.不断重复3,4炼骨,直到类别中心的变化小于某个阀值或者满足终止条件为止。完成聚类过程。

如下图,就是聚类的整个过程:



3.2 对K-means的思考

如何选择初始均值?

初始均值可以随机选择。但是万一选择不好,也可能影响之后的所有结果。

比如下图,要对左图分成4个类,非常明显的4个分布点。但是如果初始的均值选成了右图那样,最后聚类的结果完全不是我们想要的结果



所以初始均值是敏感的。

那么如何选择初始均值呢?

假设k=4

首先随机选择一个点作为第一个初始中心。

然后求其他所有样本点到这个中心的距离,用距离作为概率的权重,再随机得在样本中去选择第二中心点。

接着对剩下的样本再对现有的2个中心点求距离取出最短距离,以这个距离作为概率的权重,再随机选择第三个中心点。

同理,选出第4个中心点。

于是,4个初始的中心点都选好了。可以继续去做正常的聚类了。

这个过程我们叫K+means++

中心一定要用均值选吗?

比如说1,2,3,4,100的均值是22,但很显然22来当聚类中心有点牵强,因为它离大多数的点都比较远,100可能是一个噪声。所以选择 中位数3更为妥当。

这种聚类方法叫做k-Mediods聚类(k-中值距离)

在实际应用中具体问题具体分析。

关于终止条件的指标可以是?

迭代次数/簇中心变化率/最小平方误差MSE

关于如何选择k?

• Subject-matter knowledge (There

are most likely five groups.)

• Convenience (It is convenient to

market to three to four groups.)

• Constraints (You have six products

and need six segments.)

• Arbitrarily (Always pick 20.)

• Based on the data (Ward’s method)

3.3 K-means的公式解释

记K个簇中心为μ1,μ2,μ3…,μk,

每个簇数目为N1,N2,..Nk

使用平方误差作为目标函数:



对每个簇中,求每个样本到中心的距离的平方求和,然后将每个簇的误差相加。

该函数是关于μ1,μ2,μ3…,μk的凸函数,其驻点为:



所以是对目标函数的梯度下降。

如果对所有样本求梯度下降就是BGD

随机得对若干个样本做梯度下降就是随机下降法SGD.

将以上两者结合就是Mini-batch K-means算法。

根据上述目标函数,另外一个更深入的重点

其实对每一个簇,有一个前提假设:所有样本服从高斯分布。

如果将目标函数中的(xi-μi)^2换成绝对值|xi-μi|,那就是上面提到过的k-Mediods聚类

3.4K-means聚类方法的总结

优点

1.解决聚类问题的一种经典算法,简单,快速

2.对处理大数据集,该算法保持可伸缩性和高效率

3.当簇近似为高斯分布,它的效果是较好的

缺点:

1.在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用

2.必须事先给出k,而且对初值敏感,对于不同的初始值,可能会导致不同的结果。

3.不适用于发现非凸形状的簇或者大小差别很大的簇

4.对噪声和孤立点数据敏感

k-means聚类算法可作为其他聚类算法的基础算法,如谱聚类。

4.其他聚类算法

4.1 Canopy算法

虽然Canopy算法可以划归为聚类算法,但更多的可以使用它做空间索引,其时空复杂度都很出色,算法描述如下:

对于给定样本x1,x2…,xm;给定先验值r1,r2(r1< r2)

x1,x2…,xm形成一个列表L;同时构造一个空列表C。

随机选择L中的样本c,计算了Lz中样本xj与c的距离dj

若dj

4.2 层次聚类方法

层次聚类方法对给定的数据集进行层次分解,直到某种条件满足为止。具体可以分为两类:

凝聚的层次聚类AGNES

一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到某个终结条件被满足。

分裂的层次聚类DIANA

采用自顶向下的策略,它首先将所有对象置于一个簇中,然后逐渐细分为越来越小的簇,直到到达了某个终结条件。



4.3 密度聚类法

密度聚类的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中。

基于距离的聚类只能发现“类圆形”的聚类(即高斯分布的假设),而密度聚类可以发现任意形状,并且对噪声数据不敏感。

但是计算密度单元的计算复杂度大,需要建立空间索引来降低计算量。

这里主要介绍两种密度聚类方法:DBSCAN和密度最大值法

4.3.1DBSCAN算法

全称:Densiti-Based Spatial Clustering of Applications with Noise

DBSCAN的若干概念:

对象的ε-邻域:给定对象在半径ε内的区域。

核心对象:对于给定的数目m,如果一个对象的ε-邻域至少包含m个对象,则称该对象为核心对象。

直接密度可达:给定一个对象集合D,如果p是在q的ε邻域内,而q是一个核心对象,我们说对象p从对象q出发是直接密度可达的。

密度可达:如果p直接密度可达p1,p1直接密度可达q,则说q是从对象p关于ε和m的密度可达。

密度相连:如果对象o与p,o与q都是密度可达,则说p和q室密度相连。

:一个基于密度的簇是最大的密度相连对象的集合。

噪声:不包含在任何簇中的对象称为噪声。



DBSCAN算法流程:

1.如果一个点p的ε-邻域包含多于m个对象,则创建一个p作为核心对象的新簇;

2.寻找并合并核心对象直接密度可达的对象;

3.没有新点可以更新簇时,算法结束

由上述算法可知:

每个簇至少包含一个核心对象;

非核心对象可以是簇的一部分,构成了簇的边缘。

包含过少对象的簇被认为是噪声

例子:

以下分别是m为5,ε=25,30,40的时候的聚类



4.3.2密度最大值聚类

密度最大值聚类是一种简洁优美的聚类算法,可以识别各种形状的类簇,并且参数很容易确定。

给定一个r值,对每个样本点xi,求出其以r为半径的圆内包含了多少个样本点,样本点的个数记为ρi,表示以xi的密度。于是我们可以求出ρ1,ρ2…ρm。

再对每个样本点,比如现在以x1为例。找出一堆离它距离比较近的点,比如x2,x4,x6,x7.

这4个点分别有自己的密度ρ2=6,ρ4=8,ρ6=4,ρ7=7.

假设ρ1=5,分别把ρ1与以上四个ρ值作比较,留下密度比自己大的样本点,所以剩下的是ρ2=6,ρ4=8,ρ7=7。

然后再求出x1分别到以上三个点的距离,分别是d2,d4,d7,选出距离最小的那个值,比如是d4,这个最小的距离我们记做δ1,即高局部密度点距离。

现在我们为x1求出了两个值:(ρ1,δ1)。

以此类推,所有的样本点xi都可以求出(ρi,δi)

想想,如果一个点的ρ和δ都很大,那么说明这个点的密度很大,并且密度比它大且离它最近的那个样本点距离它也比较远。也就说它们两可以自成一个类,彼此密度都很大,且距离也比较远。

如果一个点的ρ很小δ却很大,则说明它的密度很小,且离其他的大密度点也比较远,说明它是一个噪声!

簇中心的识别:那些有着比较大的局部密度ρi和很大的高密度距离的点被认为是簇的中心。

确定簇中心之后,其他点按照距离已知中心簇的中心最近进行分类。

(也可以按照密度可达方法进行分类)

举个例子:

左图是所有样本点在二维空间的分布,右图是以ρ为横坐标,以δ为纵坐标绘制的决策图。可以看到,1和10两个点的ρδ都比较大,作为簇中心、而26.27.28三个点的δ也比较大,但是ρ比较小,所以是噪声。



5.谱聚类

5.1 谱聚类的过程

(据说谱聚类是使用起来比较简单但是解释起来比较困难的。。。)

假设我们有m个样本(a1,a2,…,am),每个样本的特征维度是n维。

现在将每个样本(ai,aj)根据特征两两求相似性wij。于是就有了m*m维的相似性矩阵W。

因为(ai,aj)的相似性 = (aj,ai)的相似性,所以这个相似性矩阵W是一个对称矩阵。

相似性矩阵W的的每一行都是ai与a1,a2,..am的相似性,将每行的值求和,每个样本点ai都会得到一个值di.

将di(d1,d2,…,dn)放在n*n矩阵的对角线上,形成了一个n*n的对角矩阵D。

好了现在我们有两个矩阵:对角矩阵D,与对称矩阵W

定义一个L矩阵:L=D-W

这个L的来头非常大,它就是拉普拉斯矩阵。

对这个L矩阵提取特征值与特征向量。

特征值:λ1,λ2,…,λm

特征向量:u1,u2,…,um

可以证明L是一个半正定矩阵,所以最小特征值肯定是0.(为什么是半正定,为什么半正定就有特征值0呢?这个不放在这里细讲先)

将所有特征值由小到大排列,取出最小的前k个特征值。将这些特征值对应的特征矩阵组合在一起。

因为一个特征矩阵ui是m*1维度。所有k个特征矩阵组合在一起就形成了m*k维度的大矩阵U。

U的行数是m,对应的是m个样本,列数为k,对应的是k个指标。

这k个指标可以看成是k个特征。

于是我们有了针对m个样本的k维特征的这样一组数据。直接将这组数据用于做k-means聚类即可。(其实就是将原来的特征用转换后的新的特征代替了)。

以上就是谱聚类的具体过程。

对了还要说一下相似度的计算,也就是W矩阵是咋滴来的。

有这样几个方法,一般都是用高斯相似性:

距离越大,相似度越小



关于高斯相似性的东东在“王小草【机器学习】笔记–支持向量机”一文的核函数处有解释。

6.聚类的衡量指标

6.1 在有标记的样本数据下

6.1.1 准确性Cluster Accuracy(CA)

CA计算 聚类正确的百分比;CA越大证明聚类效果越好.

其计算公式为:



CA也叫purity。

purity方法的优势是方便计算,值在0~1之间,完全错误的聚类方法值为0,完全正确的方法值为1。同时,purity方法的缺点也很明显它无法对退化的聚类方法给出正确的评价,设想如果聚类算法把每篇文档单独聚成一类,那么算法认为所有文档都被正确分类,那么purity值为1!而这显然不是想要的结果。

6.1.2 RI

RI的公式表示为:



其中TP是指应该被聚在一类的两个样本被正确分类了,TN是只不应该被聚在一类的两个文档被正确分开了,FP是不应该放在一类的文档被错误的放在了一类,FN只不应该分开的文档被错误的分开了。

6.1.3 F-meature

这是基于上述RI方法衍生出的一个方法,



6.1.4 均一性Homogeneity

均一性是指一个簇只能包含一个类别的样本,即只对一个簇中的样本做考虑,至于这个类别是否还被归到了其他的簇中,它不管。

均一性可以通过以下公式求得:



假设我们是已经知道这批聚类数据的真实类别的,聚类之后,在同一个簇中的类别,如果只有一个,那么这个簇的经验为0jj,均一性为1, 如果有大于1个类别,那么计算该类别下的簇的条件经验熵,如果条件经验熵越大,则均一性就越小。

均一性在0-1之间。

6.1.5 完整性Completeness

完整性是指同类别样本被归类到相同的簇中,至于这个簇中还有没有其他类别的样本,它不管。

完整性的计算公式如下:



假设我们是已经知道这批聚类数据的真实类别的,聚类之后,如果同一个类的样本的确被全部分在了同一个簇中,那么这个类的经验熵就是0,完整性就是1,;反之,如果同一类的样本被分到了不同的簇中,H(K|C)的条件经验熵就会增大,从而完整性就降低了。

完整性在0-1之间。

6.1.6 V-meature

单一地考虑均一性与完整性两个指标都是片面的。

通过以下公式我们将均一性与完整性的加权平均:



其实V-measure与F-measure是一样的,前者用的是经验熵,后者用的是频率。

6.1.7 ARI

Adjusted Rand index(调整兰德指数)(ARI)

假设数据集S共有N个元素,我们对N个元素去做聚类。

用不同的聚类方法得到两个不同的聚类结果:



Xi,Yi分别为各自的簇。

(当然,如果事先知道样本的标签就更好,其中一个结果就是真实的结果,另一个是聚类得到的结果)

ai,bi分别为对应簇中的元素个数:



nij表示Xi和Yi两个簇中相同的元素的个数:



将以上关系表示成如下表格:



那么我们最终要求的ARI指数的计算公式为:



ARI取值范围为[−1,1],值越大意味着聚类结果与真实情况越吻合。从广义的角度来讲,ARI衡量的是两个数据分布的吻合程度。

其实ARI是由AR转变优化而来的,可将以上公式简写为:



6.1.8 AMI

AMI使用与ARI相同的几号,但是用的是信息熵。

互信息为:



正则化的互信息为



X服从超几何分布,则互信息的期望是:



借鉴ARI,则AMI为:



6.2 在没有标记样本的情况下

6.2.1 Compactness(紧密性)(CP)

公式如下:



CP计算 每一个类 各点到聚类中心的平均距离

CP越低意味着类内聚类距离越近

缺点:没有考虑类间效果

6.2.2 Separation(间隔性)(SP)

公式如下:



SP计算 各聚类中心两两之间平均距离

SP越高意味类间聚类距离越远

缺点:没有考虑类内效果

6.2.3 Davies-Bouldin Index(戴维森堡丁指数)(分类适确性指标)(DB)(DBI)

公式如下:



DB计算 任意两类别的类内距离平均距离(CP)之和除以两聚类中心距离 求最大值

DB越小意味着类内距离越小 同时类间距离越大

缺点:因使用欧式距离 所以对于环状分布 聚类评测很差

6.2.4 Dunn Validity Index (邓恩指数)(DVI)

公式如下:



DVI计算 任意两个簇元素的最短距离(类间)除以任意簇中的最大距离(类内)

DVI越大意味着类间距离越大 同时类内距离越小

缺点:对离散点的聚类测评很高、对环状分布测评效果差

6.2.5 轮廓系数Silhouette

与以上评价指标不同,轮廓系数是不需要标记样本的。因为聚类本身是无监督的,要寻找有标记的样本比较困难。

样本i到同簇其他样本的平均距离为ai;

样本i到最近的其他簇的所有样本的平均距离为bi;

于是轮廓系数的计算公式为:



所有样本轮廓系数的平均值称为聚类结果的轮廓系数。

轮廓系数越接近于1则聚类效果越好!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: