كيفية حساب تباعد kl في لغة بايثون (مع مثال)
في الإحصاء، يعد تباعد كولباك-ليبلر (KL) مقياسًا للمسافة يحدد الفرق بين توزيعين احتماليين.
إذا كان لدينا توزيعان احتماليان، P و Q، فإننا نكتب عمومًا تباعد KL باستخدام الرمز KL(P || Q)، والذي يعني “اختلاف P عن Q”.
ونحسبها باستخدام الصيغة التالية:
KL(P || Q) = ΣP(x) ln (P(x) / Q(x))
إذا كان تباعد KL بين توزيعين صفراً، فهذا يشير إلى أن التوزيعات متطابقة.
يمكننا استخدام الدالة scipy.special.rel_entr() لحساب تباعد KL بين توزيعين احتماليين في بايثون.
يوضح المثال التالي كيفية استخدام هذه الوظيفة عمليًا.
مثال: حساب تباعد KL في بايثون
لنفترض أن لدينا التوزيعتين الاحتماليتين التاليتين في بايثون:
ملحوظة : من المهم أن يكون مجموع احتمالات كل توزيع هو واحد.
#define two probability distributions
P = [.05, .1, .2, .05, .15, .25, .08, .12]
Q = [.3, .1, .2, .1, .1, .02, .08, .1]
يمكننا استخدام الكود التالي لحساب تباعد KL بين التوزيعتين:
from scipy. special import rel_entr
#calculate (P || Q)
sum(rel_entr(P, Q))
0.589885181619163
يبلغ انحراف KL لتوزيع P عن توزيع Q حوالي 0.589 .
لاحظ أن الوحدات المستخدمة في هذا الحساب تُعرف باسم nats ، وهي اختصار للوحدة الطبيعية للمعلومات .
لذلك يمكننا أن نقول أن تباعد KL هو 0.589 ناتس .
لاحظ أيضًا أن تباعد KL ليس مقياسًا متماثلًا. هذا يعني أننا إذا قمنا بحساب انحراف KL لتوزيع Q عن توزيع P، فمن المحتمل أن نحصل على قيمة مختلفة:
from scipy. special import rel_entr
#calculate (Q || P)
sum(rel_entr(Q, P))
0.497549319448034
يبلغ انحراف KL لتوزيع Q عن توزيع P حوالي 0.497 ناتس .
ملاحظة : تستخدم بعض الصيغ السجل ذو الأساس 2 لحساب تباعد KL. في هذه الحالة نحن نتحدث عن الاختلاف من حيث البتات بدلا من nats.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ العمليات الشائعة الأخرى في بايثون:
كيفية إنشاء مصفوفة الارتباط في بايثون
كيفية إنشاء مصفوفة التغاير في بايثون