聚类参考资料

来源:互联网 发布:氪喷淘宝 编辑:程序博客网 时间:2024/05/21 07:50

一、聚类的定义

聚类的可操作定义可以表示如下:给定n个对象的表示,基于相似度的度量找到K个组,使得相同组中的对象之间的相似性高,而不同组中的对象之间的相似性较低

聚类算法可以大致分为两类:分层分式。层次聚类算法以聚集模式递归地发现嵌套集群(从其自己的集群中的每个数据点开始,并且将最相似的一组聚类连续地合并形成一个集群层次结构)或者以分裂(自上而下)模式(从所有数据点在一个集群中并递归地将每个集群分成更小的集群)

 

二、距离计算


•向量的范数定义:

向量的范数可以简单形象的理解为向量的长度,或者向量到零点的距离,或者相应的两个点之间的距离。

•向量的范数是一个函数||x||,满足非负性||x|| >= 0,齐次性||cx|| = |c| ||x|| ,三角不等式||x+y|| <= ||x||+ ||y||。

•常用的向量的范数:
L1范数:  ||x|| 为x向量各个元素绝对值之和。
L2范数:  ||x||为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数
Lp范数:  ||x||为x向量各个元素绝对值p次方和的1/p次方
L∞范数:  ||x||为x向量各个元素绝对值最大那个元素的绝对值,即:

2、距离

•闵可夫斯基距离(Minkowski Distance),闵氏距离不是一种距离,而是一组距离的定义。对应Lp范数,p为参数。

闵氏距离的定义:两个n维变量(或者两个n维空间点)x1(x11,x12,…,x1n)与 x2(x21,x22,…,x2n)间的闵可夫斯基距离定义为: 

其中p是一个变参数。

当p=1时,就是曼哈顿距离,

当p=2时,就是欧氏距离,

当p→∞时,就是切比雪夫距离,       

根据变参数的不同,闵氏距离可以表示一类的距离。 

 

欧式距离(对应L2范数):最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中。 n维空间中两个点x1(x11,x12,…,x1n)与 x2(x21,x22,…,x2n)间的欧氏距离:

也可以用表示成向量运算的形式:

曼哈顿距离:曼哈顿距离对应L1-范数,也就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。例如在平面上,坐标(x1, y1)的点P1与坐标(x2,y2)的点P2的曼哈顿距离为:,要注意的是,曼哈顿距离依赖座标系统的转度,而非系统在座标轴上的平移或映射。

从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(CityBlock distance)



切比雪夫距离:若二个向量或二个点x1和x2,其坐标分别为(x11,x12, x13, ... , x1n)和(x21, x22, x23, ... , x2n),则二者的切比雪夫距离为:d = max(|x1i - x2i|),i从1到n。对应L∞范数。

国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max(| x2-x1| , | y2-y1 | ) 步。有一种类似的一种距离度量方法叫切比雪夫距离。

 

 

三、K-means

1、NP-hard

参考资料一:

其中,NP是指非确定性多项式(non-deterministic polynomial,缩写NP)。所谓的非确定性是指,可用一定数量的运算去解决多项式时间内可解决的问题。NP 问题通俗来说是其解的正确性能够被“很容易检查”的问题,这里“很容易检查”指的是存在一个多项式检查算法。相应的,若NP中所有问题到某一个问题是图灵可归约的,则该问题为NP困难问题

例如,著名的推销员旅行问题(TravelSaleman Problem or TSP):假设一个推销员需要从香港出发,经过广州,北京,上海,…,等 n 个城市, 最后返回香港。 任意两个城市之间都有飞机直达,但票价不等。假设公司只给报销 C 元钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于 C?

推销员旅行问题显然是 NP 的。因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。但是,要想知道一条总路费小于 C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排! 这将是个天文数字。

旅行推销员问题是数图论中最著名的问题之一,即“已给一个n个点的完全图,每条边都有一个长度,求总长度最短的经过每个顶点正好一次的封闭回路”。Edmonds,Cook和Karp等人发现,这批难题有一个值得注意的性质,对其中一个问题存在有效算法时,每个问题都会有有效算法。

迄今为止,这类问题中没有一个找到有效算法。倾向于接受NP完全问题(NP-Complet或NPC)和NP难题(NP-Hard或NPH)不存在有效算法这一猜想,认为这类问题的大型实例不能用精确算法求解,必须寻求这类问题的有效的近似算法

此类问题中,经典的还有子集和问题;Hamilton回路问题;最大团问题

参考资料二(见附录一):

 

2、贪心算法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

思想

贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止

 

