سلام دوستان!
شاید اسم "نایو بیز" (Naive Bayes) یکم پیچیده به نظر برسه، ولی اصلا نگران نباشید. این یه روش خیلی ساده و کاربردی توی دنیای یادگیری ماشین (Machine Learning) هست که به ما کمک میکنه بر اساس اطلاعاتی که داریم، یه چیزی رو پیشبینی کنیم. مثل پیشبینی آب و هوا، تشخیص هرزنامه (spam) توی ایمیل، یا حتی دستهبندی اخبار!
نایو بیز بر اساس یه قضیه ریاضی به اسم "قضیه بیز" (Bayes' Theorem) کار میکنه. این قضیه به ما میگه چطور احتمال وقوع یه اتفاق رو با توجه به اطلاعاتی که از قبل داریم، حساب کنیم. به عبارت دیگه، میخوایم ببینیم با داشتن یه سری نشونهها، احتمال اینکه یه اتفاق خاص بیفته چقدره.
حالا چرا بهش میگن "نایو" (Naive)؟ چون نایو بیز یه فرض خیلی سادهلوحانه میکنه: اینکه همه نشونهها به طور مستقل از هم تاثیر میذارن. یعنی فرض میکنه وجود یه نشونه هیچ ربطی به نشونههای دیگه نداره. در صورتی که در واقعیت، این همیشه درست نیست. ولی با این حال، نایو بیز توی خیلی از موارد خیلی خوب جواب میده!
فرض کنید ما میخوایم با استفاده از نایو بیز، پیشبینی کنیم که آیا یه ایمیل هرزنامه هست یا نه. ما چند تا نشونه داریم: کلماتی که توی ایمیل استفاده شده (مثل "جایزه"، "رایگان"، "فوری")، فرستنده ایمیل، و غیره.
نایو بیز میاد احتمال اینکه ایمیل هرزنامه باشه رو با توجه به هر کدوم از این نشونهها حساب میکنه. بعد همه این احتمالات رو با هم ترکیب میکنه و در نهایت به ما یه احتمال کلی میده. اگه این احتمال از یه حدی بیشتر باشه، ایمیل رو به عنوان هرزنامه تشخیص میده.
فرض کنید میخوایم پیش بینی کنیم که آیا یه نفر با توجه به ویژگی هاش (مثلا قد و وزن)، بسکتبالیست هست یا نه.
مرحله 1: آماده سازی داده ها
فرض کنید اطلاعات زیر رو از قبل داریم:
قد (سانتی متر) | وزن (کیلوگرم) | بسکتبالیست؟ |
---|---|---|
185 | 80 | بله |
190 | 85 | بله |
170 | 70 | خیر |
165 | 65 | خیر |
195 | 90 | بله |
مرحله 2: محاسبه احتمالات
حالا باید احتمال اینکه یه نفر بسکتبالیست باشه (P(بسکتبالیست)) و احتمال اینکه یه نفر بسکتبالیست نباشه (P(نه بسکتبالیست)) رو حساب کنیم. از جدول بالا می بینیم که:
همینطور باید احتمال داشتن قد و وزن مشخص رو با توجه به اینکه فرد بسکتبالیست هست یا نه حساب کنیم. اینجا هم از همون جدول استفاده می کنیم. (این قسمت یه مقدار پیچیده تر میشه و معمولا از روش های آماری مثل توزیع نرمال استفاده میشه. برای سادگی، ازش رد میشیم.)
مرحله 3: پیش بینی
حالا فرض کنید یه نفر با قد 180 سانتی متر و وزن 75 کیلوگرم رو داریم. میخوایم پیش بینی کنیم که آیا این فرد بسکتبالیست هست یا نه.
با استفاده از قضیه بیز و احتمالاتی که در مرحله قبل حساب کردیم، می تونیم احتمال اینکه این فرد بسکتبالیست باشه (P(بسکتبالیست | قد=180, وزن=75)) و احتمال اینکه بسکتبالیست نباشه (P(نه بسکتبالیست | قد=180, وزن=75)) رو حساب کنیم. اونی که احتمالش بیشتر باشه، پیش بینی ما خواهد بود.
این یه کد خیلی ساده برای نشون دادن ایده نایو بیز هست. برای کارهای واقعی، بهتره از کتابخونه های آماده مثل 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}")
مزایا:
معایب:
نایو بیز توی خیلی از زمینهها کاربرد داره، از جمله:
نایو بیز یه الگوریتم ساده و پرکاربرد توی یادگیری ماشینه که بر اساس قضیه بیز کار میکنه. با وجود فرض سادهلوحانهش، توی خیلی از موارد خوب کار میکنه و به خصوص برای دستهبندی متن خیلی مناسبه. امیدوارم با این توضیحات، یه دید خوب نسبت به نایو بیز پیدا کرده باشید!
یادگیری مچین خیلی جذاب هست، تلاش کتید و این موضوع رو جدی بگیرید.
شاید یسری از مراحل در این مقاله به درستی کار نکنند, سعی کنید خودتوم تحقیق کنید و بهینه سازی را یاد بگیرید
امتیاز شما به این مطلب
امتیاز: 5 از 5 (مجموع 1 رای)
اولین نفری باشید که در مورد این مقاله نظر می دهید!
techfeed.ir© 2024 All rights reserved