数字相似度的计算一直是个老大难,是在需要判定两个数“有多接近”而不是直接比大小的时候。NumberSimilarity用上了sigmoid 算法,这个点子挺妙的。你可以理解成它把两个数之间的差距“压缩”成了一个介于 0 和 1 之间的相似度值。越接近,值越接近 1,挺适合用在分类、推荐、阈值判断这类场景里。

sigmoid本来是神经网络里常见的一种激活函数,这里拿来做距离映射,既直观又好调。你可以自己设定灵敏度,像是k 值就挺关键,调高它相似度响应更陡,适合精度要求高的场景。

实现也不复杂,大致长这样:

function similarity(a, b, k = 1) {
  const diff = Math.abs(a - b);
  return 1 / (1 + Math.exp(k * diff));
}

如果你之前接触过图像或文本相似度计算,这个思路会让你眼前一亮。像是SSIM做图像相似度、哈希算法做文档对比,思路是相通的:把“差异”变成“相似”。

使用的时候注意下数值范围的标准化,比如你比较的是温度还是评分,最好先归一化,不然sigmoid的响应就偏了。还有就是,不适合用于离散型分类,别想着用它分男女。

如果你正在做推荐系统、评分,或者只是单纯想给一组数据做相似度打分,用这个算法试试,简单又直观。