如果我的每个单元格的列具有不同的尺寸,但我希望每对的相似度得分,我该如何做到这一点? 现在,我在想:
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)
}