بیز ساده
جواب کوتاه
بیز ساده یه روش دستهبندیه که فقط با شمردن کار میکنه. مثلا برای جدا کردن پیامک تبلیغاتی از معمولی، میشمره هر کلمه توی هر دسته چقدر اومده؛ «جایزه» توی تبلیغیها زیاده و توی معمولیها کم. برای یه پیامک تازه، سهم هر دسته رو در احتمال تکتک کلمههاش ضرب میکنه و هر دستهای که عددش بزرگتر شد، جوابه. اسمش «ساده»ست چون فرض میکنه کلمهها به هم ربطی ندارن، که درست نیست؛ ولی باز هم خوب کار میکنه. خیلی سریعه، و برای اینکه یه کلمهی ندیده همهچی رو صفر نکنه، به همهی شمارشها یه ۱ اضافه میکنن.
پیامک تازه
یه پیامک میاد: «فردا جایزهتون رو بگیرید». تبلیغیه یا معمولی؟ شما تو یه ثانیه میفهمید. ولی یه برنامه از کجا بفهمه؟
شمردن کلمهها
فرض کنید ۱۰۰ تا پیامک قدیمی داریم که میدونیم کدوم تبلیغی بوده و کدوم معمولی: ۴۰ تبلیغی، ۶۰ معمولی. حالا میشمریم دو تا کلمه توی هر دسته چند بار اومده:
«جایزه» توی نصف پیامکهای تبلیغی بوده (۲۰ از ۴۰)، ولی فقط توی ۵ درصد معمولیها (۳ از ۶۰). «فردا» برعکسه: توی ۲۰ درصد تبلیغیها و نصف معمولیها.
همین. کل آموزش بیز ساده همین شمردنه. نه گرادیان کاهشی داره، نه دور پشت دور. برای همین خیلی سریع آموزش میبینه.
ضرب کردن
حالا پیامک تازه هم «جایزه» داره هم «فردا». برای هر دسته سه تا عدد رو در هم ضرب میکنیم: سهم اون دسته از کل پیامکها، و احتمال هر کلمه توی اون دسته.
تبلیغی ۰٫۰۴ شد و معمولی ۰٫۰۱۵. تبلیغی بزرگتره، پس جواب: تبلیغی. با اینکه «فردا» بیشتر مال معمولیها بود، «جایزه» خیلی قویتر به سمت تبلیغی کشید.
اون «سهم دسته» هم مهمه: اگه کلا پیامکهای تبلیغی خیلی کم باشن، باید شواهد بیشتری ببینیم تا بگیم تبلیغیه. این ایدهی برعکس کردن احتمال، یعنی از «توی تبلیغیها جایزه چقدر میاد» رسیدن به «با دیدن جایزه، چقدر احتمال داره تبلیغی باشه»، اسمش قاعدهی بیز هست و مال قرن ۱۸.
چرا «ساده»؟
دقت کردید که احتمال «جایزه» و «فردا» رو جدا جدا ضرب کردیم؟ یعنی فرض کردیم این دو تا کلمه هیچ ربطی به هم ندارن.
ولی توی واقعیت، کلمهها با هم میان. «جایزه» و «برنده» معمولا کنار همن. بیز ساده این رو نادیده میگیره و هر کدوم رو جدا حساب میکنه. اسمش هم به خاطر همین فرض سادهلوحانهست.
جالبش اینه که با همین فرض غلط، اغلب خوب کار میکنه. چون برای جواب درست، لازم نیست عددها دقیق باشن؛ فقط کافیه دستهی درست عدد بزرگتری بگیره.
مشکل صفر
حالا فرض کنید پیامک تازه کلمهی «قرعهکشی» رو هم داره، و این کلمه توی ۶۰ تا پیامک معمولی هیچوقت نیومده. احتمالش میشه صفر.
یه صفر توی ضرب، همهچی رو صفر میکنه؛ هر چی بقیهی کلمهها گفته باشن، دیگه مهم نیست. فقط به خاطر یه کلمه که شانسی ندیده بودیم.
راهش سادهست: به همهی شمارشها یه ۱ اضافه میکنیم. یکی به «داشته» و یکی به «نداشته»؛ برای همین ۰ از ۶۰ میشه ۱ از ۶۲. حالا کوچیکه، ولی صفر نیست. به این کار میگن هموارسازی لاپلاس.
چند نکته
- خیلی سریع: برای هر ویژگی فقط یه شمارش لازمه، پس با هزاران کلمه و میلیونها پیامک هم راحت کار میکنه.
- به عددش زیاد اعتماد نکنید: احتمالی که بیز ساده میده اغلب بیش از حد مطمئنه. جوابش (کدوم دسته) معمولا خوبه، ولی اون درصد رو جدی نگیرید. اگه خود احتمال مهمه، رگرسیون لجستیک معمولا بهتره.
- عددهای خیلی کوچیک: با صدها کلمه، ضرب اینهمه عدد کوچیک اونقدر کوچیک میشه که کامپیوتر درست نگهش نمیداره. برای همین جای ضرب، لگاریتمها رو جمع میکنن.
درس بعد یه روش کاملا متفاوت: جای شمردن و ضرب کردن، یه سری سوال بله و نه میپرسه؛ درخت تصمیم.
جمعبندی. آنچه از این درس با خودتان میبرید.
- آموزش = شمردن، توی هر دسته.
- سهم دسته × احتمال هر کلمه.
- عدد بزرگتر، جواب.
- ساده: کلمهها رو بیربط فرض میکنه.
- +۱ به همهی شمارشها، تا صفر نشه.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.