如何决定体重?

Sas*_*ash 4 algorithm

对于我的工作,我需要一些具有以下输入和输出的算法:

输入:一组日期(从过去开始).输出:一组权重 - 每个给定日期一个权重(所有权重的总和= 1).

基本的想法是,到今天的日期最近的日期应该获得最高的权重,第二个最接近的日期将获得第二高的权重,依此类推......

有任何想法吗?

提前致谢!

sna*_*ile 7

首先,对于输入集中的每个日期,指定日期和今天之间的时间量.

例如:以下日期设置{today, tomorrow, yesterday, a week from today}变为{0, 1, 1, 7}.正式:val[i] = abs(today - date[i]).

其次,以这样的方式反转值,使它们的相对权重相反.最简单的方法是:val[i] = 1/val[i].

其他建议:

  • val[i] = 1/val[i]^2
  • val[i] = 1/sqrt(val[i])
  • val[i] = 1/log(val[i])

最难和最重要的部分是决定如何反转这些值.想想,权重的本质应该是什么?(你想要两个遥远日期之间的明显差异,或者两个遥远的日期应该具有相同的权重吗?你想要一个非常接近今天的日期具有更大的重量或相当大的重量吗?).

请注意,您应该提出一个不能除以零的反转过程.在上面的示例中,除以val[i]结果除以零.避免被零除的一种方法称为平滑."平滑"数据的最简单方法是使用添加一个平滑,您只需为每个值添加一个(因此今天变为1,明天变为2,下周变为8等).

现在最简单的部分是对值进行标准化,使它们总和为1.

sum = val[1] + val[2] + ... + val[n]
weight[i] = val[i]/sum for each i
Run Code Online (Sandbox Code Playgroud)