计算R中具有不同维度的细胞的相似性得分

时间:2015-11-28 08:09:34

标签: r loops lapply dimensions cosine-similarity

如果我的每个单元格的列具有不同的尺寸,但我希望每对的相似度得分,我该如何做到这一点? 现在,我在想:

Step 1: Find all the unique values in a specific column. 
   For example, a column with 100 unique values (arity = 100).

Step 2: For each cell, create a small data frame with 
 row names of all the unique values (nrow = arity = 100).
 And denote the row with a value of 1, if that value appears in that specific cell.

Step 3: calculate the cosine similarity.

例如,我的数据看起来像这样。所有唯一值均为[a,b,c,d]:

    var_1     
    [a,b] 
    [b,c,d] 
    [a] 
    ..... (> 10,000 rows)

对于第2步,我将最终将单元格更改为:

     var_1     
    [1,1,0,0] <- in an order of [a,b,c,d], the 1st row has "a" and "b"
    [0,1,1,1] 
    [1,0,0,0] 
    ....

对于步骤3,基于步骤2的结果,我可以计算每对行的余弦相似度。 假设所有单元数据都是数字0-1的列表。但是,我需要为每列计算每对行的余弦相似度。我的余弦相似度表的结果应该是这样的:

           | row_1  | row_2 | row_3  
    row_1  |   1    |  (r1) |  (r2)
    row_2  |  (r1)  |   1   |  (r3)
    row_3  |  (r2)  |  (r3) |    1

有没有快速的方法来迭代所有行并计算每对的余弦相似度?

非常感谢你! 现在,我的代码如下所示。我已经获得了每列的所有唯一值,并将唯一值列表命名为“unique”。但它不能给我一个结果。有没有更好的方法来做到这一点?我的数据集非常大。

 myfunction <- function(curr, unique) {
  arity <- length(unique)
  curr <- matrix()
  length(curr) <- arity
  dim(curr) <- c(1, arity)
  colnames(curr) <- unique
  curr.m <- gsub(" ", "", as.character(unique), fixed = TRUE)
  curr.m <- unlist(strsplit(curr.m, ",", fixed = TRUE))
  curr.m <- curr.m[curr.m != ""]
  curr[] <- 0L
  curr[, curr.m] = 1     
}

for(c in seq_len(length(unique))) {
  curr <- all[,c]
  curr.u <- unique[[c]]
  new <- lapply(curr, myfunction, unique = curr.u)
}

0 个答案:

没有答案