You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码中自定义距离公式解析及两次调用相加原因探究

自定义distance函数的解析

1. 距离公式类型

这个函数计算的是多元高斯分布间KL散度的变形(省略了1/2系数),并非马氏距离。马氏距离针对单个样本点与分布的距离,而这里输入的是两个完整的高斯分布(由均值向量和协方差矩阵描述)。

2. 计算逻辑拆解

函数的输入instance1和instance2都是二元组:第一个元素是高斯分布的均值向量,第二个是协方差矩阵;k是特征维度(即高斯分布的变量维度)。计算步骤对应KL散度(衡量两个概率分布差异的指标)的核心部分:

  • 第一步:np.trace(np.dot(np.linalg.inv(cm2), cm1))
    计算协方差矩阵的迹:tr(cm2⁻¹ · cm1),对应KL散度中两个分布协方差结构的差异项
  • 第二步:np.dot(np.dot((mm2-mm1).transpose(), np.linalg.inv(cm2)), mm2-mm1)
    计算均值差异的二次型:(mm2 - mm1)ᵀ · cm2⁻¹ · (mm2 - mm1),对应两个分布均值的差异项
  • 第三步:np.log(np.linalg.det(cm2)) - np.log(np.linalg.det(cm1))
    计算协方差矩阵行列式的对数差:ln(det(cm2)) - ln(det(cm1)),对应分布“分散程度”的差异项
  • 第四步:distance -= k
    减去特征维度k,这是KL散度公式中的标准修正项

注:标准多元高斯KL散度公式会在整体前乘以1/2,这里省略了该系数,但不影响KNN算法中距离的相对排序(KNN仅关注距离的大小关系)。

3. 两次调用相加的原因

KL散度本身是非对称的:KL(P||Q)(从分布P到Q的散度)≠KL(Q||P),无法直接作为KNN要求的对称距离度量。
而distance(A,B,k) + distance(B,A,k)等价于KL(A||B) + KL(B||A),将非对称的散度转化为对称的距离,满足KNN算法中“样本A到B的距离等于B到A的距离”的基本要求。

内容的提问来源于stack exchange,提问作者Nyx Moon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:08:18