标签: weighted-average

用于计算5星评级的算法

我需要计算亚马逊网站上的五星评级.我已经做了足够的搜索来找到最好的算法,但我无法得到正确的答案.例如,如果这些是评级

5 star - 252
4 star - 124
3 star - 40
2 star - 29
1 star - 33
Run Code Online (Sandbox Code Playgroud)

共478条评论

亚马逊计算出这是"4.1星,5星".谁能告诉我这个数字是如何得出的?我只是通过平均而无法做到这一点.

algorithm weighted-average rating-system

61
推荐指数
6
解决办法
6万
查看次数

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

我需要对2+个因子进行加权排序,按"相关性"排序.然而,这些因素并非完全孤立,因为我希望一个或多个因素影响其他因素的"紧迫性"(权重).

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

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

另一个很好的例子是为酒店分配一个由价格,评级和景点组成的"元评分".

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


到目前为止我找到的可能性:

注意:S是"排序分数"

  1. "线性加权" - 使用如下函数:,其中任意指定权重,并且是因子的值.你也想要标准化(即).我认为这有点像Lucene搜索是如何工作的.S = (w1 * F1) + (w2 * F2) + (w3 * F3)wxFxFFx_n = Fx / Fmax
  2. "Base-N加权" - 更像是分组而不是加权,它只是一个线性加权,其中权重增加了基数10的倍数(与CSS选择器特异性相似的原则),因此更重要的因素显着更高: .S = 1000 * F1 + 100 * F2 …

sorting algorithm bayesian relevance weighted-average

29
推荐指数
2
解决办法
8999
查看次数

用LINQ计算加权平均值

我的目标是根据另一个表主键从一个表中获得加权平均值.

示例数据:

表格1

Key     WEIGHTED_AVERAGE

0200    0
Run Code Online (Sandbox Code Playgroud)

表2

ForeignKey    Length    Value
0200          105       52
0200          105       60
0200          105       54
0200          105       -1
0200          47        55
Run Code Online (Sandbox Code Playgroud)

我需要根据段的长度得到加权平均值,我需要忽略值-1.我知道如何在SQL中执行此操作,但我的目标是在LINQ中执行此操作.它在SQL中看起来像这样:

SELECT Sum(t2.Value*t2.Length)/Sum(t2.Length) AS WEIGHTED_AVERAGE
FROM Table1 t1, Table2 t2
WHERE t2.Value <> -1
AND t2.ForeignKey = t1.Key;
Run Code Online (Sandbox Code Playgroud)

我仍然是LINQ的新手,并且很难弄清楚我将如何翻译它.结果加权平均值应该大约为55.3.谢谢.

c# linq weighted-average

20
推荐指数
1
解决办法
1万
查看次数

什么是Youtube评论系统排序算法?

Youtube提供两种排序选项:最新的第一和最高评论."最新的第一个"非常简单,我们只是根据他们的发布日期对评论进行排序.但"热门评论"似乎要比"大拇指"排序要复杂得多.

Youtube评论系统

经过短暂的研究,我发现评论的顺序取决于这些:

  • "拇指向上"和"拇指向下"的数量
  • 发布日期
  • 该评论的回复数量

但我不知道Youtube如何使用这些信息来决定顺序,比如什么信息更重要,什么不重要.

有没有关于这个主题的文章我可以参考?

谢谢!

youtube sorting algorithm weighted-average

20
推荐指数
1
解决办法
1万
查看次数

如何迭代计算运行加权平均值,使最后的值最重?

我想实现一个迭代算法,计算加权平均值.具体权重法无关紧要,但最新值应接近1,最接近0.

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

可能吗?

例如,以下算法可以是:

void iterate(double value) {
   sum *= 0.99;
   sum += value;
   count++;
   avg = sum / count;
}
Run Code Online (Sandbox Code Playgroud)

它会给指数减少的重量,这可能不好.是否有可能逐步减轻体重?

编辑1

称重法的要求如下:

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

编辑2

我需要以下内容.假设v_i是值,其中v_1第一个是.还假设w_i是权重.但是w_0最后一次.

