توزیع دوجمله ای (Binomial Distribution)
اینجا با توزیع دوجمله ای در پایتون آشنا می شویم. این توزیع برای موقعیت هایی است که نتیجه فقط دو حالت دارد؛ مثلا شیر یا خط.
آشنایی با توزیع دوجمله ای در پایتون
توزیع دوجمله ای یک توزیع گسسته (Discrete Distribution) است. یعنی فقط روی چند مقدار مشخص تعریف می شود، نه روی همه عددها.
مثال ساده، پرتاب سکه است. هر بار یا شیر می آید یا خط. ما معمولا تعداد موفقیت ها را می شماریم؛ مثلا چند بار شیر آمد.
نکته: توزیع گسسته یعنی نتیجه ها جدا از هم هستند. مثلا 3 یا 4 یا 5 بار موفقیت؛ چیزی مثل 3٫26 موفقیت معنی ندارد.
پارامترهای توزیع دوجمله ای در NumPy
در نامپای، تابع random.binomial() توزیع دوجمله ای می سازد. این تابع سه پارامتر مهم دارد.
- n: تعداد آزمون ها (trials). مثلا چند بار سکه را می اندازی.
- p: احتمال موفقیت در هر آزمون. مثلا احتمال شیر برای سکه سالم 0٫5 است.
- size: شکل آرایه خروجی. مشخص می کند چند نمونه مختلف می خواهی.
می توانی توزیع دوجمله ای در پایتون را مثل یک بازی فکر کنی. n تعداد تلاش هاست، p شانس برد هر تلاش، و خروجی می گوید چند بار بردی.
ساخت داده دوجمله ای برای پرتاب سکه
در مثال زیر ده بار سکه را شبیه سازی می کنیم و این کار را ده بار تکرار می کنیم. هر عدد در خروجی، تعداد شیرها در یک سری ده تایی است.
from numpy import random
x = random.binomial(n=10, p=0.5, size=10)
print(x)
هر بار کد را اجرا کنی، ترکیب عددها عوض می شود. اما بیشتر عددها نزدیک نصف تعداد پرتاب ها هستند؛ یعنی حدود پنج بار شیر.
نمایش نمودار توزیع دوجمله ای با Seaborn
برای فهم بهتر توزیع دوجمله ای در پایتون، بهتر است نمودار آن را ببینیم. این کار را با ترکیب NumPy، Matplotlib و Seaborn انجام می دهیم.
در مثال زیر هزار نمونه از توزیع دوجمله ای می سازیم. سپس با sns.displot نمودار آن را رسم می کنیم.
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.displot(random.binomial(n=10, p=0.5, size=1000))
plt.show()
روی نمودار، می بینی که بیشتر ستون ها نزدیک وسط هستند. یعنی بیشتر مواقع تعداد موفقیت ها وسط محدوده قرار می گیرد.
تفاوت توزیع دوجمله ای و توزیع نرمال
تفاوت اصلی این است که توزیع نرمال پیوسته است و توزیع دوجمله ای گسسته. یعنی نرمال روی همه عددهای واقعی تعریف می شود، اما دوجمله ای فقط روی عددهای صحیح.
با این حال، اگر تعداد آزمون ها زیاد باشد، توزیع دوجمله ای شبیه توزیع نرمال می شود. مخصوصا وقتی p تقریبا 0٫5 باشد.
در مثال زیر یک توزیع نرمال و یک توزیع دوجمله ای می سازیم و هر دو را روی یک نمودار KDE رسم می کنیم. برای مرور توزیع نرمال می توانی بعدا به صفحه توزیع نرمال در پایتون هم سر بزنی.
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
data = {
"normal": random.normal(loc=50, scale=5, size=1000),
"binomial": random.binomial(n=100, p=0.5, size=1000)
}
sns.displot(data, kind="kde")
plt.show()
اگر به نمودار نگاه کنی، می بینی دو منحنی خیلی شبیه هستند. این نشان می دهد در شرایطی، توزیع دوجمله ای می تواند تقریب خوبی از توزیع نرمال بدهد.
تمرین گام به گام با توزیع دوجمله ای
برای تمرین، این مراحل را انجام بده و با توزیع دوجمله ای در پایتون راحت تر شو.
- یک آرایه با
random.binomial(n=10, p=0.5, size=20)بساز و خروجی را ببین. - مقدار p را عوض کن؛ مثلا 0٫2 و 0٫8. مقایسه کن که عددهای خروجی چگونه تغییر می کنند.
- تعداد آزمون ها یعنی n را بیشتر کن؛ مثلا 50 یا 100. شکل توزیع چه تغییری می کند؟
- نتایج خودت را با نمودار Seaborn نمایش بده و با توزیع دوجمله ای در پایتون روی سایت مرور کن.
جمع بندی سریع
- توزیع دوجمله ای برای موقعیت های دو حالته مثل شیر یا خط است.
- تابع
random.binomial()در نامپای این توزیع را می سازد. - پارامتر n تعداد آزمون ها و p احتمال موفقیت در هر آزمون است.
- با size می توانی شکل آرایه خروجی را مشخص کنی.
- با زیاد شدن n و مقدار مناسب p، توزیع دوجمله ای شبیه توزیع نرمال می شود.