algorithm - 如何决定权重?

标签 algorithm

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

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

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

有什么想法吗?

提前致谢!

最佳答案

首先,为输入集中的每个日期分配日期和今天之间的时间量。

例如:下面的日期集{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] 会导致除以零。一种避免被零除的方法称为 smoothing . “平滑”数据的最简单方法是使用加一平滑,您只需将每个值加一(因此今天变为 1,明天变为 2,下周变为 8,等等)。

现在最简单的部分是规范化这些值,以便它们总和为 1。

sum = val[1] + val[2] + ... + val[n]
weight[i] = val[i]/sum for each i

关于algorithm - 如何决定权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041867/

相关文章:

algorithm - 建设性的实体几何网格

algorithm - 违约

.net - 在深度优先搜索期间检测系谱图中的循环

algorithm - 寻找最优解的动态算法

algorithm - 创建歌曲列表算法

performance - 距离近似?

c++ - 在 2 个限制之间的 C/C++ 中生成随机素数

algorithm - 一个关于数据结构的谜题

vb.net - 在 vb.net 中查找列表值的所有组合(笛卡尔积)

c - 从UINT16到UINT8提取和组合位的更快方法