我有两个数据行,每个数据行都有4个字段。
就像这样:
field1 field2 field3 field4
Row 1
Row 2
现在我要比较这两种记录,并计算出它们的相似性。我通过推导余弦相似度来计算每个字段的相似性。
因此,我最终得到了类似的相似之处:(0表示一周的相似性,1表示强烈的相似性)
field1: 0.12
field2: 0.67
field3: 1.00
field3: 0.93
我现在可以通过平均值来找到总相似性,但问题是:
我想在字段中添加权重,
因此,如果field2的权重大于field1,那么field2的相似度将对平均相似度有显著的贡献。
你能提出一个公式或算法来满足这样的要求吗?
发布于 2013-05-23 09:54:00
很简单,
示例
公式
((field1 * field1_weight) + (field2 * field2_weight) + ... + (fieldn * fieldn_weight)) / (field1_weight + field2_weight + ... + fieldn_weight) = weighted_average
分数权
如果以分数作为权重,那么公式的工作原理也是一样的。例如,如果希望第四个字段的权重比其他字段更多地加权150%
,则可以将其赋值为1.5
。
// Weights are (1 + 1 + 1 + 1.5) = 4.5
((0.12 * 1) + (0.67 * 1) + (1.00 * 1) + (0.93 * 1.5)) / 4.5 = 0.7077777777777778
权重是相对的
您不需要从设置为1的每个权重开始,如果您愿意,可以使用100或1000。
例如,如果所有4个字段的权重为100,则如果它们全部为1,则最终平均值将是相同的。
进一步阅读
发布于 2013-05-23 09:55:21
你只想找出加权平均值。将每个相似度乘以权重,然后将产品相加在一起,最后除以权重之和,得到平均值:
total, totalw = 0, 0
for w,s in weighted_sims :
total += w*s
totalw += w
result = total / totalw
https://stackoverflow.com/questions/16720549
复制相似问题