而不是試圖操縱威爾遜的算法來做5星評級系統。你爲什麼不看看不同的算法?這是什麼imdb使用他們的前250:Bayesian Estimate
至於說明在威爾遜的算法數學,下面是張貼在您的第一篇文章的鏈接。它是用Ruby編寫的。
require 'statistics2'
def ci_lower_bound(pos, n, power)
if n == 0
return 0
end
z = Statistics2.pnormaldist(1-power/2)
phat = 1.0*pos/n
(phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end
如果您想另一個例子,這裏是一個在PHP中: http://www.derivante.com/2009/09/01/php-content-rating-confidence/
編輯:似乎derivante.com不再身邊。您可以在archive.org - https://web.archive.org/web/20121018032822/http://derivante.com/2009/09/01/php-content-rating-confidence/上看到原始文章,並添加了以下文章中的代碼。
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);
}
}
至於在SQL中這樣做,SQL所有這些數學函數已經在它的庫中。如果我是你,我會在你的應用程序中這樣做。每隔一段時間(幾個小時?幾天),讓您的應用程序更新您的數據庫,而不是隨時進行此操作,否則您的應用程序將變得非常緩慢。
p =帽子的隨機變量P的估計值。\ n 向後耶穌魚=α,這是你的意義截止 – twolfe18
+1 「倒退耶穌魚」,好像魚有方向 – ash