5分钟带你掌握机器学习---聚类(一)
聚类是我们在处理现实问题中时常会用到的模型算法之一。聚类处理的数据多是无标签,它还多用于其他机器学习算法的前驱过程。举个例子来说,我们现在的身份是服装店经理,现在我手里有很多衣服订单的数据,我想通过这些数据划分一下用户类型。这是,我们手中的就是无标签数据,我们要先通过聚类,将这么多衣服订单的数据分成几大组,然后人为定义每组的用户类型是什么,比如“新用户”、“回头客”等等。
上面我们只是做一个简单的引入,大家只需要有一个大体印象即可,接下来,我们正式走进聚类的世界。在学具体的聚类模型算法之前,我们要先学一些基础知识。
一.基础知识
1.1性能度量
我们可以通过性能度量来衡量聚类结果的优劣,还可以将一些性能度量作为优化目标也就是目标函数。接下来我们就来看看聚类的性能度量指标都有哪些。
我们先来思考一下,对于一组数据,我们期望得到什么样的聚类结果呢。应该是每一组内部很紧凑,组与组之间距离很远,这样的聚类结果很清晰明了。因此,我们在进行性能度量的时候,就是用到了,组内距离和组间距离,进行评估的。在这里,我们把“组”称为“簇‘。
聚类的性能度量指标有两大类,分别是”外部指标“和”内部指标“。
先来看”外部指标“,这里,我们是将”通过聚类算法得出的簇C“和”通过其他机器学习算法得出的簇C*“进行一个比较,比较的结果有四种,分别是:C与C*完全一致,C与C*完全不一致,有的数据在C但是不在C*中,有的数据在C*中但是不在C中。

假设我们手里有一堆等待聚类的数据(A,B,C),在前面,我们说过,要判断聚类结果的优劣,我们要看簇内距离和簇间距离,那我们需要计算距离,肯定得有两个量才能计算,这里我们要对这组数据进行配对:(A,B)(A,C)(B,C),现在的样本数是3,我们能配对3*2\2组。这里我们以(A,B)组为例来看,当A和B同时属于簇C和簇C*时,我们用SS表示这种情况;当A和B属于簇C*但是不属于簇C时,我们用SD表示;当A和B属于C但是不属于C*时,我们用DS表示;当A和B同时不属于C和C*时,用DD表示。
我们要分这四种情况,因为”外部指标“是由这四个量组成的。为了方便表示,我们令a=SS,b=SD,c=DS,d=DD,这时我们用JC系数、FM指数、RI指数作为聚类性能度量的外部指标。

RI=(a+b)/(a+b+c+d),JC=a/(a+b+c),FM=根号下{a/(a+b)*a/(a+c)},RI是最直观的 “总正确率”,越接近 1,聚类结果与真实标签的整体一致性越高。JC是排除 “无争议” 的 DD 后,关注 “有争议” 的部分。FM是平衡 “查准率” 和 “查全率”。
接下来我们来看聚类性能度量的”内部指标“。内部指标就是直接评价聚类结果的好坏,不借助其他机器学习的聚类结果,只关注算法聚类结果的簇内距离和簇间距离。

在确定内部指标之前,我们还是先看几个量。avg和diam是聚焦于簇内;dmin和dcen是聚焦于簇间。这里我们还是用(A,B,C)这组数据,我们配对完是:(A,B)(A,C)(B,C),这里我们用dist表示距离。avg是算簇内平均距离,我们将三组样本对的距离算完加起来再除以簇的样本个数。diam是算簇直径,也就是找出最大的簇内距离max[dist(A,B),dist(A,C),dist(B,C)]。dmin是算簇间最小距离,两个簇中各随机取一个样本,算他们之间的距离,取最大距离。dcen是算簇中心距离,选取两个簇中的中心点,算两个中心点之间的距离。
得到这四个量之后,我们将他们通过组合,成为聚类性能度量的内部指标。

DB指数,计算每个簇与其他所有簇的 “紧凑性 - 分离度比”,取最大值的平均,最终值越小,聚类效果越好。Dunn指数,与DB指数恰恰相反,用 “所有簇间分离度的最小值” 除以 “所有簇内紧凑性的最大值”,最终值越大,聚类效果越好。
这就是聚类的性能度量,下一章我们继续。
更多推荐
所有评论(0)