Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 适用于3个分数的评分算法_Php_Algorithm_Math_Bayesian_Scoring - Fatal编程技术网

Php 适用于3个分数的评分算法

Php 适用于3个分数的评分算法,php,algorithm,math,bayesian,scoring,Php,Algorithm,Math,Bayesian,Scoring,我有几个对象,每个对象都应该由用户根据[q]质量、[v]值和[s]适用性进行评级 目前,我正在通过得分=(q+v+s/3)检索每个对象的总平均值-也就是说,我遇到了一个流行问题,即1级10,10,10的对象的评级高于3级10,9,9 | 9,10,10,10,8的对象-不好 我想对每个对象进行总分。是否有最适合的算法?最终结果将是在PHP环境中。一个例子可能是目前列出的每个网站的大致情况 我环顾四周,可以看到和贝叶斯方法被建议,我不知道这将如何匹配我的要求,虽然作为需要知道一个“最低” 再仔细研

我有几个对象,每个对象都应该由用户根据[q]质量、[v]值和[s]适用性进行评级

目前,我正在通过
得分=(q+v+s/3)
检索每个对象的总平均值-也就是说,我遇到了一个流行问题,即1级
10,10,10
的对象的评级高于3级
10,9,9 | 9,10,10,10,8
的对象-不好

我想对每个对象进行总分。是否有最适合的算法?最终结果将是在PHP环境中。一个例子可能是目前列出的每个网站的大致情况

我环顾四周,可以看到和贝叶斯方法被建议,我不知道这将如何匹配我的要求,虽然作为需要知道一个“最低”

再仔细研究一下,我发现了这一点——应用到一些SQL中,这会起作用吗?有什么问题吗

<?php

$avg_num_votes = 17; // Average number of reviews on all objects
$avg_rating = 4.5; // Average review for all objects
$this_num_votes = 17; // Number of reviews on this object
$this_rating = 4; // Review for this object

$bayesian_rating = (($avg_num_votes * $avg_rating) + ($this_num_votes * $this_rating)) / ($avg_num_votes + $this_num_votes);
echo $bayesian_rating;

//(FR) = ((av * ar) + (v × r)) / (av + v)
//(FR) = ((17 * 4.5) + (17 * 4)) / (17 + 17)
//(FR) = (76.5 + 68) / 34
//(FR) = 162.5 / 34
//(FR) = 4.25
?>

实现起来很简单,但您必须选择一个参数。这就是所谓的“贝叶斯估计”或“贝叶斯方法”,尽管这并不完全正确,还有许多其他技术可以更准确地对不同的先验分布选择进行贝叶斯更新

选择M,有些人称之为“最低”评级数。计算所有类别的平均评级A。除了用户的评分外,给每个对象M个平均评分。如果你改变M,这会改变你对一个小样本的信任程度。M值越大,对少量评级的信任度越低

你不需要根据三个分数来调整这一点。将总数称为评级


例如,假设任意位置的平均评级为25,您选择了M=3,并将一个评级为30的对象与一个评级为27的对象进行比较。对于第一个,计算平滑评级为
(30*1+25*3)/(1+3)=26.25
。第二个平滑等级为
(27*7+25*3)/(7+3)=26.4
。因此,第二个对象的平滑等级将略高于第一个对象

这是一个样本量的简单例子(来自统计学)。因为你的样本量很小,所以你的信心很低。因此,虽然你的一个评分是10分,但对该评分的信心很低。在信心合理之前,你需要多少评级?这取决于提供评级的人口规模。我想我理解@kainaw-什么决定了你需要多少评级?意见总金额的某个百分比?你可以在网上找到许多样本大小计算器(谷歌“样本大小计算器”)。您需要选择置信度百分比(通常为95%)、人口规模(给出评级的总人数)和置信区间(这是当有人说评级为8+-1,区间为1时所看到的)。从那里,你可以得到一个样本大小。