问题标签 [weighted-average]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1550 浏览

python - 如何在 Python 中聚合时间序列?

我有两个不同的时间序列,时间戳部分重叠:

代表以下数据:

我想用系数 a(0.3) 和 b(0.7) 计算每天的加权平均值,同时忽略缺失值:

当我第一次尝试对齐这些时间序列时:

我得到正确屏蔽的时间序列:

但是当我这样做时a1 * 0.3 + b1 * 0.7,它会忽略仅存在于一个时间序列中的值:

我应该怎么做才能收到期待的?

编辑:答案也应该适用于两个以上具有不同权重和不同缺失值的初始时间序列。

因此,如果我们有四个权重为 T1(0.1)、T2(0.2)、T3(0.3) 和 T4(0.4) 的时间序列,它们在给定时间戳的权重将是:

0 投票
1 回答
6296 浏览

arrays - 如何计算数组单元数组的加权平均值?

我之前的问题的概括中,如何对单元元素(它们本身是并且应该保持数组本身)执行加权平均?


我将首先像这样修改gnovice 的答案

在此之前确保weight具有正确的形状。我认为需要处理的三种情况是

  1. weight = 1(或任何常数)=> 返回通常的平均值
  2. numel(weight) == length(c) => weight 是每个单元元素 c{n} (但对于固定 n 的每个数组元素相等)
  3. numel(weight) == numel(cell2mat(c)) => 每个数组元素都有自己的权重...

案例 1 很简单,案例 3 不太可能发生,所以目前我对案例 2 感兴趣:如何将权重转换为一个数组,使得M.*weight上述总和具有正确的维度?当然,也可以理解显示获得加权平均值的另一种方法的答案。


编辑事实上,如果权重与 c 具有相同的结构,则案例 3 甚至比案例 1更微不足道(多么重言式,道歉) 。

这是我对案例 2 的意思的示例:

应该返回

(例如对于第一个元素 (2*1 + 1*4)/(2+1) = 2)

0 投票
3 回答
221 浏览

algorithm - 根据不同的选民人数调整选票

我有一个 1 到 5 的投票系统,考虑到可能投出的总票数,我正在尝试找出找到最受欢迎的项目的最佳方法。为了获得投票总数,我将“1”票计为-3,“2”票计为-2,“3”票计为+1,“4”票计为+2,“5”票计为+3,所以“1”票将抵消“5”票,反之亦然。

对于这个例子,假设我们有 3 部电影在 3 个不同规模的影院放映。

电影 1:800 个座位 / 电影 2:400 个座位 / 电影 3:180 个座位

在某种程度上,我们根据座位限制了总票数,所以我希望小影院的电影不会自动被大影院的电影淹没。较大的剧院可能会有更多的选票,从而导致更高的总分。


编辑 10/18:

好吧,希望我能更好地解释这一点。我正在为一个电影节工作,我们正在对电影节中每部电影的首映进行投票。因此,根据每个影院的大小,每部电影将拥有从 0 到最大票数。我正在寻找 3 个类别中最受欢迎的电影:叙事、纪录片、短片。我所说的受欢迎是指最高平均票数和票数的组合。

似乎加权平均数是我正在寻找的,对较大剧院的投票给予较小的权重,而对较小剧院的投票给予更多的权重以平衡事情。

0 投票
3 回答
1891 浏览

algorithm - 有效保存加权移动平均的数据结构/算法

在存储日志记录时,我想总结许多不同类别的移动平均值。想象一个服务,它一次保存 Web 服务器日志一个条目。让我们进一步想象一下,我们无权访问记录的记录。因此,我们只看到它们一次,但以后无法访问它们。

对于不同的页面,我想知道

  • 总点击数(简单)
  • “最近”的平均值(比如一个月左右)
  • “长期”平均值(一年以上)

是否有任何巧妙的算法/数据模型可以保存此类移动平均线,而无需通过汇总大量数据来重新计算它们?

我不需要精确的平均值(正好 30 天左右),只需要趋势指标。所以一些模糊性根本不是问题。它应该只是确保新条目的权重高于旧条目。

一种解决方案可能是为每个月自动创建统计记录。但是,我什至不需要过去一个月的统计数据,所以这似乎有点矫枉过正。它不会给我一个移动平均线,而是每个月都换成新的值。

