【发布时间】:2020-05-09 20:20:41
【问题描述】:
我正在使用的数据框如下所示:
vid2 COS fsim FWeight
0 -_aaMGK6GGw_57_61 2 0.253792 0.750000
1 -_aaMGK6GGw_57_61 2 0.192565 0.250000
2 -_hbPLsZvvo_5_8 2 0.562707 0.333333
3 -_hbPLsZvvo_5_8 2 0.179969 0.666667
4 -_hbPLsZvvo_18_25 1 0.275962 0.714286
这里, 这些特征的含义如下:
FWeight - 每个片段(或行)的权重
fsim - cap1 和 cap2
两列之间的相似度得分For example,
For vid2 "-_aaMGK6GGw_57_61", COS = 2
Thus, the two rows with vid2 comes under this.
fsim FWeight
0 0.253792 0.750000
1 0.192565 0.250000
The calculated value vid_score needs to be
vid_score(1st video) = (fsim[0] * FWeight[0] + fsim[1] * FWeight[1])/(FWeight[0] + FWeight[1])
The expected output value vid_score for vid2 = -_aaMGK6GGw_57_61 is
(0.750000) * (0.253792) + (0.250000) * (0.192565)
= 0.238485 (Final value)
对于某些视频,此 COS = 1, 2, 3, 4, 5, ... 因此这需要是动态的
我正在尝试计算此处为 vid2 的每个视频 ID 的加权相似度得分。但是,每个视频分别有许多字幕和权重。它各不相同,有的有 2 个,有的有 1 个,有的有 3 个,等等。这些片段和字幕的数量已存储在特征 COS 中(即片段数)。
我想遍历数据帧,其中每个视频的分数存储为 fsim(片段相似度分数)的加权平均分数。但迭代次数不规律。
我已经尝试过这段代码。但我无法动态迭代迭代因子为 COS 而不仅仅是一个常数值
vems_score = 0.0
video_scores = []
for i, row in merged.iterrows():
vid_score = 0.0
total_weight = 0.0
for j in range(row['COS']):
total_weight = total_weight + row['FWeight']
vid_score = vid_score + (row['FWeight'] * row['fsim'])
i = i + row['COS']
vid_score = vid_score/total_weight
video_scores.append(vid_score)
print(video_scores)
【问题讨论】:
-
您的加权相似度得分的公式是什么?
-
创建一个两/三列的虚拟数据框,其中只有 COS、FWeight、fsim 等列,并保留大约 5 行。使用此示例数据来解释您的期望。还提供虚拟数据帧的预期输出。您当前的数据不可重现且难以阅读。请尽量减少不必要的细节。
-
@CypherX 我已经编辑了数据。请看一下。如果在理解我的问题时有问题,我会进一步修改。谢谢
-
那么你最终的结果会是什么样子?您是否将 vid2 作为后处理中每一行的唯一值?
-
@CypherX,是的,一个带有 vid2 及其分数 vid_score 的列表或数据框