3、P204西瓜数据集结果示例


代码还可以参考:

https://segmentfault.com/q/1010000007634688

四、学习向量量化

暂无

五、高斯混合聚类

1、协方差矩阵

假设 X 是以 n 个标量随机变量组成的列向量,并且μk 是其第k个元素的期望值,即,μk= E[X(k)];协方差矩阵然后被定义为:

Σ= 

  =

矩阵中的第(i,j)个元素是xi与xj的协方差。这个概念是对于标量随机变量方差的一般化推广。

 

2、拉格朗日函数

 

 

六、层次聚类

试析AGNES算法使用最小距离和最大距离的区别。

最大距离可以认为是所有类别先生成一个能包围所有类内样本的最小圆,然后所有圆同时慢慢扩大相同的半径,哪个类圆能完全包围另一个类则停止,并合并这两个类。由于此时的圆已经包含另一个类的全部样本,所以称为全连接。 
最小距离则是扩大时遇到第一个非自己类的点就停止,并合并这两个类。由于此时的圆只包含另一个类的一个点,所以称为单连接

 

 

 

 

 

附录一:

NP-Hard

看相关算法的paper的时候,经常会出现NP-Hard这个词。本博主也不是纯数学系出身,对于这么高深的问题自然没有特别深入独到的理解。但是本博主的习惯就是看到一个东西老在眼前晃来晃去但自己还不是很明白,就有强迫症一定要搞明白这到底是个什么玩意。so,咱们就来看看这个NP-Hard问题,怎么用最简单的方式去了解。

1.世界七大数学难题之首

2000年,美国克莱数学研究所公布了世界七大数学难题,又称千禧年大奖难题。其中P与NP问题被列为这七大世界难题之首,从而大大激发了对这一问题的研究热情。

普林斯顿大学计算机系楼将二进制代码表述的“P=NP?”问题刻进顶楼西面的砖头上。如果证明了P=NP,砖头可以很方便的换成表示“P=NP!”。 
康奈尔大学的Hubert Chen博士提供了这个玩笑式的P不等于NP的证明: 
反证法。设P = NP。令y为一个P = NP的证明。证明y可以用一个合格的计算机科学家在多项式时间内验证,我们认定这样的科学家的存在性为真。但是,因为P = NP,该证明y可以在多项式时间内由这样的科学家发现。但是这样的发现还没有发生(虽然这样的科学家试图发现这样的一个证明),我们得到了矛盾。(上面内容来自wiki百科)

难怪本博主之前对这个问题理解不深刻。看到上面的资料宝宝放心了,说明宝宝智商还是正常的。

2.算法复杂度

要计算或解决一个问题,该问题通常有一个大小规模,用n表示。例如,若分析计算一个二进制数,该数有多少位,这个位就是其大小规模。再比如,从n个数里面找出最大的那个数,这个n就是该问题的规模大小。怎么找?我们要比较n-1次才能得到结果,这个n-1就是所花的时间,也就是时间复杂度。再比如,将n个数按从大至小排序,n是其规模大小,若是我们按这样的方法:第一次从n个数里找最大,第二次从n-1个数里找最大,以此类推,需要的比较次数就是n(n-1)/2,称我们所用的方法为算法,称n(n-1)/2为该算法的时间复杂度。对于时间复杂度,当n足够大时,我们只注重最高次方的那一项,其他各项可以忽略,另外,其常数系数也不重要,所以,n(n-1)/2我们只重视n的平方这一项了,记为O(n的平方),这就是该算法对该问题的时间复杂度的专业表示。 
上面这段描述,估计大家都能看懂,就不在啰嗦了。重点在下面,前方高能预警,大家注意了。

所有形如a∗nk+b∗n(k−1)+c∗n(k−2)+⋯都可记为O(nk),nk为n的k次方,*自然就是乘法了,这样的复杂度为多项式(polynomial)时间复杂度。若是时间复杂度为kn,k为大于1的常数,或者n!的时间复杂度,或者比n!更大的时间复杂度 ,就称为指数型时间复杂度。显然,当n足够大时,指数型时间比多项式要大得多的多。

3.P问题与NP(Non-deterministicPolynomial )问题

所有能用多项式时间算法计算得到结果的问题,称为多项式问题,也就是P,所有绝对不可能用多项式时间求解的可解问题,称为指数型问题。当然,还有一类问题属于不可解问题,也就是说你无论花多少时间也不能得到解答。

