কেএল ডাইভারজেন্স হ'ল ফর্মের ইন্টিগ্রালের একটি পার্থক্য
$$ q এককালাইন {আমি (এ, বি, সি, ডি) এবং = \ ইন্টিটি ^ {\ ইনফটি} \ লগ \ বামে (\ frac {e ^ {- x / a} x ^ {b-1}} {a ^ বি \ গামা (খ)} \ ডান) rac frac {e ^ {- x / c} x ^ {d-1}} {c ^ d \ গামা (ডি)} ডিএক্স \
& = - rac frac {1} {a} \ int_0 ^ \ infty \ frac {x ^ de ^ {- x / c}} {c ^ d \ গামা (ডি)} \, ডিএক্স - \ লগ (এ ^ বি Am গামা (খ)) _0 অন্তত ^ \ \ ইনফটি \ ফ্র্যাক {ই ^ {- এক্স / সি} এক্স ^ {ডি -1} {সি ^ ডি \ গামা (ডি)} \, ডিএক্স \ এবং \ কোয়াড + (বি- 1) \ int_0 ^ \ infty \ log (x) rac frac {e ^ {- x / c} x ^ {d-1} {c ^ d \ Gamma (d)} \, dx \
& = - rac frac {cd} {a} - \ লগ (a ^ b \ গামা (খ)) + (খ -1) \ int_0 ^ \ infty \ লগ (এক্স) \ frac {e ^ {- এক্স / সি } x ^ {d-1} {c ^ d \ গামা (ডি)} \, ডিএক্স} $$
আমাদের কেবল ডান হাতের অবিচ্ছেদ্য কাজ করতে হবে, যা পর্যবেক্ষণ করে প্রাপ্ত হয় by
∂∂dΓ(d)====∂∂d∫∞0e−x/cxd−1cddx∂∂d∫∞0e−x/c(x/c)d−1cdx∫∞0e−x/cxd−1cdlogxcdx∫∞0log(x)e−x/cxd−1cddx−log(c)Γ(d).
কোথা হইতে
b−1Γ(d)∫∞0log(x)e−x/c(x/c)d−1dx=(b−1)Γ′(d)Γ(d)+(b−1)log(c).
পূর্ববর্তী ফলন মধ্যে প্লাগ ইন
I(a,b,c,d)=−cda−log(abΓ(b))+(b−1)Γ′(d)Γ(d)+(b−1)log(c).
এবং Γ ( ক , খ ) এর মধ্যে কেএল ডাইভার্জেন্স সমান I ( c , d , c , d ) - I ( a , b , c , d ) , যা একত্র করার জন্য সোজা।Γ(c,d)Γ(a,b)I(c,d,c,d)−I(a,b,c,d)
বাস্তবায়ন বিশদ
গামা ফাংশনগুলি দ্রুত বৃদ্ধি পায়, যাতে ওভারফ্লো এড়াতে গামার গণনা করবেন না এবং এর লোগারিডম গ্রহণ করবেন না: পরিবর্তে লগ-গামা ফাংশনটি ব্যবহার করুন যা কোনও পরিসংখ্যানগত কম্পিউটিং প্ল্যাটফর্মে পাওয়া যাবে (সেই বিষয়ে এক্সেল সহ)।
অনুপাত এর লগারিদমিক ব্যুৎপন্ন হয় Γ , সাধারণত বলা ψ , digamma ফাংশন। যদি এটি আপনার কাছে না পাওয়া যায় তবে উইকিপিডিয়া নিবন্ধে বর্ণিত হিসাবে এটি আনুমানিক করার জন্য তুলনামূলকভাবে সহজ উপায় রয়েছে ।Γ′(d)/Γ(d)Γ,ψ,
এখানে, উদাহরণস্বরূপ, আই এরR
পরিপ্রেক্ষিতে সূত্রের প্রত্যক্ষ বাস্তবায়ন । এটি বীজগণিতভাবে ফলাফলকে সহজ করার কোনও সুযোগকে কাজে লাগায় না, যা এটি আরও কিছুটা দক্ষ করে তোলে ( ψ এর অনর্থক গণনা দূর করে )।Iψ
#
# `b` and `d` are Gamma shape parameters and
# `a` and `c` are scale parameters.
# (All, therefore, must be positive.)
#
KL.gamma <- function(a,b,c,d) {
i <- function(a,b,c,d)
- c * d / a - b * log(a) - lgamma(b) + (b-1)*(psigamma(d) + log(c))
i(c,d,c,d) - i(a,b,c,d)
}
print(KL.gamma(1/114186.3, 202, 1/119237.3, 195), digits=12)