星级评定,实施 Wilson 评分区间

发布于 2024-12-20 19:51:12 字数 998 浏览 2 评论 0原文

class Rating
{
  public static function ratingAverage($positive, $total, $power = '0.05')
{
if ($total == 0)
  return 0;

$z = Rating::pnormaldist(1-$power/2,0,1);
$p = 1.0 * $positive / $total;
$s = ($p + $z*$z/(2*$total) - $z * sqrt(($p*(1-$p)+$z*$z/(4*$total))/$total))/(1+$z*$z/$total);
return $s;
  } 

 public static function pnormaldist($qn)
{
  $b = array(
  1.570796288, 0.03706987906, -0.8364353589e-3,
  -0.2250947176e-3, 0.6841218299e-5, 0.5824238515e-5,
  -0.104527497e-5, 0.8360937017e-7, -0.3231081277e-8,
  0.3657763036e-10, 0.6936233982e-12);

if ($qn < 0.0 || 1.0 < $qn)
  return 0.0;

if ($qn == 0.5)
  return 0.0;

$w1 = $qn;

if ($qn > 0.5)
  $w1 = 1.0 - $w1;

$w3 = - log(4.0 * $w1 * (1.0 - $w1));
$w1 = $b[0];

for ($i = 1;$i <= 10; $i++)
  $w1 += $b[$i] * pow($w3,$i);

if ($qn > 0.5)
  return sqrt($w1 * $w3);

return - sqrt($w1 * $w3);
 }
}

在根据 5 星评级系统(其中 1 星 = 1 分)计算平均评级时,我可以利用这一点吗?如果是这样,我想要一个使用链接类的示例。或者我应该选择“贝叶斯估计”之类的东西?

class Rating
{
  public static function ratingAverage($positive, $total, $power = '0.05')
{
if ($total == 0)
  return 0;

$z = Rating::pnormaldist(1-$power/2,0,1);
$p = 1.0 * $positive / $total;
$s = ($p + $z*$z/(2*$total) - $z * sqrt(($p*(1-$p)+$z*$z/(4*$total))/$total))/(1+$z*$z/$total);
return $s;
  } 

 public static function pnormaldist($qn)
{
  $b = array(
  1.570796288, 0.03706987906, -0.8364353589e-3,
  -0.2250947176e-3, 0.6841218299e-5, 0.5824238515e-5,
  -0.104527497e-5, 0.8360937017e-7, -0.3231081277e-8,
  0.3657763036e-10, 0.6936233982e-12);

if ($qn < 0.0 || 1.0 < $qn)
  return 0.0;

if ($qn == 0.5)
  return 0.0;

$w1 = $qn;

if ($qn > 0.5)
  $w1 = 1.0 - $w1;

$w3 = - log(4.0 * $w1 * (1.0 - $w1));
$w1 = $b[0];

for ($i = 1;$i <= 10; $i++)
  $w1 += $b[$i] * pow($w3,$i);

if ($qn > 0.5)
  return sqrt($w1 * $w3);

return - sqrt($w1 * $w3);
 }
}

Can I make use of this when calculating the average rating based on a 5 star rating system (where 1 star = 1 point)? And if so, I would like an example using the linked class. Or should I go for something like the "Bayesian estimate"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨的味道风的声音 2024-12-27 19:51:12

我认为这是不可能的。 Wilson 间隔仅适用于 2 个变量。但是,您可以计算 5 星级评级的方差,而不是使用二项式分布中的正数或成功数: http://www.mathsisfun.com/data/standard-deviation.html。这是一个改编的威尔逊函数: http://www.goproblems.com/test/wilson/wilson.php?v1=0&v2=0&v3=3&v4=0&v5=0

I don't think this is possible. Wilson intervall is for 2 variables only. But instead of using the positive or successes in a binominal distribution you can calculate the variance of the 5-star rating: http://www.mathsisfun.com/data/standard-deviation.html. Here is an adapted wilson function: http://www.goproblems.com/test/wilson/wilson.php?v1=0&v2=0&v3=3&v4=0&v5=0

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文