所以,在第一个价值来之后,我有第一个平均值

 a_1 = v_1 * w_0
Run Code Online (Sandbox Code Playgroud)

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

 a_2 = v_1 * w_1 + v_2 * w_0
Run Code Online (Sandbox Code Playgroud)

我应该有下一个值

 a_3 = v_1 * w_2 + v_2 * w_1 + v_3 * w_0
Run Code Online (Sandbox Code Playgroud)

请注意,当我按照值序列移动时,重量轮廓随着我移动.

即每个值都没有自己的重量.我的目标是在过去的同时降低体重.

iteration algorithm weighted-average

13
推荐指数
3
解决办法
2万
查看次数

STL /范围算法计算加权平均值

假设我有一个等级向量,其中等级是

struct Grade{
   const int grade;
   const int ECTS; // weight
};
Run Code Online (Sandbox Code Playgroud)

是否有STL / range-v3算法/算法使我能够做到这一点?

我知道我可以std:: accumulate用一些花哨的类型作为累加器(记住重量的总和)来做到这一点,但是我正在寻找一个更简单的替代方法(如果存在)。

c++ stl weighted-average range-v3

13
推荐指数
2
解决办法
312
查看次数

创建加权平均值 - 为NULL值删除权重

所以有SQL函数AVG(),它取一列中所有值的平均值,忽略所有NULL值.如果需要进行加权平均,那么他们只需使用SUM(值*权重)/ SUM(权重)和Group By子句.

如果我愿意这样做后者,但我的一些数值是NULL,那么我将如何去告诉SQL忽略与在SUM(重量)函数NULL值的观察权重?

我的另一个问题是我一次平均取90个不同的列,所以我想避免为这个计算制作90个新的权重变量.

如果我明白了这一点,请告诉我.

我正在使用SQL Server 2005

sql sql-server weighted-average

12
推荐指数
1
解决办法
3万
查看次数

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

让我们假设:

List<element> 哪个元素是:

public class Element(){
   int Weight {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是,按重量随机选择一个元素.例如:

Element_1.Weight = 100;
Element_2.Weight = 50;
Element_3.Weight = 200;
Run Code Online (Sandbox Code Playgroud)

所以

  • 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在一行(或尽可能短)中做到这一点的最佳方法,谢谢.

UPDATE

我在下面找到了答案.我学到的第一件事是:Linq不是魔术,它比设计良好的循环慢.

所以我的问题就是按重量找到一个随机元素,(尽可能短的东西:)

c# linq weighted-average weighted

11
推荐指数
2
解决办法
1762
查看次数

如何计算pandas中一行中所有元素的加权和?

我有一个包含多列的pandas数据框.我想weighted_sum从行中的值和另一个列向量数据帧创建一个新列weight

weighted_sum 应具有以下值:

row[weighted_sum] = row[col0]*weight[0] + row[col1]*weight[1] + row[col2]*weight[2] + ...

我找到了这个功能sum(axis=1),但它不会让我倍增weight.

编辑:我改变了一点.

weight 看起来像这样:

     0
col1 0.5
col2 0.3
col3 0.2
Run Code Online (Sandbox Code Playgroud)

df 看起来像这样:

col1 col2 col3
1.0  2.2  3.5
6.1  0.4  1.2
Run Code Online (Sandbox Code Playgroud)

df*weight返回一个充满Nan值的数据帧.

python calculated-columns weighted-average dataframe pandas

11
推荐指数
2
解决办法
2万
查看次数

调整项目从列表中选择的机会

我有一个项目清单.当我创建列表时,每个项目都有相同的机会被选中.但是当一个项目被选中时,它的机会会下降,而其他机会会上升.如果在此过程中添加了一个新项目,那么它应该被选中的机会最大,并且在选中它时机会会下降.我正在寻找一个可以实现这个C#的好算法.

Generalizaed想法:我有5个项目,随着时间的推移,所有5个项目将被选中20%的时间.我试图让选择尽可能接近20%,减少对外界的影响.如果存在,将更多/更少地选择它以使其恢复正常.

c# math probability weighted-average

10
推荐指数
2
解决办法
1653
查看次数