有这样一类问题,假使你得到了问题的解,我要验证你的解是否正确,我验证所花的时间是多项式,至于求解本身所花的时间是否是多项式我不管,可能有多项式算法,可能没有,也可能是不知道,这类问题称为NP问题。 
NP概念的奥妙在于,它躲开了求解到底需要 多少时间这样的问题,而仅仅只是强调验证需要多少时间,从而为P与NP这一千年难题的产生埋下了伏笔。显然,P肯定是NP,因为你既然能用多项式求解,就肯定能用多项式验证(难不成我再算一遍!),但NP是否是P谁也确定不了。另外,目前已经很明确的指数型问题也肯定不是NP。

用通俗的话来解释,NP问题就是其解的正确性很容易被检验出来,这里的很容易检验指的是存在一个多项式算法。

4.最具代表性的NP-Hard问题:TSP

售货员旅行问题 (travelingsalesman problem),是最具有代表性的NP问题之一。假设一个推销员需要从香港出发,经过广州,北京,上海,…,等 n 个城市, 最后返回香港。 任意两个城市之间都有飞机直达,但票价不等。现在假设公司只给报销 C 块钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于 C? 
推销员旅行问题显然是 NP 的。因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。但是,要想知道一条总路费小于 C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排! 这将是个天文数字。 
这个天文数字到底有多大?目前的方法接近一个一个的排着试,还没有找到更好可以寻得最短路径的方法。对七个城而言,共有 6!=720 个排法,还比较简单;,但若有 20 个城,则排法就有 19! 种。因故在排列组合里 n! 写起来轻松。但 1.21∗1017 是一个大得不得了的数字。若每秒钟排一次,要排 3.84∗109 年(一年约为 3.15∗107 秒),即使使用计算器,每秒排一百万次(不容易做到)也得重做三千年才能找到答案。「生也有涯,知也无涯」,想不到区区二十个城,要三十个世纪才能找到答案。

 

 

 

附录二:

K-Means的细节问题

1、K值怎么定?我怎么知道应该几类?
答:这个真的没有确定的做法,分几类主要取决于个人的经验与感觉,通常的做法是多尝试几个K值,看分成几类的结果更好解释,更符合分析目的等。或者可以把各种K值算出的SSE做比较,取最小的SSE的K值。

2、初始的K个质心怎么选?
答:最常用的方法是随机选,初始质心的选取对最终聚类结果有影响,因此算法一定要多执行几次,哪个结果更reasonable,就用哪个结果。 当然也有一些优化的方法,第一种是选择彼此距离最远的点,具体来说就是先选第一个点,然后选离第一个点最远的当第二个点,然后选第三个点,第三个点到第一、第二两点的距离之和最小,以此类推。第二种是先根据其他聚类算法(如层次聚类)得到聚类结果,从结果中每个分类选一个点。

3、K-Means会不会陷入一直选质心的过程,永远停不下来?
答:不会,有数学证明K-Means一定会收敛,大致思路是利用SSE的概念(也就是误差平方和),即每个点到自身所归属质心的距离的平方和,这个平方和是一个函数,然后能够证明这个函数是可以最终收敛的函数。

