كيفية حساب تباعد 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.

مصادر إضافية

تشرح البرامج التعليمية التالية كيفية تنفيذ العمليات الشائعة الأخرى في بايثون:

كيفية إنشاء مصفوفة الارتباط في بايثون
كيفية إنشاء مصفوفة التغاير في بايثون

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *