ML Learning Hub
الأسسمبتدئ

الاحتمالات والإحصاء

لغة عدم اليقين — توزيعات الاحتمالية والتقدير الأعظمي والاستدلال البايزي

التوزيعات الاحتمالية والاحتمالية القصوى ومبرهنة بايز واختبار الفرضيات ومبرهنة النهاية المركزية — لغة عدم اليقين وراء كل دالة خسارة ومقياس تقييم.

50 min
9 مخططات
7 المفاهيم المغطاة

المتطلبات الأساسية

Calculus & Optimization

المفاهيم المغطاة

Normal DistributionMLEBayes Theoremp-valuesCLTHypothesis TestingConfidence Intervals

الصيغ الرئيسية

نظرية بايز

تحديث الاعتقاد المسبق P(H) بالدليل E للحصول على الاحتمال اللاحق P(H|E)

تقدير الاحتمالية الأعظمية

إيجاد المعاملات التي تجعل البيانات المرصودة أكثر احتمالاً — معادلة لتقليل NLL

دالة كثافة الاحتمال العادية

منحنى الجرس — محدد تماماً بالمتوسط μ والانحراف المعياري σ

نظرية الحد المركزي

مجموع n متغير مستقل متماثل يتقارب نحو العادي عند n→∞ — سبب انتشار التوزيع العادي

محاكاة تفاعلية

Loading visualization…
🎯

الشك في كل مكان في تعلم الآلة

motivation

التعلم الآلي يتعلق في جوهره بالتنبؤ في ظل عدم اليقين. التصنيف يُخرج احتمالات (ليس فقط تسميات). النماذج البايزية تحافظ على توزيعات كاملة على المعاملات. بدون نظرية الاحتمالات، لا يمكنك التفكير في: هل النموذج واثق بشكل خاطئ، هل تقسيم التدريب/الاختبار يعطي تقديراً موثوقاً، أو هل النموذجان مختلفان فعلاً.

خسارة السجل (الإنتروبيا التقاطعية) هي اللوغاريتم السلبي للاحتمالية لتوزيع برنولي. تقليل الإنتروبيا التقاطعية هو تقدير الاحتمالية الأعظمية. إنهما نفس الشيء.

💡

التوزيعات — الأهم منها

intuition

**عادية (غاوسية):** على شكل جرس، متماثلة. في كل مكان بفضل نظرية الحد المركزي. محددة بـμ (الموقع) وσ (الانتشار). **ثنائية الحدود:** عدد النجاحات في n تجربة ثنائية باحتمالية p. **بواسون:** عدد الأحداث في فترة زمنية ثابتة. **برنولي:** تجربة ثنائية واحدة. **ستيودنت-t:** كالعادية لكن بذيول أثقل — لاختبارات العينات الصغيرة. فهم أي توزيع يناسب مشكلتك مهارة أساسية.

إذا كانت X₁, X₂, …, Xₙ مستقلة متماثلة التوزيع بمتوسط μ وتباين محدود σ²، فإن √n(X̄-μ)/σ → N(0,1). هذا سبب أن كل شيء تقريباً يصبح غاوسياً بعد معدل كافٍ من العينات.

⚙️

تقدير الاحتمالية الأعظمية

algorithm
1

اختر نموذجاً احتمالياً p(x|θ) لبياناتك (مثال: عادي، ثنائي الحدود).

2

اكتب دالة الاحتمالية: L(θ) = ∏ᵢ p(xᵢ|θ) — احتمالية البيانات المرصودة تحت θ.

3

خذ اللوغاريتم: ℓ(θ) = Σᵢ log p(xᵢ|θ) — لوغاريتم الاحتمالية أسهل في التحسين (مجموع بدلاً من حاصل ضرب).

4

اشتق ∂ℓ/∂θ، ساوِه صفراً، حل للحصول على θ̂_AGA.

5

للتوزيع العادي: θ̂_AGA = (μ̂=x̄، σ̂²=Σ(xᵢ-x̄)²/n) — المتوسط والتباين المتحيز التجريبي.

6

للانحدار اللوجستي: لا صيغة مغلقة → استخدم الانحدار التدرجي على خسارة السجل = -ℓ(θ).

</>

الاحتمالية مع SciPy و NumPy

code
python64 lines
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

class="tok-comment"># ── Normal distribution ───────────────────────────────────────────────────────
mu, sigma = class="tok-num">170, class="tok-num">10          class="tok-comment"># heights in cm
dist = stats.norm(mu, sigma)

x = np.linspace(class="tok-num">135, class="tok-num">205, class="tok-num">500)
pdf = dist.pdf(x)

class="tok-comment"># Probabilities
p_tall = class="tok-num">1 - dist.cdf(class="tok-num">190)           class="tok-comment"># P(X > class="tok-num">190)
p_range = dist.cdf(class="tok-num">180) - dist.cdf(class="tok-num">160)  class="tok-comment"># P(class="tok-num">160 < X < class="tok-num">180)
print(fclass="tok-str">"P(height > 190cm) = {p_tall:.4f}")
print(fclass="tok-str">"P(class="tok-num">160 < height < class="tok-num">180) = {p_range:.4f}")

class="tok-comment"># class="tok-num">68-class="tok-num">95-class="tok-num">99.7 rule
for k in [class="tok-num">1, class="tok-num">2, class="tok-num">3]:
    p = dist.cdf(mu + k*sigma) - dist.cdf(mu - k*sigma)
    print(fclass="tok-str">"P(μ ± {k}σ) = {p:.4f}")  class="tok-comment"># ≈ class="tok-num">0.68, class="tok-num">0.95, class="tok-num">0.997

class="tok-comment"># ── MLE — fitting a Normal distribution ──────────────────────────────────────
data = np.random.normal(class="tok-num">170, class="tok-num">10, size=class="tok-num">100)
mu_mle, sigma_mle = data.mean(), data.std()
print(fclass="tok-str">"\nMLE fit: μ̂={mu_mle:.2f}, σ̂={sigma_mle:.2f}")

class="tok-comment"># SciPy MLE (same result, handles any distribution)
mu_fit, sigma_fit = stats.norm.fit(data)
print(fclass="tok-str">"scipy fit: μ={mu_fit:.2f}, σ={sigma_fit:.2f}")

class="tok-comment"># ── Bayes' theorem ────────────────────────────────────────────────────────────
class="tok-comment"># Disease testing: prevalence class="tok-num">1%, test sensitivity class="tok-num">99%, specificity class="tok-num">95%
p_disease = class="tok-num">0.01
p_pos_given_disease = class="tok-num">0.99     class="tok-comment"># sensitivity
p_neg_given_healthy = class="tok-num">0.95    class="tok-comment"># specificity → P(pos|healthy) = class="tok-num">0.05

p_healthy = class="tok-num">1 - p_disease
p_pos_given_healthy = class="tok-num">1 - p_neg_given_healthy

class="tok-comment"># P(positive) = P(pos|disease)*P(disease) + P(pos|healthy)*P(healthy)
p_pos = p_pos_given_disease * p_disease + p_pos_given_healthy * p_healthy

class="tok-comment"># Bayes: P(disease | positive test)
p_disease_given_pos = (p_pos_given_disease * p_disease) / p_pos
print(fclass="tok-str">"\nP(disease | positive test) = {p_disease_given_pos:.4f}")  class="tok-comment"># ~class="tok-num">16.4%!
class="tok-comment"># Counterintuitive: despite class="tok-num">99% accurate test, only class="tok-num">16% chance with +ve result
class="tok-comment"># due to low base rate (prior) — base rate fallacy

class="tok-comment"># ── Hypothesis testing ────────────────────────────────────────────────────────
class="tok-comment"># Are two group means different?
group_a = np.random.normal(class="tok-num">5.0, class="tok-num">1.5, class="tok-num">50)
group_b = np.random.normal(class="tok-num">5.5, class="tok-num">1.5, class="tok-num">50)

t_stat, p_value = stats.ttest_ind(group_a, group_b)
print(fclass="tok-str">"\nt-test: t={t_stat:.3f}, p={p_value:.4f}")
print(class="tok-str">"Significant at α=class="tok-num">0.05:", p_value < class="tok-num">0.05)

class="tok-comment"># Bootstrap confidence interval for mean (distribution-free)
np.random.seed(class="tok-num">42)
boot_means = [np.random.choice(group_a, size=len(group_a), replace=True).mean()
              for _ in range(class="tok-num">10000)]
ci_low, ci_high = np.percentile(boot_means, [class="tok-num">2.5, class="tok-num">97.5])
print(fclass="tok-str">"class="tok-num">95% CI for group A mean: [{ci_low:.3f}, {ci_high:.3f}]")
⚠️

قيم p ليست ما تعتقد

pitfall

قيمة p < 0.05 لا تعني 'هناك احتمال 95% أن التأثير حقيقي.' تعني: 'لو كانت الفرضية الصفرية صحيحة، سنرى بيانات بهذا التطرف أقل من 5% من الوقت.' مزالق خاصة بالتعلم الآلي: (1) المقارنات المتعددة: إذا اختبرت 20 تكويناً وأبلغت عن الأفضل، صحح بـBonferroni. (2) الخلط بين الأهمية الإحصائية والأهمية العملية. (3) تنقيب البيانات: اختبار انقسامات عديدة حتى تجد واحدة 'يتفوق' فيها نموذجك على خط الأساس.

حجم التأثير (d لكوهين = (μ₁-μ₂)/σ) يخبرك إذا كان الفرق مهماً عملياً. p=0.0001 مع d=0.02 مهم إحصائياً لكن لا معنى له عملياً.

?اختبار المعرفة

يتم حفظ التقدم في متصفحك — لا حاجة لحساب.

تحتاج مهندس ذكاء اصطناعي أو عالم بيانات؟

أبني نماذج تعلم آلي مخصصة، ووكلاء ذكاء اصطناعي، ورؤية حاسوب، وأتمتة — من الفكرة إلى الإنتاج.