超幾何機率分佈

應用場景

在雲端電腦機房中,有三類機型:A,B,C 電腦,數量分別是:P,Q,R。
有一個網路負載平衡器,會週期性隨機選取 n 台電腦提供服務,已提供過服務的電腦在該週期內,不會再被選取。

  • 求選取 A 機型電腦 p 台之機率如何?
  • 選取上述電腦後,再選取 B 機型電腦 q 台之機率如何?
推導 GNU R 統計程式語言

超幾何機率公式

f(x) 經過 n 次測試後,拿出成功項目 x 個的機率。
n 測試次數。
N 待測試項目總數。
r 成功項目個數。

選取 A 機型電腦 p 台之機率

  • 把所有非 A 機型電腦歸為一類。

  • 與選擇非 A 機型 n - p 台,其機率相同。

再選取 B 機型電腦 q 台之機率

  • A 機型既然選定,B 機型只能從 n - p 台中選擇。

  • 與選擇 C 機型 r 台,其機率相同。

hyperGeometricProbabilityOfModelA <-
function(
numOfAllServers,
numOfModelA,
numOfThreadsForLoadBalancer,
numOfThreadsForModelA)
{


numOfOtherModels <- numOfAllServers - numOfModelA
numOfThreadsForOtherModels <-
numOfThreadsForLoadBalancer - numOfThreadsForModelA

probabilityOfModelA <- choose(numOfModelA, numOfThreadsForModelA) *
choose(numOfOtherModels, numOfThreadsForOtherModels) /
choose(numOfAllServers, numOfThreadsForLoadBalancer)

probabilityOfModelA
}


parameterVector <- vector(mode = "integer", length = 3)
parameterVector[1] <- 100 # numOfAllServers
parameterVector[2] <- 25 # numOfModelA
parameterVector[3] <- 10 # numOfThreadsForLoadBalancer

probabilityValuesVector <- vector(mode = "double", length = 2)

xRangeVector <- c(0:10) # numOfThreadsForModelA
probabilityVector <- vector(mode = "double", length = length(xRangeVector))

# Populate HyperGeometric Probability for desired numOfThreadsForModelA
for (numOfThreadsForModelA in xRangeVector) {
probabilityVector[numOfThreadsForModelA + 1] <-
hyperGeometricProbabilityOfModelA(parameterVector[1],
parameterVector[2], parameterVector[3], numOfThreadsForModelA)
}


# Draw Diagram
plot(xRangeVector, probabilityVector, main="Hyper Geometric Probability",
ylab="Probability", xlab="num Threads of ModelA")

討論

  • 超幾何機率分佈曲線,呈『鐘型』狀。

    • N = 100
    • n = 10
    • r = 25
    • x = (0..10)
  • 超幾何機率分佈之斜率曲線,其形狀亦呈『鐘型』狀。

  • 其極值發生在『期望值』附近。

    • E(X) = nr / N = 2.5
    • 但因數值為離散,且 f'(3) 已經轉為負值,故其極值為 2。
ĉ
李智,
2011年4月9日 下午6:05
ċ
HyperGeometricProbabilityChart.R
(1k)
李智,
2011年4月9日 下午8:27