مقدمة في سلسلة ماركوف مونتي كارلو
لفهم تقطيع العينات، من الضروري أولاً فهم أساسيات سلسلة ماركوف مونتي كارلو (MCMC). MCMC هي فئة من الخوارزميات التي تستخدم سلسلة ماركوف لإجراء عملية أخذ العينات. سلسلة ماركوف هي سلسلة من المتغيرات العشوائية التي تفي بشرط ماركوف، أي أن احتمال الحالة التالية يعتمد فقط على الحالة الحالية، وليس على تاريخ الحالات السابقة. مونتي كارلو هي مجموعة من الأساليب التي تستخدم العينات العشوائية للحصول على نتائج رقمية. تجمع MCMC بين هذه المفاهيم لأخذ عينات من توزيع احتمالي.
الفكرة الأساسية لـ MCMC هي بناء سلسلة ماركوف التي يكون توزيعها الثابت هو التوزيع الاحتمالي المستهدف. ثم يتم استخدام العينات من هذه السلسلة لتقدير خصائص التوزيع المستهدف، مثل المتوسط، والتباين، ومقاييس أخرى. من الصعب في كثير من الأحيان أخذ عينات مباشرة من توزيع معقد، خاصة في الأبعاد العالية. توفر MCMC طريقة بديلة للوصول إلى عينات من هذا التوزيع من خلال تكرار عمليات تقترب تدريجياً من التوزيع المستهدف.
أساسيات تقطيع العينات
تقطيع العينات هي تقنية MCMC بسيطة وفعالة. يعتمد على فكرة بسيطة: لأخذ عينة من متغير عشوائي x من توزيع ما، يمكنك القيام بما يلي:
- أولا، قم باختيار قيمة عشوائية y من التوزيع المنتظم بين 0 و قيمة دالة الكثافة الاحتمالية عند x، أي f(x).
- ثم، قم بتحديد فاصل زمني حول x بحيث تكون قيمة دالة الكثافة الاحتمالية أكبر من أو تساوي y ضمن هذا الفاصل الزمني. هذا الفاصل الزمني يمثل “الشرائح” (slice).
- أخيرا، قم باختيار قيمة عشوائية جديدة لـ x من التوزيع المنتظم ضمن هذه الشريحة.
تكرار هذه العملية يؤدي إلى توليد عينات من التوزيع المستهدف. الفكرة وراء ذلك هي أن كل عملية اختيار عشوائي من الشريحة تضمن الحفاظ على العينات ضمن المناطق ذات الكثافة العالية من التوزيع. يسمح ذلك باستكشاف المساحات الاحتمالية المعقدة بشكل فعال.
خطوات خوارزمية تقطيع العينات
لتوضيح العملية، إليك الخطوات التفصيلية لخوارزمية تقطيع العينات:
- البدء: ابدأ بقيمة أولية x0.
- تحديد الارتفاع: احسب قيمة دالة الكثافة الاحتمالية عند xt، أي f(xt).
- تحديد المستوى: اختر قيمة عشوائية y من التوزيع المنتظم بين 0 و f(xt).
- إيجاد الشريحة:
- ابدأ بفاصل زمني صغير حول xt.
- قم بتوسيع الفاصل الزمني في كلا الاتجاهين حتى تصبح f(x) < y خارج الفاصل الزمني. يمكن أن يتم هذا التوسيع باستخدام خطوات ثابتة أو بطرق أكثر تعقيدًا. الهدف هو إيجاد فاصل زمني يحتوي على xt ويحتوي على جميع القيم التي تكون فيها دالة الكثافة الاحتمالية أكبر من أو تساوي y.
- أخذ العينات من الشريحة: اختر قيمة جديدة لـ xt+1 من التوزيع المنتظم ضمن الشريحة المحددة.
- التكرار: كرر الخطوات من 2 إلى 5 لعدد من التكرارات للحصول على عينات كافية.
ملاحظة مهمة: تختلف طرق إيجاد الشريحة (الخطوة 4) باختلاف التطبيق. بعض الطرق الشائعة تشمل “إيجاد الشريحة الثابتة” و”إيجاد الشريحة التوسعية” و”إيجاد الشريحة المتقلصة”.
مزايا تقطيع العينات
لتقطيع العينات العديد من المزايا التي تجعلها أداة قوية:
- سهولة التنفيذ: الخوارزمية بسيطة نسبيًا في التنفيذ والفهم.
- الاستقلالية عن التكامل: لا تتطلب تقطيع العينات حسابات التكامل المعقدة.
- الكفاءة: في العديد من الحالات، يكون تقطيع العينات فعالًا في أخذ عينات من التوزيعات التي يصعب التعامل معها بطرق أخرى.
- القدرة على التعامل مع التوزيعات متعددة الأبعاد: يمكن تطبيق تقطيع العينات على التوزيعات متعددة الأبعاد، على الرغم من أن الأداء قد يتأثر بـ “لعنة الأبعاد” (curse of dimensionality).
عيوب تقطيع العينات
على الرغم من مزاياه، لتقطيع العينات بعض العيوب:
- الحساسية لاختيار الخطوات: قد يكون أداء الخوارزمية حساسًا لاختيار حجم الخطوة المستخدم في إيجاد الشريحة. اختيار حجم الخطوة صغير جدًا يؤدي إلى استكشاف بطيء، بينما اختيار حجم الخطوة كبير جدًا قد يؤدي إلى عدم كفاءة.
- صعوبة التعامل مع التوزيعات ذات الأبعاد العالية: في الأبعاد العالية، قد يصبح إيجاد الشريحة مكلفًا حسابيًا، و قد تعاني الخوارزمية من مشكلات في التقارب.
- الحاجة إلى معرفة دالة الكثافة الاحتمالية (PDF): تتطلب الخوارزمية معرفة دالة الكثافة الاحتمالية (أو على الأقل، دالة تتناسب معها) للتوزيع المستهدف.
تطبيقات تقطيع العينات
تستخدم تقطيع العينات في مجموعة متنوعة من المجالات، بما في ذلك:
- الإحصاء البايزي: تستخدم لأخذ عينات من التوزيعات اللاحقة في الاستدلال البايزي.
- التعلم الآلي: تستخدم في النماذج الاحتمالية، مثل النماذج المخفية لماركوف (HMMs).
- الفيزياء الإحصائية: تستخدم لمحاكاة الأنظمة الفيزيائية المعقدة.
- التمويل: تستخدم في نمذجة المخاطر وتقييم الأصول.
تحسينات وتقنيات متقدمة
هناك العديد من التحسينات والتقنيات المتقدمة التي يمكن استخدامها لتحسين أداء تقطيع العينات:
- تقطيع العينات المتغيرة: تستخدم هذه التقنية أحجام شرائح متغيرة، مما يسمح باستكشاف أفضل للمساحات الاحتمالية ذات الكثافة المتغيرة.
- تقطيع العينات المتكيفة: تقوم هذه التقنيات بتعديل حجم الخطوة تلقائيًا أثناء التشغيل لتحسين الكفاءة.
- دمج مع تقنيات MCMC أخرى: يمكن دمج تقطيع العينات مع تقنيات MCMC أخرى، مثل خوارزمية Metropolis-Hastings، لتحسين الأداء.
مثال عملي
لنأخذ مثالاً بسيطًا لتوضيح كيفية عمل تقطيع العينات. لنفترض أننا نريد أخذ عينات من توزيع طبيعي بمتوسط 0 وانحراف معياري 1. دالة الكثافة الاحتمالية لهذا التوزيع هي:
f(x) = (1 / √(2π)) * exp(-x2 / 2)
باستخدام تقطيع العينات، سنبدأ بقيمة أولية، على سبيل المثال x0 = 1. بعد ذلك، نختار قيمة y عشوائية من التوزيع المنتظم بين 0 و f(x0). بعد ذلك، نجد الشريحة. على سبيل المثال، يمكننا أن نبدأ بفاصل زمني صغير حول x0 ونوسعه حتى نجد قيم x التي تكون فيها f(x) < y خارج الفاصل الزمني. بعد ذلك، نختار قيمة x جديدة بشكل عشوائي من هذا الفاصل الزمني (الشريحة). نكرر هذه العملية عدة مرات للحصول على عينات من التوزيع الطبيعي.
في هذا المثال البسيط، قد يبدو تقطيع العينات مفرطًا، حيث يمكننا بسهولة أخذ عينات مباشرة من التوزيع الطبيعي. ومع ذلك، يوضح المثال العملية الأساسية للتقنية. تكمن قوة تقطيع العينات في قدرتها على التعامل مع التوزيعات المعقدة التي يصعب أخذ عينات منها مباشرة.
الفرق بين تقطيع العينات وغيرها من تقنيات MCMC
بالمقارنة مع تقنيات MCMC الأخرى، مثل خوارزمية Metropolis-Hastings، يتميز تقطيع العينات بعدة جوانب:
- عدم الحاجة إلى اقتراح: لا تعتمد خوارزمية تقطيع العينات على دالة اقتراح مثل خوارزمية Metropolis-Hastings. هذا يبسط العملية.
- التلقائية: تقطيع العينات “أكثر تلقائية” من Metropolis-Hastings. لا يحتاج المستخدم إلى ضبط معلمات مثل حجم الخطوة أو نسبة القبول (acceptance rate).
- التقارب الأسرع: في بعض الحالات، يمكن أن يتقارب تقطيع العينات بشكل أسرع إلى التوزيع المستهدف من Metropolis-Hastings.
ومع ذلك، قد يكون تقطيع العينات أكثر صعوبة من الناحية الحسابية في بعض الحالات، خاصة عند التعامل مع التوزيعات ذات الأبعاد العالية. بالإضافة إلى ذلك، فإن اختيار طريقة إيجاد الشريحة يمكن أن يؤثر بشكل كبير على الأداء.
أمثلة برمجية (بايثون)
يوضح الكود التالي تنفيذًا بسيطًا لتقطيع العينات باستخدام لغة بايثون. يستخدم هذا الكود مكتبة NumPy للعمليات العددية و مكتبة Matplotlib لتصور النتائج. هذا المثال بسيط لتوضيح العملية، وليس بالضرورة هو التنفيذ الأكثر كفاءة.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
def slice_sampling(log_pdf, x_init, w=1, m=100):
"""
تنفيذ تقطيع العينات.
log_pdf: دالة السجل للكثافة الاحتمالية.
x_init: القيمة الأولية.
w: عرض الشريحة (اختياري، افتراضي 1).
m: عدد التكرارات (اختياري، افتراضي 100).
المرتجعات: عينات تقطيع العينات.
"""
x = x_init
samples = []
for _ in range(m):
# الخطوة 1: حساب السجل الكثافة الاحتمالية
log_y = log_pdf(x) + np.log(np.random.rand())
# الخطوة 2: إيجاد الشريحة
l = x - w * np.random.rand()
r = l + w
while log_pdf(l) > log_y:
l -= w
while log_pdf(r) > log_y:
r += w
# الخطوة 3: أخذ عينة من الشريحة
while True:
x_prime = np.random.rand() * (r - l) + l
if log_pdf(x_prime) > log_y:
break
if x_prime > x:
r = x_prime
else:
l = x_prime
x = x_prime
samples.append(x)
return np.array(samples)
# مثال: أخذ عينات من توزيع طبيعي بمتوسط 0 وانحراف معياري 1
def log_normal_pdf(x, mu=0, sigma=1):
return -0.5 * ((x - mu) / sigma) ** 2 - np.log(sigma * np.sqrt(2 * np.pi))
# القيمة الأولية
x_init = 2
# عدد العينات
m = 5000
# تنفيذ تقطيع العينات
samples = slice_sampling(log_normal_pdf, x_init, w=3, m=m)
# التصور
plt.hist(samples, bins=50, density=True, alpha=0.6, label='Samples')
x = np.linspace(-5, 5, 100)
plt.plot(x, norm.pdf(x), 'k-', label='Normal Distribution')
plt.xlabel('x')
plt.ylabel('Density')
plt.title('Slice Sampling - Normal Distribution')
plt.legend()
plt.show()
يشمل هذا الكود:
- دالة
slice_sampling
التي تنفذ الخوارزمية. - دالة
log_normal_pdf
التي تحسب سجل الكثافة الاحتمالية لتوزيع طبيعي. - أخذ عينات من التوزيع الطبيعي بمتوسط 0 وانحراف معياري 1.
- توليد رسم بياني (هيستوغرام) لعينات تقطيع العينات.
- مقارنة الهيستوغرام مع دالة الكثافة الاحتمالية الحقيقية للتوزيع الطبيعي.
عند تشغيل هذا الكود، ستلاحظ أن الهيستوغرام يمثل تقريبًا جيدًا لتوزيع الاحتمالية الطبيعية.
اعتبارات إضافية
عند استخدام تقطيع العينات، من المهم مراعاة بعض الاعتبارات الإضافية:
- التقارب: يجب التأكد من أن السلسلة قد تقاربت إلى التوزيع المستهدف. يمكن فحص التقارب باستخدام أدوات التشخيص القياسية لـ MCMC، مثل المخططات التسلسلية، ومخططات التجميع، واختبارات R-hat.
- الترشيح: غالبًا ما يتم التخلص من بعض العينات الأولية (فترة الإحماء أو burn-in) قبل حساب الإحصائيات، وذلك للتخلص من تأثير القيمة الأولية.
- التشغيل المتوازي: في بعض الحالات، يمكن تحسين الكفاءة من خلال تشغيل سلاسل متعددة بشكل متوازٍ.
خاتمة
تقطيع العينات هو أسلوب فعال لأخذ عينات من التوزيعات الاحتمالية المعقدة. يوفر هذا الأسلوب طريقة بسيطة لتوليد عينات عشوائية من توزيع ما دون الحاجة إلى عمليات حسابية معقدة. على الرغم من بعض العيوب، مثل الحساسية لاختيار معلمات معينة وصعوبة التعامل مع الأبعاد العالية، إلا أنه يظل أداة مفيدة في الإحصاء الحاسوبي، والتعلم الآلي، والعديد من المجالات الأخرى. من خلال فهم مبادئ تقطيع العينات وكيفية تطبيقها، يمكن للمستخدمين تقدير خصائص التوزيعات المعقدة، وإجراء الاستدلالات، وحل المشكلات الصعبة.