【方法介绍】
怎么来表示两个规则描述的句子相近?
我们定义一种距离,两个句子 str1,str2,代表两个之间规则的描述;
str_com是str1和str2的最大公共子串,n1,n2,n0分别是str1,、str2、str_com的长度,
str1、str2的距离定义为:
dis(str1,str2) = 1 - 2*n0/(n1+n2);
这个距离是一个0到1之间的数,如果str1和str2完全相同则距离为0,完全不同则距离为1。
怎样来对句子聚类?
常用的聚类方法有 k-means 和 k-medoids,k-means需要样本特征的统一量化表示,句子文本不具备这种特征,但是我们定义了句子的相对距离,可以使用k_medoids进行聚类。
一般的k_medoids方法有两个问题:
1 初始中心点不好确定(对聚类结果造成较大影响)
2 分类的数量K无法确定
作者提出了一种改进k_medoids的聚类方法。
1 随机初始化K类的类中心。
2 对每一个样本按照离类别中心距离最近 对各样本进行分类
3 检查每个类,如果一个类的各样本与类中心样本的最大距离>0.5,则将离中心样本的类划分为一个新的类,K增加1,并停止检查
4 依次对各类进行类中心选举,选举以类距离最小为标准,如果某类的中心改变,停止其他类的中心选举。(类距离,类内所有样本离类中心的样本距离)
重复2~3~4过程直到类稳定(没有产生新类 且 类中心不发生改变)(终止条件也可以设为 类别数达到自设阈值 或 迭代数达到自设阈值)
改进点:
改进点为步骤3,当一类中某个样本与类别中心得距离超过阈值(比如0.5)时,该类中距离类别中心最远的样本从原类中裂开,成为一个单独的类。
这样K会随着阈值的不同而变化,。
【处理结果】
聚类结果:
一共1220条规则,用约150类划分了900条规则。
【代码及数据】
主要代码:(https://download.csdn.net/download/hzq20081121107/11445345)
数据:
disM.mat 预算距离矩阵
【其它方法调研】
常见方法:
向量空间模型(VSM )表示文本(文档,even句子)相似度,描述文本距离。
分类层次聚类DIANA: