【发布时间】:2022-12-10 04:20:31
【问题描述】:
我有一个包含两列的表,一行中的两个条目表明它们是相关的:
| Col1 | Col2 |
|---|---|
| a | A |
| b | B |
| a | C |
| c | A |
| b | D |
这里a与A, C相关,b与B, D相关,c与A相关,这意味着col1中的相同条目可能在col2中有多个标签相关。我训练了一个Machine Learning模型,通过创建Col1和Col2的向量嵌入并优化两个向量之间的cosine_similarity来量化Col1和Col2之间的关系。现在,我想通过在测试集上计算 Recall 来测试我的模型。我想检查是否在各种 recall@N 中,可以检索这些积极关系的比例。假设我已经对每一列中的所有条目进行了归一化向量表示,那么我可以将它们之间的余弦距离计算为:
cosine_distance = torch.mm(col1_feature, col2_feature.t())
它给出了col1 和col2 之间可以形成的所有对之间的距离矩阵。
| dist(a,A) | dist(a,B) | dist(a,C) | dist(a,A) | dist(a, D) |
| dist(b,A) | dist(b,B) | dist(b,C) | dist(b,A) | dist(b, D) |
| dist(a,A) | dist(a,B) | dist(a,C) | dist(a,A) | dist(a, D) |
| dist(c,A) | dist(c,B) | dist(c,C) | dist(c,A) | dist(c, D) |
| dist(b,A) | dist(b,B) | dist(b,C) | dist(b,A) | dist(b, D) |
然后我可以计算出哪些对具有最大距离来计算recall@k。我的问题是我怎样才能使这对数百万行有效。我在 pytorch 中找到了这个模块:torchmetrics.classification.MultilabelRecall(https://torchmetrics.readthedocs.io/en/stable/classification/recall.html),这似乎很有用,但为此我需要指定标签的数量。就我而言,我可以为col1 的每个唯一条目设置可变数量的标签。有任何想法吗?
【问题讨论】:
-
在使用 MultiLabelRecall 之前,您不能计算唯一标签(使用 pandas 或任何数据框库很容易)吗?
标签: python machine-learning pytorch precision-recall