所以我试图评估我的机器学习算法的结果,该算法提出了一个二进制决策,无论两个元素是否应该属于一个簇。对于相同的两个元素,我也具有“ 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,但毫无疑问真的像我的一样。如果我错过了一些事情,我很抱歉,如果我的请求做得不好。
最好的问候和预先的感谢!