K-means聚类文本数据?

时间:2015-04-16 03:22:44

标签: cluster-analysis weka data-mining k-means

为了更简单的理解,我用更小的例子来解释。 我有2套:
我有10个独特的字符串ID。 id1,id2,id3,id4,id5 ... id10
我有3个独特的c-id:cid1,cid2,cid3
两组之间存在映射,但不在相同组的值内。
映射说:
id1:cid1,cid2
id2:cid3
id3:cid1 ......等等..

我需要针对cids(字符串)聚集一组id(字符串),反之亦然。

现在我已经创建了一个如下所示的csv文件。 (类似于稀疏)

id1,cid1
id1,cid2
id3,cid3


我在Weka中运行k-means但不确定这是否正确。所有这些ID实际上都是没有任何特定顺序的功能/属性。但是我所表达的方式,列被视为属性值。如何将其转换为功能?

2 个答案:

答案 0 :(得分:0)

对于kmeans,您必须创建equal length向量。一种可能的方法是 - 假设有三个唯一的ID cid1cid2cid3,那么您创建一个长度为3的向量,每个向量都采用二进制值({{1} }或0)表示该唯一ID的1absence

presence

即。上面的例子可以写成:

id => [cid1, cid2, cid3]

然后我认为你可以使用kmeans进行聚类。我不知道这里的Ids的语义,所以不能真正评论它如何集群。

答案 1 :(得分:0)

由于您愿意尝试其他任何可以进行群集的工具,我建议您查看SPMF

  

SPMF是一个用Java编写的开源数据挖掘挖掘库,   专门从事模式挖掘。

     

根据GPL v3许可证分发。

     

它提供了89种数据挖掘算法的实现:

     

顺序模式挖掘,关联规则挖掘,项集挖掘,   顺序规则挖掘,聚类。每种算法的源代码   可以集成到其他Java软件中。

     

此外,SPMF可以用作简单用户的独立程序   接口或从命令行。

您可以从here

下载GUI程序或源代码

可以在this page上找到文档和数据集说明。


对于KMeans,程序只接受整数值 (字符串有一种解决方法) 用单个空格分隔,并且它也假定< strong>所有行都有相同的长度。

1 2 3 4
1 6 8 8
1 2 3 3
2 4 5 5
4 7 8 7
7 6 8 9
4 4 3 3
2 2 5 5
7 5 5 5
5 6 8 9

输出文件格式定义如下。 每一行都是一个群集,并列出群集中包含的向量。向量是由&#34;,&#34;分隔的双值列表。 &#34; [&#34;和&#34;]&#34;字符。

cluster 1: [1.0,2.0,3.0,4.0][1.0,2.0,3.0,3.0][2.0,4.0,5.0,5.0][4.0,4.0,3.0,3.0][2.0,2.0,5.0,5.0]
cluster 2: [7.0,6.0,8.0,9.0][1.0,6.0,8.0,8.0][4.0,7.0,8.0,7.0][5.0,6.0,8.0,9.0]
cluster 3: [7.0,5.0,5.0,5.0]

但是,如果您的数据集只有几个不同的字符串,那么&#34;查找并替换&#34;将完成这项工作。

在任何其他情况下,您都可以使用R