مقدمه: MLE چیست؟
تخمین حداکثر درستنمایی یا Maximum Likelihood Estimation (MLE) یکی از مفاهیم پایهای در آمار و یادگیری ماشین است. به زبان ساده، MLE روشی است برای پیدا کردن بهترین پارامترهای یک مدل آماری، به طوری که احتمال (Probability) مشاهدهی دادههایی که از قبل در دست داریم، به بیشترین مقدار خود (Maximum) برسد.
فرض کنید دادههایی را جمعآوری کردهاید و میدانید که این دادهها از یک توزیع خاص (مثلاً توزیع نرمال) پیروی میکنند، اما پارامترهای آن توزیع (مثل میانگین \(\mu\) و واریانس \(\sigma^2\)) را نمیدانید. وظیفه MLE پیدا کردن این پارامترها است.
یک مثال ملموس: پرتاب سکه
فرض کنید یک سکه دارید و میخواهید بدانید آیا سکه سالم است (احتمال شیر یا خط آمدن ۵۰-۵۰ است) یا دستکاری شده. شما سکه را ۱۰ بار پرتاب میکنید و ۷ بار “شیر” میآید.
در روش MLE، ما از خودمان یک سوال کلیدی میپرسیم: “احتمال شیر آمدن این سکه در هر پرتاب دقیقاً چقدر باید باشد تا شانس دیدن ۷ شیر از ۱۰ پرتاب، بیشترین مقدار ممکن شود؟”
اگر احتمال شیر آمدن را با \(p\) نشان دهیم، احتمال دیدن ۷ شیر در ۱۰ پرتاب از توزیع دوجملهای به دست میآید: \[ L(p) = \binom{10}{7} p^7 (1-p)^3 \]
برای پیدا کردن بیشترین مقدار این تابع (Maximize کردن تابع Likelihood)، میتوانیم از آن مشتق بگیریم و برابر صفر قرار دهیم. حل این معادله نشان میدهد که بهترین تخمین برای \(p\) دقیقاً ۰.۷ است.
پیادهسازی MLE در پایتون
در اینجا یک مثال ساده از پیدا کردن میانگین و انحراف معیار یک توزیع نرمال با استفاده از دادهها و کتابخانه SciPy آورده شده است:
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
# تولید دادههای تصادفی از یک توزیع نرمال (میانگین واقعی = 5، انحراف معیار واقعی = 2.5)
np.random.seed(42)
data = np.random.normal(loc=5.0, scale=2.5, size=1000)
# استفاده از روش MLE برای تخمین پارامترها با تابع fit در scipy
mu_mle, std_mle = norm.fit(data)
print(f"تخمین میانگین (MLE): {mu_mle:.2f}")
print(f"تخمین انحراف معیار (MLE): {std_mle:.2f}")
# رسم نمودار برای مقایسه دادهها با توزیع تخمین زده شده
plt.hist(data, bins=30, density=True, alpha=0.6, color='b')
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu_mle, std_mle)
plt.plot(x, p, 'k', linewidth=2)
plt.title(f"Fit Results: mu = {mu_mle:.2f}, std = {std_mle:.2f}")
plt.show()چرا MLE در یادگیری ماشین مهم است؟
در یادگیری ماشین، ما معمولاً به دنبال آموزش دادن مدلها و پیدا کردن بهترین وزنها و پارامترها هستیم.
هنگامی که ما یک مدل طبقهبندی (Classification) را آموزش میدهیم و تابع خطای Cross-Entropy را کمینه (Minimize) میکنیم، در واقعیت در پشت صحنه در حال انجام دادن فرآیند Maximum Likelihood Estimation هستیم. به حداقل رساندن Negative Log-Likelihood (NLL) دقیقاً معادل با به حداکثر رساندن Likelihood است.
نتیجهگیری
روش MLE یک ابزار قدرتمند آماری است که به ما کمک میکند تا واقعبینانهترین و محتملترین نتیجهگیری را بر اساس دادههای موجود انجام دهیم و پایه و اساس بسیاری از الگوریتمهای یادگیری ماشین است.