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

5维向量误差百分比计算方法的数学正确性确认

代码问题与数学合理性分析

首先说你的代码逻辑bug

你写的函数里有个致命问题:循环里的difs每次都被新的单个样本的相对误差覆盖了,根本没累加所有样本的误差。最后算出来的acc只是最后一个样本的相对误差除以样本数,完全不是你想要的平均误差。

改法很简单,把循环里的赋值改成累加:

difs += abs(np.linalg.norm(y_true[i])-np.linalg.norm(y_pred[i]))/(np.linalg.norm(y_true[i]))

另外最好加个判断,避免真实向量模长为0时除以0的情况。

再讲数学上的合理性

假设修正代码后,你算的是每个向量模长相对误差的平均值,这个方法对不对要看你想衡量什么:

  • 如果你的目标就是看预测向量的长度准不准,那这个方法没问题,能直接反映长度的平均偏差比例。
  • 但如果你想衡量整个向量(包括方向)的预测准确性,那这个方法就不靠谱了:
    • 比如真实向量是[1,0,0,0,0],预测向量是[-1,0,0,0,0],两者模长一样,按你的方法误差为0,但实际上向量方向完全相反,预测根本不对。
    • 这种情况更适合用余弦相似度(测方向一致度)、向量欧氏距离的相对误差,或者每个维度的相对误差平均值来衡量。

给你个修正后的参考代码:

import numpy as np

def accuracy_fn(y_true, y_pred):
    total_rel_error = 0.0
    sample_count = len(y_true)
    for true_vec, pred_vec in zip(y_true, y_pred):
        true_norm = np.linalg.norm(true_vec)
        # 跳过模长为0的真实向量,避免除以0
        if true_norm == 0:
            sample_count -= 1
            continue
        rel_error = abs(true_norm - np.linalg.norm(pred_vec)) / true_norm
        total_rel_error += rel_error
    # 返回平均相对误差(乘以100就是百分比形式)
    return total_rel_error / sample_count * 100 if sample_count > 0 else 0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:42:53