【数学和算法】加权平均法

加权法衡量差异

加权平均法的概念直接看这篇博客加权平均法就明白了。

在每一个数的权数相同的情况下,加权平均值就等于算数平均值。

以正常视力的人眼为例:
  • 距离人越近的位置,视野越清晰,可信度更高,所以分配的权重更大;
  • 距离人越远的位置,视野越模糊,可信度越低,所以分配的权重更小;

上面博客中的加权平均法用来一个事物衡量平均水平,还可以衡量两个事物的差异。


下面的例子是衡量两条线的差异程度:

本例中,加权平均法会根据不同位置来分配不同权重。

就是 动态权重,根据某点原点的距离,越远越不可靠,权重越低。

例:有两条线,线上的点距离原点越远,可信度越低。现在需要评估两条线的相似程度,就是量化distance,可以分别选取两条线上的三个点,对三对点分别计算距离,然后分配不同权重,进行加权平均,就得到了两条线的差异:
在这里插入图片描述

有两条线L1,L2有一系列点(已知每个点的坐标xy值,注意图中xy方向与上学时课本上的不一样)
L1: 起点A1,终点B1
L2: 起点A2,终点B2

  • 1.先找出L1,L2x方向公共部分,得到公共部分在x方向距离原点的距离startend;

  • 2.然后根据startend求出中间点:
    mid=(end - start)/2;

  • 3.然后再从L1,L2中分别找出x方向距离最接近startmidend的点,得到首中尾三对点:

    • start点对:start_point_1对应图中L1中的A1start_point_2对应图L2A2'
    • mid 点对: mid_point_1mid_point_2
    • end 点对:end_point_1对应图L1B1'end_point_2对应图L2B2

    其中:

    • start_point_1,mid_point_1,end_point_1L1上的点,start_point_1.x < mid_point_1.x < end_point_1.x
    • start_point_2,mid_point_2,end_point_2L2上的点, start_point_2.x < mid_point_2.x < end_point_2.x

    注意:startmidend是长度是距离,不是点,start_point_1,mid_point_1,end_point_1start_point_2,mid_point_2,end_point_2是点,不要混淆了。

  • 4.得到首中尾三个点后,根据三个点离原点的距离设置权重:


代码如下:
// 计算两个start点的距离,两个mid点的距离,两个end点的距离
float start_dist = std::sqrt(std::pow(start_point_1.x - start_point_2.x, 2) 
                     + std::pow(start_point_1.y - start_point_2.y, 2));

float mid_dist = std::sqrt(std::pow(mid_point_1.x - mid_point_2.x, 2)
                      + std::pow(mid_point_1.y - mid_point_2.y, 2));

float end_dist = std::sqrt(std::pow(end_point_1.x - end_point_2.x, 2) 
                   + std::pow(end_point_1.y - end_point_2.y, 2));

//加权法求各个权重,权重是根据距离来定的
float wSigma = 1.0 / (std::abs(start) + std::abs(mid) + std::abs(end));
float wStart  = 0.5 * wSigma * (std::abs(mid) + std::abs(end));
float wMid = 0.5 * wSigma * (std::abs(start) + std::abs(end));
float wEnd    = 0.5 * wSigma * (std::abs(start) + std::abs(middle));

// 则两条线的距离可以通过三对点的距离,使用加权法近似表示为
float distance = wStart * start_dist 
		       + wMid * mid_dist 
		       + wEnd * end_dist;

从上面代码最后一句可以看出,如果distance==0,那么两条线L1L2重合。
不要简单理解为计算两条线的距离,要注意到里面的限定条件是线上的点距离原点越远,可信度越低,所以才使用了加权法。

如果两条线上所有点可信度一样,即权重一样,那么计算的这两条线的距离,可以直接使用wStart = wMid = wEnd =1/3,然后1/3*(起点之间距离 + 中间点之间距离 + 终点之间距离)

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值