آخرین بروزرسانی 6 روز قبل

بیس ساده لوح (Naive Bayes) چیست؟

نایو بیز: یک راه ساده برای پیش‌بینی!

سلام دوستان!

شاید اسم "نایو بیز" (Naive Bayes) یکم پیچیده به نظر برسه، ولی اصلا نگران نباشید. این یه روش خیلی ساده و کاربردی توی دنیای یادگیری ماشین (Machine Learning) هست که به ما کمک می‌کنه بر اساس اطلاعاتی که داریم، یه چیزی رو پیش‌بینی کنیم. مثل پیش‌بینی آب و هوا، تشخیص هرزنامه (spam) توی ایمیل، یا حتی دسته‌بندی اخبار!

ایده اصلی نایو بیز

نایو بیز بر اساس یه قضیه ریاضی به اسم "قضیه بیز" (Bayes' Theorem) کار می‌کنه. این قضیه به ما می‌گه چطور احتمال وقوع یه اتفاق رو با توجه به اطلاعاتی که از قبل داریم، حساب کنیم. به عبارت دیگه، می‌خوایم ببینیم با داشتن یه سری نشونه‌ها، احتمال اینکه یه اتفاق خاص بیفته چقدره.

حالا چرا بهش میگن "نایو" (Naive)؟ چون نایو بیز یه فرض خیلی ساده‌لوحانه می‌کنه: اینکه همه نشونه‌ها به طور مستقل از هم تاثیر می‌ذارن. یعنی فرض می‌کنه وجود یه نشونه هیچ ربطی به نشونه‌های دیگه نداره. در صورتی که در واقعیت، این همیشه درست نیست. ولی با این حال، نایو بیز توی خیلی از موارد خیلی خوب جواب میده!

یه مثال ساده

فرض کنید ما می‌خوایم با استفاده از نایو بیز، پیش‌بینی کنیم که آیا یه ایمیل هرزنامه هست یا نه. ما چند تا نشونه داریم: کلماتی که توی ایمیل استفاده شده (مثل "جایزه"، "رایگان"، "فوری")، فرستنده ایمیل، و غیره.

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

چطور نایو بیز کار میکنه؟

فرض کنید میخوایم پیش بینی کنیم که آیا یه نفر با توجه به ویژگی هاش (مثلا قد و وزن)، بسکتبالیست هست یا نه.

مرحله 1: آماده سازی داده ها

فرض کنید اطلاعات زیر رو از قبل داریم:

قد (سانتی متر) وزن (کیلوگرم) بسکتبالیست؟
185 80 بله
190 85 بله
170 70 خیر
165 65 خیر
195 90 بله

مرحله 2: محاسبه احتمالات

حالا باید احتمال اینکه یه نفر بسکتبالیست باشه (P(بسکتبالیست)) و احتمال اینکه یه نفر بسکتبالیست نباشه (P(نه بسکتبالیست)) رو حساب کنیم. از جدول بالا می بینیم که:

  • P(بسکتبالیست) = 3/5
  • P(نه بسکتبالیست) = 2/5

همینطور باید احتمال داشتن قد و وزن مشخص رو با توجه به اینکه فرد بسکتبالیست هست یا نه حساب کنیم. اینجا هم از همون جدول استفاده می کنیم. (این قسمت یه مقدار پیچیده تر میشه و معمولا از روش های آماری مثل توزیع نرمال استفاده میشه. برای سادگی، ازش رد میشیم.)

مرحله 3: پیش بینی

حالا فرض کنید یه نفر با قد 180 سانتی متر و وزن 75 کیلوگرم رو داریم. میخوایم پیش بینی کنیم که آیا این فرد بسکتبالیست هست یا نه.

با استفاده از قضیه بیز و احتمالاتی که در مرحله قبل حساب کردیم، می تونیم احتمال اینکه این فرد بسکتبالیست باشه (P(بسکتبالیست | قد=180, وزن=75)) و احتمال اینکه بسکتبالیست نباشه (P(نه بسکتبالیست | قد=180, وزن=75)) رو حساب کنیم. اونی که احتمالش بیشتر باشه، پیش بینی ما خواهد بود.

کد نمونه (Python)

این یه کد خیلی ساده برای نشون دادن ایده نایو بیز هست. برای کارهای واقعی، بهتره از کتابخونه های آماده مثل scikit-learn استفاده کنید.

            
# مثال بسیار ساده برای درک بهتر ایده Naive Bayes
def naive_bayes(features, data, labels):
  """
  features: یه دیکشنری که ویژگی های جدید رو نشون میده.
  data: داده های آموزشی.
  labels: برچسب های مربوط به داده های آموزشی.
  """
  p_yes = sum(labels) / len(labels) # احتمال "بله"
  p_no = 1 - p_yes # احتمال "خیر"

  # محاسبه احتمال هر ویژگی با توجه به برچسب
  likelihoods_yes = {}
  likelihoods_no = {}

  for feature in features:
      likelihoods_yes[feature] = sum([1 for i in range(len(data)) if labels[i] == 1 and data[i][feature] == features[feature]]) / sum(labels)
      likelihoods_no[feature] = sum([1 for i in range(len(data)) if labels[i] == 0 and data[i][feature] == features[feature]]) / (len(labels) - sum(labels))


  # محاسبه احتمال نهایی با استفاده از ضرب کردن احتمالات
  probability_yes = p_yes
  probability_no = p_no

  for feature in features:
      probability_yes *= likelihoods_yes[feature]
      probability_no *= likelihoods_no[feature]


  # مقایسه احتمالات و پیش بینی
  if probability_yes > probability_no:
      return "بله"
  else:
      return "خیر"


# مثال استفاده
data = [
  {'آسمان': 'آفتابی', 'دما': 'گرم', 'رطوبت': 'زیاد', 'باد': 'ضعیف'},
  {'آسمان': 'ابری', 'دما': 'گرم', 'رطوبت': 'زیاد', 'باد': 'قوی'},
  {'آسمان': 'بارانی', 'دما': 'سرد', 'رطوبت': 'زیاد', 'باد': 'ضعیف'},
  {'آسمان': 'آفتابی', 'دما': 'معتدل', 'رطوبت': 'کم', 'باد': 'ضعیف'},
]
labels = [0, 0, 1, 1] # 0: نه، 1: بله (آیا باید بازی کنیم؟)

features = {'آسمان': 'آفتابی', 'دما': 'سرد', 'رطوبت': 'زیاد', 'باد': 'قوی'}

prediction = naive_bayes(features, data, labels)
print(f"پیش بینی: {prediction}")
            
        

مزایا و معایب نایو بیز

مزایا:

  • ساده و آسون برای پیاده‌سازی
  • خیلی سریع
  • به داده‌های آموزشی زیادی نیاز نداره
  • توی خیلی از موارد خوب کار می‌کنه

معایب:

  • فرض ساده‌لوحانه‌ش (مستقل بودن ویژگی‌ها) همیشه درست نیست
  • اگه یه ویژگی توی داده‌های آموزشی اصلا وجود نداشته باشه، نمیتونه پیش‌بینی درستی انجام بده

کاربردهای نایو بیز

نایو بیز توی خیلی از زمینه‌ها کاربرد داره، از جمله:

  • تشخیص هرزنامه (spam)
  • دسته‌بندی متن (text classification)
  • پیش‌بینی بیماری‌ها
  • سیستم‌های پیشنهاددهنده (recommendation systems)

خلاصه

نایو بیز یه الگوریتم ساده و پرکاربرد توی یادگیری ماشینه که بر اساس قضیه بیز کار می‌کنه. با وجود فرض ساده‌لوحانه‌ش، توی خیلی از موارد خوب کار می‌کنه و به خصوص برای دسته‌بندی متن خیلی مناسبه. امیدوارم با این توضیحات، یه دید خوب نسبت به نایو بیز پیدا کرده باشید!

یادگیری مچین خیلی جذاب هست، تلاش کتید و این موضوع رو جدی بگیرید.

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


کلیدواژه ها:
  • نایو بیز
  • یادگیری ماشین
  • قضیه بیز
  • دسته بندی متن
  • الگوریتم
نایو بیز دقیقا چیه؟
یه الگوریتم ساده برای پیش‌بینی که بر اساس قضیه بیز کار می‌کنه.
نایو بیز چه فرضی می‌کنه؟
فرض می‌کنه که همه ویژگی‌ها به طور مستقل از هم تاثیر می‌ذارن.
نایو بیز برای چه کارهایی مناسبه؟
برای دسته‌بندی متن، تشخیص هرزنامه، و خیلی کارهای دیگه.
آیا نایو بیز همیشه خوب کار میکنه؟
نه، اگه فرض مستقل بودن ویژگی‌ها درست نباشه، ممکنه خوب کار نکنه.

به اشتراک گذاشتن این مطلب در شبکه های اجتماعی

امتیاز شما به این مطلب

امتیاز: 5 از 5 (مجموع 1 رای)

اولین نفری باشید که در مورد این مقاله نظر می دهید!

7081- V2
Terms & Conditions | Privacy Policy

techfeed.ir© 2024 All rights reserved