توزیع نمایی (Exponential Distribution)
در این صفحه با توزیع نمایی در NumPy آشنا می شوی. توزیع نمایی (Exponential Distribution) مدت زمان تا رخ داد بعدی را توصیف می کند؛ مثل زمان تا خرابی بعدی دستگاه یا تا موفقیت بعدی در یک سیستم.
توزیع نمایی در NumPy چیست؟
توزیع نمایی وقتی استفاده می شود که فاصله زمانی بین رویدادها مهم باشد. رویداد (Event) یعنی اتفاقی که دنبال آن هستیم؛ مثل رسیدن پیام جدید در موبایل یا ورود مشتری بعدی به فروشگاه.
در این توزیع، عددهای کوچک تر شانس بیشتری دارند. یعنی معمولاً رویداد خیلی زود رخ می دهد؛ اما هنوز احتمال زمان های طولانی تر صفر نیست، فقط کمتر است.
در NumPy تابع random.exponential() همین رفتار را شبیه سازی می کند. با آن می توانی آرایه ای از زمان های تصادفی بین رویدادها بسازی.
پارامترهای توزیع نمایی در NumPy
تابع random.exponential() دو پارامتر اصلی دارد:
- scale: عکس نرخ رخ دادها است؛ پیش فرض
1.0است. - size: شکل آرایه خروجی را مشخص می کند.
در توزیع پواسون (Poisson Distribution) پارامتری به نام lam داریم که نرخ رویدادهاست. اینجا scale تقریباً برابر 1 / lam است؛ یعنی هرچه scale بزرگ تر باشد، به طور متوسط فاصله بین رویدادها بیشتر می شود.
برای مقایسه با توزیع هایی که روی تعداد تمرکز دارند، می توانی بعداً سراغ صفحه توزیع چندجمله ای NumPy هم بروی.
نمونه گیری از توزیع نمایی در NumPy
در مثال منبع، یک نمونه از توزیع نمایی با scale=2 می سازیم. شکل آرایه خروجی هم 2x3 است؛ یعنی دو سطر و سه ستون.
گام ها:
- کتابخانه
randomرا از NumPy ایمپورت کن. - با
random.exponential()آرایه تصادفی بساز. - آرایه را با
print()روی خروجی ببین.
from numpy import random
x = random.exponential(scale=2, size=(2, 3))
print(x)
نکته: اگر scale را بزرگ تر کنی، عددهای خروجی معمولاً بزرگ تر می شوند؛ یعنی فاصله زمانی بین رویدادها بیشتر می شود.
نمایش توزیع نمایی روی نمودار
دیدن شکل توزیع نمایی روی نمودار خیلی کمک می کند. در مثال، با matplotlib و seaborn نمودار چگالی می کشیم.
matplotlib یک کتابخانه رسم نمودار در پایتون است. seaborn هم کتابخانه ای برای نمودارهای زیباتر روی داده ها است.
گام ها:
- آرایه ای از داده نمایی با
random.exponentialبساز. - با
sns.displotچگالی داده را رسم کن. - با
plt.show()نمودار را نمایش بده.
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
data = random.exponential(size=1000)
sns.displot(data, kind="kde")
plt.show()
نکته: در نمودار نمایی، مقدارهای نزدیک صفر زیادند و هرچه جلوتر می رویم، نمودار آرام پایین می آید.
رابطه توزیع پواسون و توزیع نمایی
طبق متن منبع، توزیع پواسون تعداد رخ دادها در یک بازه زمانی را توصیف می کند. در مقابل، توزیع نمایی زمان بین این رخ دادها را توصیف می کند.
اگر برایت جالب شد که خود تعداد رویدادها در بازه زمانی چگونه مدل می شود، بعداً صفحه توزیع پواسون در NumPy را هم ببین.
جمع بندی سریع توزیع نمایی
اگر خواستی دوباره مرور کنی، این صفحه توزیع نمایی در NumPy برای مرور خیلی خوب است.
- توزیع نمایی، زمان بین رویدادهای متوالی را مدل می کند.
- در NumPy با
random.exponential()به این توزیع دسترسی داری. - پارامتر
scaleعکس نرخ و میانگین فاصله زمانی است. sizeفقط شکل آرایه خروجی را تعیین می کند.- پواسون روی تعداد رویدادها تمرکز دارد، نمایی روی فاصله بین آن ها.