为了更简单的理解,我用更小的例子来解释。
我有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实际上都是没有任何特定顺序的功能/属性。但是我所表达的方式,列被视为属性值。如何将其转换为功能?
答案 0 :(得分:0)
对于kmeans,您必须创建equal length
向量。一种可能的方法是 - 假设有三个唯一的ID cid1
,cid2
和cid3
,那么您创建一个长度为3
的向量,每个向量都采用二进制值({{1} }或0
)表示该唯一ID的1
或absence
。
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