编程集体智慧的第3章:谈论文档分组

发布时间:2019-01-29 14:36:33   编辑:admin浏览人次:80

如下图所示,分层分组算法用文字书写。每次连接两个最近的组(仅剩下一个组),直到它无法连接。
算法的第一次迭代的复杂度是O(n 2),因为我们需要计算两组之间的距离。
如果此步骤的结果被存储在缓存中,下一次迭代将只需要计算E的正2倍(例如,在前面的图中,(A,B)和C,d,该距离算一算吧。)另一个距离已经保存。),从第二次迭代到最终分组需要总(n≥2)+(n≥3)+。
+ 1 =(N-1),因为第(n-2)/ 2倍的距离计算的,是所述复杂性为O(n 2)。
总的来说,算法的复杂性是O(n 2)。
空间复杂度为O(n 2),因为我们需要保存两组之间的距离。
该算法有以下问题需要解决。
1
如何计算两组之间的距离?
2
如何选择要加入的群集
3
如何合并集群
由于问题1已在第4节中描述,因此您只需要解决2和3。
2,您可以保存今天最相似的两个组以及它们之间的距离。当你在一个时间计算两组之间的距离,以确定比距离已经保存,如果是这样,更新更新的最短距离是否短。他们更新了当前的两组。
问题3的本质是如何描述与特征向量组合的聚类。
由于通过组合两个子组获得的结合的簇,子组的两个特征矢量的平均值可以被视为所述结合簇的特征的向量。
例如,类C为A和B的组合,A和B的特征向量是(分别为A1,A2)。
An)和(b1,b2)。
在BN的情况下),C的本征向量可被写为((A1 + B1)/ 2,(A2 + B2)/ 2)。
(An + bn)/ 2)。
因此,您可以设计和合并自行车栅格群集类。
#merge类biclusterclassbicluster:def__init __(个体,VEC,左=无,右=无,距离= 0。
0,id = None):#组合自习类的子类。
Left = left#绑定类的另一个子类。
如果当前类原子类(即文件)中,右侧的左侧也Noneself。
Right = right#当前类的自动实体的向量。
Vec = vec#这是当前类的ID。
Id = id#当前类的两个子类之间的距离。
如果当前类是原子类,则距离为0。
是的
距离=距离
通过以上信息,您可以对文档进行分组(Python代码):
在#层次集群的主要功能,参数向量是文档的所有特征向量,并返回集群的合并最后。Defhcluster(矢量)#distance缓存,距离[(I,J)](在适用情况下)中,j的距离={}距离#持有新合并的集群ID的变量currentclustid = -1#初始簇它构造一个,每个文档是clusterclust =[bicluster(矢量[I],ID = I)foriinrange(LEN(线))]whilelen(clust)1:#最接近初始类是0和1(换句话说,一个向量[0]和向量[1])。对=(0,1)#初始距离为0和1的距离最短的距离=(组[0]。
Vec,clust[1]
VEC)#double环foriinrange(LEN(clust)):forjinrange第(i + 1,LEN(clust)):如果#之间的距离i和j(clust[I])不是那么算作。
去,组[j]。
Id)的notindistances:#I,来计算第j,将其存储在所述距离之间的距离[i][j],距离函数计算clust[i]中。
Vec和组[j]
两个距离矢量之间的距离vec[[clust[i]。
去,组[j]。
Id)]=距离(组[i])。
Vec,小组[j]。
Vec)d =距离[(组[i])。
去,组[j]。
ID)]如果#i和j之间的当前距离小于最小距离保持ifdclosest:#更新最近的距离的值,群集将接近= dlowestpair =(I,J)。合并簇的特征mergevec =[(clust[lowerpair[0]])(最接近一对簇向量的平均特征矢量)。
Vec[i]+ clust[lowerpair[1]]。
Vec[i])/ 2。
(Len(clust[0]。
VEC))]#梅尔梅尔clusternewcluster = bicluster(mergevec,左= clust[lowerpair[0]],右= clust[lowerpair[1]],距离=最近,ID = currentclustid)#合并集群ID为-1,-2,?3。Currentclustid- = 1#删除的合并后的簇中,添加合并簇中clust可变delclust[leastpair[1]]。delclust[lowestpair[0]]clust。
对于#while结束#循环添加(新群集)目前聚集簇只有一个,算法退出clust[0]。
分组生成具有类似图表的分组结构。树的每个节点都被分组。这里,叶节点是文档中,根节点是hcluster的返回值。
按列聚类
对于包含单词作为分的文件被创建的特征向量,您可以将类似的文件(分组表3-1的行)。
同样,如果实体规模已对原稿比例尺的话造成的,你可以组与(对表3-1的列)相关联的词。
聚类方法,因为它是相同的行由行的分组方法,此处不再赘述。
6K表示分组
与分层分组不同,聚类步骤的K均值如下。