将非方形加权邻接矩阵转换为 R 中的 igraph 对象

4
我正在使用tf_idf值来确定网页之间的相似度。目前我有我的tf_idf矩阵,由于有很多关键词但只有36个文档,所以该矩阵不是方阵。我想将该矩阵转换为图形对象,以便我可以对其进行单模投影。
因此,我使用了以下代码: ig <- graph.adjacency(tf_idf,mode="undirected",weighted=TRUE) 我希望这个图形是加权的,即它的tf_idf值。但是,当我执行此操作时,会出现错误:

Error in graph.adjacency.dense(adjmatrix, mode = mode, weighted = weighted, : not a square matrix

请问你能帮我决定下一步该怎么做吗?
我有一个类似于以下内容的矩阵,其中x、y、z是关键词,A、B是网页:
mat = matrix(c(0.1, 0.5, 0.9, 0.4, 0.3, 0.5), nc=3,
           dimnames=list(c("A", "B"), c("x", "y", "z")),
           byrow=TRUE)

      x    y   z
A     0.1 0.5 0.9
B     0.4 0.3 0.5

邻接矩阵是图的定义,因此您的tf_idf不是邻接矩阵。因此,您试图做什么并不清楚。 - John Coleman
正如我之前提到的,我有一个TF-IDF矩阵,我想在网页和关键词之间创建一个加权二分图。 - am10
我明白了 - 所以你的 tf_idf 是邻接矩阵的一部分。你可以将其扩展为完整的矩阵。 - John Coleman
我也在想同样的问题,你知道在igraph中从矩阵创建二分图对象的更好方法吗? - am10
有一个名为graph_from_incidence_matrix的函数,它可能会有所帮助,尽管您的输入有点不清楚(至少对我来说是这样)-您能否分享一下您数据的一个小例子?或者也许您想要取矩阵的交叉积(对于常见单词),使其成为方阵或其他操作吗? - user20650
显示剩余2条评论
1个回答

1

也许有更好的方法,但如果你想将矩阵扩展为完整的邻接矩阵,可以使用以下函数:

expand.matrix <- function(A){
  m <- nrow(A)
  n <- ncol(A)
  B <- matrix(0,nrow = m, ncol = m)
  C <- matrix(0,nrow = n, ncol = n)
  cbind(rbind(B,t(A)),rbind(A,C))
}

例如:

 A <- rbind(c(0,1,0),c(1,0,1))
> A
     [,1] [,2] [,3]
[1,]    0    1    0
[2,]    1    0    1
> expand.matrix(A)
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    1    0
[2,]    0    0    1    0    1
[3,]    0    1    0    0    0
[4,]    1    0    0    0    0
[5,]    0    1    0    0    0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接