Eir*_*iks 6 python cluster-analysis scipy
我无法找到关于scipy中的聚类的任何简单的教程或描述,所以我将尝试解释我的问题:
我尝试对文档进行聚类(分层凝聚聚类),并为每个文档创建一个向量,并生成对称距离矩阵.vector_list包含(实际上很长)代表每个文档的向量.这个向量列表的顺序与我的输入文档列表相同,这样我(希望)能够将聚类的结果与相应的文档相匹配.
distances = distance.cdist(vector_list, vector_list, 'euclidean')
Run Code Online (Sandbox Code Playgroud)
这给出了这样的矩阵,其中对角线是每个文档到自身的距离(总是0)
[0 5 4]
[5 0 4]
[5 4 0]
Run Code Online (Sandbox Code Playgroud)
我将这个距离矩阵提供给scipys的linkage()函数.
clusters = hier.linkage(distances, method='centroid', metric='euclidean')
Run Code Online (Sandbox Code Playgroud)
这返回的东西我不太确定是什么,但是以数据类型numpy.ndarray的形式出现.根据文档,我可以再次将其提供给fcluster以获得"扁平集群".我使用距离矩阵中最大距离的一半作为阈值.
idx = hier.fcluster(clu,0.5*distances.max(), 'distance')
Run Code Online (Sandbox Code Playgroud)
这会返回一个numpy.ndarray,这对我来说再没有多大意义.一个例子是[6 3 1 7 1 8 9 4 5 2]
所以我的问题是:我从链接和fcluster函数得到了什么,我怎么能从那里回到我的文档,我首先创建了距离矩阵,看看集群是否有意义?我这样做了吗?
首先,如果您使用和代替; ,则不需要使用cdist和来完成整个过程。在该函数中,您可以提供一组术语计数、tf-idf 值或任何您的特征。linkagefclusterdatafcluster(n_documents, n_features)
的输出与fclusterdata的输出相同fcluster:一个数组T,其中“T[i]是原始观察所属的平坦簇号i”。即,cluster.hierarchy模块根据您设置的阈值来展平聚类0.5*distances.max()。在您的情况下,第三个和第五个文档聚集在一起,但所有其他文档都形成自己的集群,因此您可能需要将阈值设置得更高或使用不同的criterion.
| 归档时间: |
|
| 查看次数: |
5413 次 |
| 最近记录: |