我有2个数据行,每个行有4个字段
这样的事情:
field1 field2 field3 field4
Row 1
Row 2
Run Code Online (Sandbox Code Playgroud)
现在我必须比较这两个记录并计算相似性.我通过导出余弦相似度来计算每个场的相似性.
所以我最终得到类似的相似之处:(0代表一周的相似性,1代表强烈的相似性)
field1: 0.12
field2: 0.67
field3: 1.00
field3: 0.93
Run Code Online (Sandbox Code Playgroud)
我现在可以通过对值进行平均来找到总相似度,但问题是:
我想在字段中添加权重
因此,如果field2的权重高于field1,那么field2的相似性将对平均相似性有显着贡献.
你能建议一个公式或算法来满足这样的要求吗?
谢谢,Vidhu
Wil*_*ill 10
简单,
在该示例中,可以认为每个字段具有相等的权重1
((0.12 * 1) + (0.67 * 1) + (1.00 * 1) + (0.93 * 1)) / 4 = 0.68
Run Code Online (Sandbox Code Playgroud)现在,如果我们想让field2比其他字段多2倍
// Weights are (1 + 2 + 1 + 1) = 5
((0.12 * 1) + (0.67 * 2) + (1.00 * 1) + (0.93 * 1)) / 5 = 0.678
Run Code Online (Sandbox Code Playgroud)如果我们希望字段3具有100倍的权重(字段2仍然是2x)
// Weights are (1 + 2 + 100 + 1) = 104
((0.12 * 1) + (0.67 * 2) + (1.00 * 100) + (0.93 * 1)) / 104 = 0.9845192307692308
Run Code Online (Sandbox Code Playgroud)((field1 * field1_weight) + (field2 * field2_weight) + ... + (fieldn * fieldn_weight)) / (field1_weight + field2_weight + ... + fieldn_weight) = weighted_average
Run Code Online (Sandbox Code Playgroud)
如果给出分数作为权重,则公式的工作原理相同.例如,如果您希望第四个字段的权重加权,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
Run Code Online (Sandbox Code Playgroud)
您不需要从设置为1的每个权重开始,如果您愿意,可以使用100或1000.
例如,如果所有4个字段的权重均为100,则如果它们都是1,则最终平均值将相同.