فهرست سرفصل‌های NumPy
خانه (HOME) مقدمه (Intro) شروع کار (Getting Started) ساخت آرایه ها (Creating Arrays) ایندکس گذاری آرایه (Array Indexing) برش آرایه (Array Slicing) انواع داده (Data Types) کپی در برابر View (Copy vs View) شکل آرایه (Array Shape) تغییر شکل آرایه (Array Reshape) حلقه روی آرایه (Array Iterating) ترکیب آرایه ها (Array Join) تقسیم آرایه ها (Array Split) جستجو در آرایه (Array Search) مرتب سازی آرایه (Array Sort) فیلتر کردن آرایه (Array Filter) مقدمه تصادفی سازی (Random Intro) توزیع داده (Data Distribution) جابه جایی تصادفی (Random Permutation) ماژول Seaborn (Seaborn Module) توزیع نرمال (Normal Distribution) توزیع دوجمله ای (Binomial Distribution) توزیع پواسون (Poisson Distribution) توزیع یکنواخت (Uniform Distribution) توزیع لجستیک (Logistic Distribution) توزیع چندجمله ای (Multinomial Distribution) توزیع نمایی (Exponential Distribution) توزیع کای دو (Chi Square Distribution) توزیع ریلی (Rayleigh Distribution) توزیع پارتو (Pareto Distribution) توزیع زیف (Zipf Distribution) مقدمه ufunc (ufunc Intro) ساخت تابع ufunc (ufunc Create Function) حساب ساده با ufunc (ufunc Simple Arithmetic) گرد کردن اعشار با ufunc (ufunc Rounding Decimals) لگاریتم ها با ufunc (ufunc Logs) جمع ها با ufunc (ufunc Summations) حاصل ضرب ها با ufunc (ufunc Products) تفاضل ها با ufunc (ufunc Differences) کمترین مضرب مشترک با ufunc (ufunc Finding LCM) بزرگترین مقسوم علیه مشترک با ufunc (ufunc Finding GCD) توابع مثلثاتی با ufunc (ufunc Trigonometric) توابع هذلولوی با ufunc (ufunc Hyperbolic) عملیات مجموعه ای با ufunc (ufunc Set Operations) ویرایشگر (Editor) آزمون (Quiz) تمارین (Exercises) سرفصل دوره (Syllabus) برنامه مطالعه (Study Plan) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
NumPy

NumPy — توزیع دوجمله ای (Binomial Distribution)

آخرین بروزرسانی: 1404/08/25

توزیع دوجمله ای (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()

مشاهده در ادیتور

اگر به نمودار نگاه کنی، می بینی دو منحنی خیلی شبیه هستند. این نشان می دهد در شرایطی، توزیع دوجمله ای می تواند تقریب خوبی از توزیع نرمال بدهد.

تمرین گام به گام با توزیع دوجمله ای

برای تمرین، این مراحل را انجام بده و با توزیع دوجمله ای در پایتون راحت تر شو.

  1. یک آرایه با random.binomial(n=10, p=0.5, size=20) بساز و خروجی را ببین.
  2. مقدار p را عوض کن؛ مثلا 0٫2 و 0٫8. مقایسه کن که عددهای خروجی چگونه تغییر می کنند.
  3. تعداد آزمون ها یعنی n را بیشتر کن؛ مثلا 50 یا 100. شکل توزیع چه تغییری می کند؟
  4. نتایج خودت را با نمودار Seaborn نمایش بده و با توزیع دوجمله ای در پایتون روی سایت مرور کن.

جمع بندی سریع

  • توزیع دوجمله ای برای موقعیت های دو حالته مثل شیر یا خط است.
  • تابع random.binomial() در نامپای این توزیع را می سازد.
  • پارامتر n تعداد آزمون ها و p احتمال موفقیت در هر آزمون است.
  • با size می توانی شکل آرایه خروجی را مشخص کنی.
  • با زیاد شدن n و مقدار مناسب p، توزیع دوجمله ای شبیه توزیع نرمال می شود.