الگوریتم های داده کاوی در SQL Server Data Tools یا SSDT - قسمت دوم - الگوریتم Naïve Bayes
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: چهار دقیقه

در قسمت قبل به صورت اجمالی با الگوریتم‌های داده کاوی در SSDT آشنا شدید. در این قسمت به الگوریتم Naive Bayes خواهیم پرداخت.


برای روشن‌تر شدن مطلب، سیستم رای گیری را در نظر بگیرید، در رابطه با سیستم رای گیری از طریق این الگوریتم می‌توان به پرسش‌های زیر پاسخ داد: 
  • مهمترین آرای هر حزب چه هستند؟
  • توزیع آرا در رابطه با یک عمل خاص (پرداخت یارانه یا عدم پرداخت آن) چگونه بوده است؟
  • توزیع آرای یک عمل خاص درمیان آرای اعمال دیگر چگونه بوده است و چه ارتباطی بین آنها است؟

این الگوریتم، ارتباط بین ویژگی‌ها را مشخص می‌کند، این درحالی است که از طریق الگوریتم‌های دیگر این کار به سادگی قابل کشف نیست. 
یک راه خوب برای شروع داده کاوی ساخت مدل Naïve Bayes و چک کردن ورودی و خروجی برروی تمام ستون‌ها است. مدل حاصل سبب می‌شود که درک بهتری از داده‌ها پیدا کرده و ساخت مدل‌های دیگر داده کاوی مانند درخت تصمیم و ... راحت‌تر انجام پذیرد. به همین جهت، اولین الگوریتم معرفی شده نیز این الگوریتم می‌باشد.
بنابراین زمانیکه با یک مجموعه داده جدید روبرو می‌شویم، راحت‌ترین راه برای شروع داده کاوی، ساخت یک مدل از Naïve Bayes است، به طوریکه تمامی ستون‌های غیرکلید را به عنوان predict یا همان هم ورودی-هم خروجی در نظر می‌گیریم. پس از آموزش مدل به قسمت Dependency Network می‌رویم. نمونه ای از شبکه وابستگی‌ها را در شکل زیر مشاهده می‌کنید که در حقیقت گرافی از نودها است.

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


نکته مهم: اگر هدف ما پیش بینی یک ویژگی باشد، ارتباط قوی ما بین دو ورودی، مشخص می‌کند که استفاده از هردوی آن‌ها برای پیش بینی یک ویژگی خروجی، کاری بس اشتباه است؛ زیرا ورودی‌های شبیه به هم می‌توانند اثر دوبرابری داشته باشند. برای مثال در شکل بالا در صورتی که ارتباط موجود بین دو ویژگی Young Frankenstein و Monty Python and the Holy Grail قوی باشد بایستی از انتخاب هر دوی این ویژگی‌ها به عنوان ورودی برای پیش بینی ویژگی Princess Bride پرهیز نمود.

جهت درک بهتر داده‌ها می‌توان به قسمت Attribute Profile مراجعه نمود. همانطور که درشکل زیر آمده است در این بخش ماتریسی از نحوه ارتباط بین تمامی حالات ورودی‌ها و خروجی‌ها نشان داده شده است.

 از لیست کشویی، خروجی مدنظر را انتخاب می‌کنیم و ماتریس درصد پیش بینی خروجی از روی ورودی یا ورودی‌ها نشان داده می‌شود. 
اگر هدف درک شباهت‌ها و اختلافات حالت‌های هدف پیش بینی باشد می‌توان از دو قسمت Attribute Characteristics و Attribute Discrimination استفاده نمود. در رابطه با Attribute Characteristics دو مساله را باید در نظر داشت:
  1. قدرت پیش بینی ندارد یعنی نباید در این قسمت از روی ویژگی‌ها به پیش بینی هدفی پرداخت. 
  2. ورودی هایی که امتیازشان از مینیمم امتیاز یک گره پایین‌تر است نشان داده نمی‌شوند.  
نمایی از Attribute Characteristics را در زیر مشاهده می‌نمایید.

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


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

در این الگوریتم ورودی و خروجی باید Discrete (گسسته) باشند و در صورتیکه Continuous (پیوسته) باشند بایستی Discretize شوند. البته باید درنظر داشت که در حالت کلی این الگوریتم در رابطه با داده‌های Continuous کاربرد مناسبی ندارد. بنابراین پیش بینی این داده‌ها حتی اگر Discretize شوند با این الگوریتم خوب نیست.
در پایان بهتر است دوباره به این نکته اشاره شود که بایستی مراقب بود تا ورودی‌ها تقریبا مستقل از یکدیگر انتخاب شوند؛ زیرا ورودی‌های شبیه به هم می‌توانند اثر دوبرابری و مخربی داشته باشند که بایستی از آن اجتناب کرد. به دلیل چنین رفتاری، ارزیابی مدل توسط lift chart حتما پیشنهاد می‌شود.