4、判断每个点归属哪个质心的距离怎么算?
答:这个问题必须不得不提一下数学了……
第一种,欧几里德距离(欧几里德这位爷还是很厉害的,《几何原本》被称为古希腊数学的高峰,就是用5个公理推导出了整个平面几何的结论),这个距离就是平时我们理解的距离,如果是两个平面上的点,也就是(X1,Y1),和(X2,Y2),那这俩点距离是多少初中生都会,就是√( (x1-x2)^2+(y1-y2)^2 ,如果是三维空间中呢?√((x1-x2)^2+(y1-y2)^2+(z1-z2)^2 ;推广到高维空间公式就以此类推。可以看出 ,欧几里德距离真的是数学加减乘除算出来的距离,因此这就是只能用于连续型变量的原因。
第二种,余弦相似度,余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。下图表示余弦相似度的余弦是哪个角的余弦,A,B是三维空间中的两个向量,这两个点与三维空间原点连线形成的角,如果角度越小,说明这两个向量在方向上越接近,在聚类时就归成一类:

 

看一个例子(也许不太恰当):歌手大赛,三个评委给三个歌手打分,第一个评委的打分(10,8,9) 第二个评委的打分(4,3,2),第三个评委的打分(8,9,10)
如果采用余弦相似度来看每个评委的差异,虽然每个评委对同一个选手的评分不一样,但第一、第二两个评委对这四位歌手实力的排序是一样的,只是第二个评委对满分有更高的评判标准,说明第一、第二个评委对音乐的品味上是一致的。
因此,用余弦相似度来看,第一、第二个评委为一类人,第三个评委为另外一类。
如果采用欧氏距离, 第一和第三个评委的欧氏距离更近,就分成一类人了,但其实不太合理,因为他们对于四位选手的排名都是完全颠倒的。
总之,如果注重数值本身的差异,就应该用欧氏距离,如果注重的是上例中的这种的差异(我概括不出来到底是一种什么差异……),就要用余弦相似度来计算。
还有其他的一些计算距离的方法,但是都是欧氏距离和余弦相似度的衍生,简单罗列如下:明可夫斯基距离、切比雪夫距离、曼哈顿距离、马哈拉诺比斯距离、调整后的余弦相似度、Jaccard相似系数……

5、还有一个重要的问题是,大家的单位要一致!
比如X的单位是米,Y也是米,那么距离算出来的单位还是米,是有意义的
但是如果X是米,Y是吨,用距离公式计算就会出现“米的平方”加上“吨的平方”再开平方,最后算出的东西没有数学意义,这就有问题了。
还有,即使X和Y单位一致,但是如果数据中X整体都比较小,比如都是1到10之间的数,Y很大,比如都是1000以上的数,那么,在计算距离的时候Y起到的作用就比X大很多,X对于距离的影响几乎可以忽略,这也有问题。
因此,如果K-Means聚类中选择欧几里德距离计算距离,数据集又出现了上面所述的情况,就一定要进行数据的标准化(normalization),即将数据按比例缩放,使之落入一个小的特定区间。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行计算和比较。
标准化方法最常用的有两种:

·        min-max标准化(离差标准化):对原始数据进行线性变换,是结果落到【0,1】区间,转换方法为 X'=(X-min)/(max-min),其中max为样本数据最大值,min为样本数据最小值。

·        z-score标准化(标准差标准化):处理后的数据符合标准正态分布(均值为0,方差为1),转换公式:X减去均值,再除以标准差

6、关于离群值?
答:离群值就是远离整体的,非常异常、非常特殊的数据点,在聚类之前应该将这些“极大”“极小”之类的离群数据都去掉,否则会对于聚类的结果有影响。但是,离群值往往自身就很有分析的价值,可以把离群值单独作为一类来分析。

7、用SPSS作出的K-Means聚类结果,包含ANOVA(单因素方差分析),是什么意思?
答:答简单说就是判断用于聚类的变量是否对于聚类结果有贡献,方差分析检验结果越显著的变量,说明对聚类结果越有影响。对于不显著的变量,可以考虑从模型中剔除。 

补充

其实我们也可以用EM算法来解释K-means算法的学习过程(如果还不知道EM算法是什么,可以翻一下我关于EM算法的博客)。我们的目的就是将样本分为k个类,其实说白了就是求一个样本的隐含类别,然后用隐含类别将x归类。由于我们事先不知道类别y,那么首先我们可以对每个样例假定一个y。

E-step:将样本分配到距离最近的聚类中心所属的簇,这相当于对隐含变量y进行求解。

M-step:更新每个簇的吧 聚类中心,使得p(x,c)最大。

 

附录三:

先验分布

它是总体分布参数θ的一个概率分布贝叶斯学派的根本观点,是认为在关于θ的任何统计推断问题中,除了使用样本X所提供的信息外,还必须对θ规定一个先验 分布,它是在进行推断时不可或缺的一个要素。贝叶斯学派把先验分布解释为在抽样前就有的关于θ的先验信息的概率表述,先验分布不必有客观的依据,它可以部分地或完全地基于主观信念。例如,某甲怀疑自己患有一种疾病A,在就诊时医生对他测了诸如体温、血压等指标,其结果构成样本X。引进参数θ:有病时,θ=1;无病时,θ=0。X的分布取决于θ是0还是1,因而知道了X有助于推断θ是否为1。按传统(频率)学派的观点,医生诊断时,只使用X提供的信息;而按贝叶斯学派观点,则认为只有在规定了一个介于0与1之间的数p作为事件{θ=1}的先验概率时,才能对甲是否有病(即θ是否为1)进行推断。p这个数刻画了本问题的先验分布,且可解释为疾病A的发病率。先验分布的规定对推断结果有影响,如在此例中,若疾病A的发病率很小,医生将倾向于只有在样本X显示出很强的证据时,才诊断甲有病。在这里先验分布的使用看来是合理的,但贝叶斯学派并不是基于“p是发病率”这样一个解释而使用它的,事实上即使对本病的发病率毫无所知,也必须规定这样一个p,否则问题就无法求解。

 

附录四:

极大似然估计






原创粉丝点击