0 投票
3 回答
10468 浏览

algorithm - 如何使用多因素加权排序提供最相关的结果

我需要提供 2+ 个因素的加权排序,按“相关性”排序。但是,这些因素并不是完全孤立的,因为我希望一个或多个因素影响其他因素的“紧迫性”(权重)。

示例:贡献的内容(文章)可以被向上/向下投票,因此具有评级;他们有一个发布日期,并且还带有类别标签。用户撰写文章并可以投票,并且他们自己可能有也可能没有某种排名(专家等)。可能类似于 StackOverflow,对吧?

我想为每个用户提供按标签分组但按“相关性”排序的文章列表,其中相关性是根据文章的评分和年龄计算的,并且可能受作者排名的影响。IE 几年前写的高排名文章可能不一定像昨天写的中等排名文章那样相关。也许如果一篇文章是由专家写的,它会被视为比“Joe Schmoe”写的更相关。

另一个很好的例子是为酒店分配一个由价格、评级和景点组成的“元分数”

我的问题是,多因素排序的最佳算法是什么?这可能是该问题的重复,但我对任何数量的因素(更合理的预期是 2-4 个因素)的通用算法感兴趣,最好是我不需要的“全自动”功能调整或要求用户输入,我无法解析线性代数和特征向量的古怪。


到目前为止我发现的可能性:

注:S是“排序分数”

  1. “线性加权” - 使用类似的函数:,其中是任意分配的权重,并且是因子的值。您还想规范化(即)。我认为这有点像Lucene 搜索的工作原理S = (w1 * F1) + (w2 * F2) + (w3 * F3)wxFxFFx_n = Fx / Fmax
  2. “Base-N weighted” - 更像是分组而不是加权,它只是一个线性加权,其中权重以 base-10 的倍数增加(与CSS 选择器特异性相似的原理),因此更重要的因素显着更高: .S = 1000 * F1 + 100 * F2 + 10 * F3 ...
  3. 估计真实价值(ETV) ——这显然是谷歌分析在他们的报告中引入的,其中一个因素的价值影响(权重)另一个因素——结果是对更“统计显着”的值进行排序。该链接很好地解释了它,所以这只是等式: ,其中“更重要”的因素(文章中的“跳出率”)是“显着性修改”因素(文章中的“访问”)。S = (F2 / F2_max * F1) + ((1 - (F2 / F2_max)) * F1_avg)F1F2
  4. 贝叶斯估计- 看起来与 ETV 非常相似,这就是 IMDb 计算其评级的方式。有关解释,请参阅此 StackOverflow 帖子;equation: ,其中与#3 相同,并且是“显着性”因子的最小阈值限制(即不应考虑小于 X 的任何值)。S = (F2 / (F2+F2_lim)) * F1 + (F2_lim / (F2+F2_lim)) × F1_avgFxF2_lim

选项 #3 或 #4 看起来很有希望,因为您不必像在 #1 和 #2 中那样选择任意加权方案,但问题是如何针对两个以上的因素进行此操作?

我还遇到了两因素加权算法的 SQL 实现,这基本上是我最终需要编写的。

0 投票
4 回答
2317 浏览

c# - 在 c# 中按重量选择随机元素的最简洁方法是什么?

让我们假设:

List<element>哪个元素是:

我想要实现的是,通过权重随机选择一个元素。例如:

所以

  • 被选中的几率Element_1是 100/(100+50+200)=28.57%
  • 被选中的几率Element_2是 50/(100+50+200)=14.29%
  • 被选中的几率Element_3是 200/(100+50+200)=57.14%

我知道我可以创建一个循环,计算总数等...

我想学习的是,Linq 在一行(或尽可能短)中执行此操作的最佳方法是什么,谢谢。

更新

我在下面找到了答案。我学到的第一件事是:Linq 不是魔法,它比精心设计的循环慢

所以我的问题变成了按重量找到一个随机元素,(没有尽可能短的东西:)

0 投票
2 回答
771 浏览

r - 用 apply 替换 for 循环以提高性能(使用 weighted.mean)

