如何通过R中的多数规则链接两个图的“簇”

时间:2019-12-12 22:21:54

标签: r igraph subgraph

所以我试图评估我的机器学习算法的结果,该算法提出了一个二进制决策,无论两个元素是否应该属于一个簇。对于相同的两个元素,我也具有“ true”信息,因此我基本上有两个数据帧(我们称它们为df1和df2),看起来像这样:

+----------+----------+--------+
| element1 | element2 | match? |
+----------+----------+--------+
| 1        | 2        | 1      |
| 1        | 3        | 1      |
| 1        | 5        | 0      |
| 2        | 3        | 0      |
| 2        | 5        | 0      |
| 4        | 6        | 1      |
| ...      | ...      | ...    |
+----------+----------+--------+

它们可能非常相似(取决于算法的执行效果),但是显然会有差异。还要注意,即使1与2和3匹配,也并不意味着2和3也匹配。我现在想做的是根据这些“链接”在两个数据帧中进行聚类,然后检查df1的每个聚类,这是df2中最相似的聚类(按照多数规则,这意味着df2中的哪个聚类包含最多的聚类) df1中群集的元素)。如果df2中的多个群集相同,则应该链接最小的群集。

我尝试使用igraph,发现有一些检查同构的函数,但是我无法使它们适用于igraph对象。使用clusters $ membership做些什么:

graph_df1 <- graph_from_data_frame(df1[df1$match? ==1,],directed=F)
clusters_df1 <- clusters(graph_df1)
ids_df1 <- as.data.frame(clusters_df1$membership)

给我一​​个如下形式的数据框:

+---------+----------+
| element | cluster |
+---------+----------+
| 1       | 1        |
| 2       | 1        |
| 3       | 1        |
| 4       | 2        |
| 5       | 4        |
| 6       | 2        |
| ...     | ...      |
+---------+----------+

我对R比较陌生,我不知道该如何完成。对于我的性能评估,我基本上只需要各个集群的大小,甚至不需要重叠的实际元素或任何东西。这样的事情将是完全可以的:

+------------------------+---------------------------------------+
| size of cluster in df1 | size of  corresponding cluster in df2 |
+------------------------+---------------------------------------+
| 5                      | 5                                     |
| 4                      | 3                                     |
| 3                      | 4                                     |
| ...                    | ...                                   |
+------------------------+---------------------------------------+

我做了一些谷歌搜索,在搜索的同时也搜索了SO,但毫无疑问真的像我的一样。如果我错过了一些事情,我很抱歉,如果我的请求做得不好。

最好的问候和预先的感谢!

0 个答案:

没有答案