如何计算数字间的归一化相似度得分并跨集合求平均?
数字相似度归一化与跨集合得分计算方案
问题背景
需要评估集合中每个数字与参考数字的相似度,完全相同时相似度为100%;同时要将得分归一化到[0,100]或[0,1]区间,实现跨集合复用,最终计算多集合的平均得分。目前已算出各数字与参考值的绝对差值,但缺乏归一化方法。
核心思路
相似度与绝对差值负相关:差值越小,相似度越高;差值为0时得满分100%。通过集合内最大绝对差值作为归一化基准,将每个数字的差值映射到目标区间,确保同一集合内得分相对合理,不同集合间得分可对比。
具体步骤与公式
1. 确定集合内最大绝对差值
对每个待评分集合,计算所有待评数字与参考数字的绝对差值,找出其中的最大值max_d——这是该集合中相似度最低的情况,对应得分0。
2. 归一化相似度计算
对于集合内任意数字x,参考数字为ref,绝对差值d = |ref - x|,则:
- 归一化到[0,100]区间:
相似度得分 = 100 * (1 - d / max_d) - 归一化到[0,1]区间:
相似度得分 = 1 - d / max_d
注:若集合内所有数字都与参考值相同(
max_d=0),直接给满分100%或1。
3. 示例计算
第一组
参考数字:0,待评数字:1、-1、2、-2
- 绝对差值:1、1、2、2,
max_d=2 - 各数字得分:
- 1、-1:
100*(1-1/2)=50分 - 2、-2:
100*(1-2/2)=0分
- 1、-1:
第二组
参考数字:600,待评数字:700、-700、800、-800
- 绝对差值:100、1300、200、1400,
max_d=1400 - 各数字得分:
- 700:
100*(1-100/1400)≈92.86分 - -700:
100*(1-1300/1400)≈7.14分 - 800:
100*(1-200/1400)≈85.71分 - -800:
100*(1-1400/1400)=0分
- 700:
4. 跨集合平均最终得分
可根据需求选择两种计算方式:
- 先计算每个集合内的得分平均值,再对所有集合的平均值求平均
- 直接将所有集合的所有得分合并,计算总平均值
以示例为例:
- 第一组平均得分:
(50+50+0+0)/4=25分 - 第二组平均得分:
(92.86+7.14+85.71+0)/4≈46.43分 - 最终平均得分:
(25+46.43)/2≈35.71分
内容的提问来源于stack exchange,提问作者Damian Zborowski
相关产品推荐
相关产品推荐