我是一个 R 新手,所以希望这对你们中的一些人来说是一个可以解决的问题。我有一个包含超过一百万个数据点的数据框。我的目标是计算一个改变起点的加权平均值。

为了说明考虑这个框架( data.frame(matrix(c(1,2,3,2,2,1),3,2)) )

其中 X1 是数据,X2 是采样权重。

我想计算 X1 从起点 1 到 3、2:3 和 3:3 的加权平均值。

我简单地写了一个循环:

使用我的真实数据这是不可能计算的,因为每次迭代都会更改 data.frame 并且计算需要数小时而没有结果。

有没有办法使用 apply 命令来实现不同的起点,从而提高性能?

问候,鲁本

0 投票
8 回答
23656 浏览

algorithm - 如何迭代地计算运行加权平均值,以便最后一个值最重要?

我想实现一个迭代算法,它计算加权平均值。具体的权重法则无关紧要,但对于最新的值应该接近 1,对于最旧的值应该接近 0。

该算法应该是迭代的。即它不应该记住所有以前的值。它应该只知道一个最新的值和任何关于过去的聚合信息,比如以前的平均值、总和、计数等。

可能吗?

例如,以下算法可以是:

它会给出指数递减的权重,这可能不好。是否可以逐步减轻体重或其他什么?

编辑 1

称重法的要求如下:

1)重量减少到过去 2)我有一些平均或特征持续时间,因此这个持续时间较旧的值比新的值要小得多 3)我应该能够设置这个持续时间

编辑 2

我需要以下内容。假设v_i是值,v_1第一个在哪里。还假设w_i是权重。但是w_0是最后一个。

所以,在第一个值出现之后,我有了第一个平均值

在第二个值 v_2 来之后,我应该有平均值

有了下一个值,我应该有

请注意,体重曲线与我一起移动,而我正在沿着价值序列移动。

即每个值都不是一直都有自己的权重。我的目标是在过去时降低体重。

0 投票
3 回答
2406 浏览

sql-server-2008 - 计算存储过程中的加权(贝叶斯)平均分数/索引?

我有一个 MS SQL Server 2008 数据库,用于存储提供食物的场所(咖啡馆、餐馆、小餐馆等)。在连接到该数据库的网站上,人们可以从 1 到 3 对这些地方进行评分。

在网站上有一个页面,人们可以在其中查看某个城市中排名前 25 位(评分最高)的热门列表。数据库结构看起来像这样(表中存储了更多信息,但这里是相关信息): 数据库结构:城市->地方->投票

一个地方位于一个城市,选票放在一个地方。

到目前为止,我刚刚计算了每个地方的平均投票分数,其中我将某个地方的所有投票总和除以该地方的投票数,如下所示(伪代码):

如果一个地方没有选票,我还必须处理除以零。所有这些都是在存储过程中完成的,该存储过程获取我想在顶部列表中显示的其他数据。以下是获取投票得分最高的前 25 个位置的当前存储过程:

正如您所看到的,它获取的不仅仅是投票分数——我需要有关该地点、其所在城市等的数据。这很好,但是有一个大问题:投票分数太简单了,因为它没有考虑投票的数量。使用简单的计算方法,一票得分为 3 的地方最终将在列表中高于一个十四票得分为 3 且一票得分为 2 的地方:

为了解决这个问题,我一直在研究使用某种形式的加权平均/加权指数。我发现了一个看起来很有希望的真正贝叶斯估计的例子。它看起来像这样:

当我尝试在存储过程中实现这个加权评级时,问题就开始了——它很快变得复杂,我陷入了括号中,并且对存储过程的作用松散了跟踪。

现在我需要一些帮助来解决两个问题:

这是为我的网站计算加权指数的合适方法吗?

当在存储过程中实现时,这个(或其他合适的计算方法)会是什么样子?

0 投票
13 回答
97073 浏览

algorithm - 用于计算 5 星评级的算法

我需要像亚马逊网站上的那样计算 5 星评级。我已经进行了足够多的搜索以找到最好的算法,但我无法得到正确的答案。例如,如果这些是评级

共 478 条评论

亚马逊计算得出这是“5 颗星中的 4.1 颗星”。谁能告诉我这个数字是怎么得出的?我不能仅仅通过平均来得到这个。