本文主要是介绍如何以Jaccard Distance(JD)为基础,对Twitter的推文数据进行数据聚类。
理论基础
性能度量方式
聚类性能度量级聚类 即聚类有效性指标(vlidity index),该指标可以分为两类:外部指标(external index),将聚类结果与某个“参考模型”比较;内部指标(internal index),直接分析聚类结果,不利用外部参考模型,以下给出两个内部指标度量方式:Dunn指数(Dunn Index,DI)以及误差平方和(Sum Of The Squared Errors,SSE)。
- DI值
在介绍DI值计算前,先需要计算以下两个值:其中$dist(.,.)$用于计算两个样本间的距离;$diam(C)$为簇$C$内样本的最远距离;$d_{min} (C_i,C_j)$为簇$C_i$与簇$C_j$最近样本间的距离。
基于上述两个公式,DI值计算公式如下:若要满足“簇间相似度低,簇内相似度高”,DI应越大越好 - SSE值
SSE值计算公式如下:SSE值判断聚类好坏的核心思想是:随着k参数的增大,样本的划分会更加精细,即“簇内相似度会增高”,因此,SSE值将随k参数递减。但当k参数小于真实聚类数时,k的增加会大幅度增加“簇内相似”程度,所以SSE值下降率会减小,图像上对应的曲线即是SSE值将会随着k的增加趋于平缓。综上,最合适的k值最可能为拐点处的k值。
距离计算方式
在聚类计算中,距离计算函数$dsit(.,.)$需要满足以下四条性质:
- 非负性:$ dist(\vec x_i, \vec x_j) \geq 0 $
- 同一性:$ dist(\vec x_i, \vec x_j) = 0 $ 当且仅当$ \vec x_i = \vec x_j $
- 对称性:$ dist(\vec x_i, \vec x_j) = dist(\vec x_j, \vec x_i) $
- 直递性:$ dist(\vec x_i, \vec x_j) \leq dist(\vec x_i, \vec x_k) + dist(\vec x_k, \vec x_j) $
Jaccard Distance 定义
Jaccard系数(Jaccard Coefficient,JC)定义如下:
Jaccard距离定义如下:
其中A,B为两个任意的集合
可行性证明
由之前的JD定义可知,JD显然满足非负性、同一性、对称性这三种距离度量的基本性质,第四种性质“直递性”证明过程如下:
JD直递性证明:
假设有任意三个集合A,B,C,直递性要求有以下不等式成立:
利用反证法证明上式,即假设有不等式:
假设:
成立,则根据假设不等式,A,B,C三个集合也满足如下不等式:
对上述两个不等式进行迭代,则可以得到下式:
即有不等式:
显然上式不满足JD所具有的非负性条件,因此假设不成立,原不等式成立。
综合上述分析,JD直递性成立,满足四种距离计算的四种性质,JD可以作为距离度量方式
算法过程
原始K-Means算法可以分为两个步骤,即外层控制聚类迭代次数以及新旧聚类簇对比,即若聚类簇不再更新或达到最大迭代次数,则推出外层循环,程序结束;内层循环控制新聚类簇的计算。算法流程如图。
基于JD的K-Means算法与原始K-Means算法存在的差异为:
- 在基于JD的算法中,每轮迭代没有初始均值向量的再计算,则是直接计算新簇。
- 基于JD的K-Means算法没有样本向量化,而是直接使用样本集合的方式,以JD计算样本距离。
基于JD的K-Means算法计算新簇的流程如图
上图中完整的计算过程包括三层循环,整体逻辑为:遍历样本每一个元素,对每一个元素遍历原始聚类中的每一个簇,计算每一个簇与样本的距离,将与样本距离最小的簇作为该样本的新簇。具体相关变量意义见代码实现。
代码实现
1 |
|
实验结果
针对1231条,时间在2013年4-5月的Boston地区的推文,运行聚类算法,实验结果如下:
聚类结果中某一簇文件内容如下:
324772985196126208|dennis pen bombing oped lehane marathon
330771754412818433|confronted bombing bomber suspect lol alleged news texted fox marathon
326814744168235008|targeted racism yet balanced solidarity understands one marathon
327104038778859520|mile dont runwalk april thursday arizona ims forget honorary marathon
324887245570048000|bill running rodgers went champ beauty cant http time away take sportyou marathon
325132502140329984|caught bombing firefight offi police another suspect loose watertown one marathon
324190727141728256|take bombing terror marathon
58361655649779712|trying figure townim strugglin get got
324532692496551937|bombing keep calm marathon via carry
323884448380776448|gi know pm running comment sarah area info pas anyone schulz someone marathon
332630562231681026|pd bombing world suspect news abc fire didnt tell fbi marathon
333606268113649665|wake bombing come event wacky bay area even antiterror campaign marathon
上述簇文件基本是包含的Boston爆炸事件的相关内容,可以看出,聚簇效果还是较为理想的。
参考
[1] Arthur D, Vassilvitskii S. k-means++:the advantages of careful seeding[C] Eighteenth Acm-Siam Symposium on Discrete Algorithms, New Orleans, Louisiana. Society for Industrial and Applied Mathematics, 2007:1027-1035.
[2] https://github.com/findkim/Jaccard-K-Means
文中代码链接:https://github.com/zhaohuang123/sentiment-analysis/tree/master/blog/K-Means