ویرگول
ورودثبت نام
حسین بحری
حسین بحریسالهاست برنامه نویسی رو چه به عنوان حرفه و چه به عنوان سرگرمی و علاقمندی شخصی دنبال می کنم.
حسین بحری
حسین بحری
خواندن ۱۰ دقیقه·۱۶ روز پیش

کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش دوم (رگرسیون)

سایر بخشهای این سلسله مقالات را از دست ندهید:
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش اول
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش دوم
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش سوم
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش چهارم

کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش پنجم(K-means)

کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ بخش ششم و آخر(KNN)

در بخش قبلی مقاله به بررسی الگوریتم Naive Bayes و کاربردهای آن در دسته‌بندی پرداختیم و با ذکر چند مثال کاربردی—مانند تشخیص پیامک‌های اسپم و ارزیابی اعتبار مشتریان بانک—نشان دادیم چگونه یک مدل ساده و سریع می‌تواند در مسائل دودویی (دو دسته‌ای) عملکردی قابل اعتماد داشته باشد. Naive Bayes بر پایهٔ احتمالات شرطی و فرض استقلال ویژگی‌ها کار می‌کند، در عین حال روش دیگری وجود دارد که نه تنها فاقد آن فرضِ محدودکننده است، بلکه خروجی آن مستقیماً یک احتمال قابل تفسیر بوده و همچنان ساده، سریع و مناسب برای محیط‌های صنعتی است: رگرسیون لجستیک.
در این بخش، به روشی کاربردمحور به معرفی و تشریح رگرسیون لجستیک می‌پرداخته و خواهیم دید که چرا بانک‌ها برای پیش‌بینی ریسک وام، بیمارستان‌ها برای تشخیص احتمال بیماری و پلتفرم‌های تبلیغاتی برای پیش‌بینی کلیک کاربر، همگی به این مدل کلاسیک اعتماد می‌کنند؛ و مهم‌تر اینکه، چه زمانی باید از رگرسیون لجستیک بهره برد و چه زمانی Naive Bayes یا جنگل تصادفی گزینهٔ بهتری هستند.

رگرسیون لجستیک

هدف الگوریتم این است که احتمال تعلّق یک نمونه به یکی از دو دسته را پیش‌بینی کند—مثلاً آیا یک ایمیل اسپم است یا نه، یا یک مشتری وامش را بازپرداخت می‌کند؟ برخلاف رگرسیون خطی که خروجی آن یک عدد آزاد است، رگرسیون لجستیک خروجی را به بازهٔ بین ۰ تا ۱ می‌برد تا بتوان آن را به‌عنوان احتمال تفسیر کرد (مثلاً ۰.۸۵ یعنی ۸۵٪ شانس اسپم بودن). این مدل ساده، سریع و قابل تفسیر بوده و همچنان در صنعت—به‌ویژه در بانکداری و بازاریابی—یکی از پرکاربردترین ابزارهای تصمیم‌گیری هوشمند محسوب می‌شود.

مثال تشخیص پیامک‌های تبلیغاتی را در نظر بگیرید که یکی از کاربردهای کلاسیک دسته‌بندی دودویی است. هدف، تمایز پیامک‌های «تبلیغاتی» از «شخصی» تنها بر اساس متن آن‌هاست. مراحل اجرای الگوریتم در این مثال به‌صورت زیر است:
۱. جمع‌آوری و برچسب‌گذاری داده‌های آموزشی: جمع‌آوری هزاران پیامک قدیمی که قبلاً دسته‌بندی شده‌اند (مثلاً ۳۰٪ تبلیغاتی، ۷۰٪ شخصی).
۲. پیش‌پردازش متن: تبدیل هر پیامک به یک بردار عددی با شمارش فراوانی کلمات کلیدی (مثل «تخفیف»، «فوری»، «سلام» و غیره).
۳. آموزش مدل: محاسبهٔ وزن یا احتمال تعلق هر کلمه به هر دسته (مثلاً «تخفیف» به چه میزان در پیامک‌های تبلیغاتی ظاهر می‌شود؟).
۴. پیش‌بینی برای پیامک جدید: وقتی پیامکی مانند «تخفیف ویژه فقط امروز!» دریافت می‌شود، مدل بر اساس کلمات آن و دانش آموخته‌شده، احتمال تعلق آن به هر دسته را محاسبه و تصمیم نهایی را می‌گیرد—مثلاً «با اطمینان ۹۶٪ این پیامک تبلیغاتی است».
از نظر فرآیندی، الگوریتم رگرسیون لجستیک (Logistic Regression) بسیار شبیه به الگوریتم Naive Bayes (NB) است: هر دو برای حل مسائل دسته‌بندی دودویی طراحی شده‌اند، هر دو نیازمند داده‌های آموزشی برچسب‌خورده هستند، و هر دو پس از یادگیری، برای یک نمونهٔ جدید احتمال تعلّق به هر دسته را تخمین می‌زنند. تفاوت اصلی در نحوهٔ محاسبهٔ این احتمال است.
‏Naive Bayes بر پایهٔ قضیهٔ بیز و با فرض استقلال ویژگی‌ها، احتمال شرطی هر ویژگی را جداگانه محاسبه و سپس آن‌ها را در هم ضرب می‌کند. در مقابل، رگرسیون لجستیک یک تابع خطی از ویژگی‌ها می‌سازد (مثل: وزن × درآمد + ضریب × سابقه)، سپس از یک تابع خاص به نام سیگموئید استفاده می‌کند تا این مقدار خطی را به یک عدد بین ۰ و ۱—یعنی یک احتمال—تبدیل کند.

مثال - ارزیابی اعتباری مشتریان در بانک

فرض کنید می‌خواهیم بر اساس دو ویژگی «درآمد» (به میلیون تومان) و «سابقه اعتباری» (به ماه) تشخیص دهیم که آیا مشتری وامش را بازپرداخت می‌کند یا خیر.
در Naive Bayes:

  • احتمال «درآمد = ۲۰» در گروه بازپرداخت‌کنندگان = ۰.۱۵ است

  • احتمال «سابقه = ۱۸» در همان گروه = ۰.۱۲ است

  • بنابراین مقدار شباهت = ۰.۱۵ × ۰.۱۲ = ۰.۰۱۸ → که سپس با قانون بیز ترکیب می‌شود.

در رگرسیون لجستیک:
اول یک جمع وزنی از ویژگی‌های مشتری محاسبه می‌شود—مثل اینکه یک داور نمرهٔ کلی بدهد. هر ویژگی (مثلاً درآمد یا سابقه اعتباری) یک «وزن» دارد که نشان می‌دهد چقدر روی تصمیم تأثیرگذار است. این وزن‌ها دقیقاً همان چیزی هستند که مدل در مرحلهٔ آموزش یاد می‌گیرد.
فرض کنید پس از آموزش، مدل این ضرایب را یاد گرفته است:

  • برای هر یک میلیون تومان درآمد، امتیاز مشتری ۰.۰۴ واحد افزایش می‌یابد (درآمد بالاتر = خطر کمتر).

  • برای هر یک ماه سابقهٔ اعتباری خوب، امتیاز ۰.۰۶ واحد بالا می‌رود (سابقه طولانی‌تر = قابل اعتمادتر).

  • همچنین یک عدد ثابت به نام عرض از مبدأ (bias) وجود دارد که مثل یک «حد آستانهٔ پایه» عمل می‌کند؛ در اینجا −۱.۵ است.
    حالا یک مشتری جدید می‌آید با:

  • درآمد = ۲۰ میلیون تومان

  • سابقه = ۱۸ ماه
    مدل ابتدا یک امتیاز خام محاسبه می‌کند:

‮‮‮ (وزن درآمد × درآمد) + (وزن سابقه × سابقه) + عرض از مبدأ = امتیاز
= (۰.۰۴ × ۲۰) + (۰.۰۶ × ۱۸) + (−۱.۵)
= ۰.۸ + ۱.۰۸ − ۱.۵ = ۰.۳۸

این عدد (۰.۳۸) هنوز یک احتمال نیست—می‌تواند منفی یا بزرگتر از ۱ باشد. پس رگرسیون لجستیک از یک تابع هوشمند به نام سیگموئید استفاده می‌کند تا این امتیاز را به یک عدد بین ۰ تا ۱ تبدیل کند. این تابع مثل یک «مبدل احتمال» عمل می‌کند:

  • اگر امتیاز خام خیلی منفی باشد → احتمال نزدیک به ۰ (تقریباً مطمئنیم که بدحساب است)

  • اگر امتیاز خام صفر باشد → احتمال = ۰.۵ (شانس برابر)

  • اگر امتیاز خام مثبت و بزرگ باشد → احتمال نزدیک به ۱ (تقریباً مطمئنیم که خوش‌حساب است)
    برای امتیاز ۰.۳۸، تابع سیگموئید مقداری حدود ۰.۵۹ تولید می‌کند. این یعنی:

    «با توجه به درآمد و سابقهٔ این مشتری، ۵۹٪ امکان دارد وامش را به‌موقع بازپرداخت کند.»

این عدد را می‌توان مستقیماً در تصمیم‌گیری استفاده کرد: مثلاً اگر آستانهٔ بانک ۵۰٪ باشد، وام تأیید می‌شود؛ اگر ۷۰٪ باشد، رد می‌شود.
نکتهٔ زیبای رگرسیون لجستیک این است که هم ساده است، هم خروجی‌اش یک احتمال واقعی است، و هم ضرایبش قابل تفسیرند—مثلاً بانک می‌تواند بگوید: «هر ۱۰ میلیون افزایش درآمد، احتمال بازپرداخت را حدود ۴۰٪ نسبی افزایش می‌دهد.» این ویژگی آن را به یکی از معدود مدل‌هایی تبدیل می‌کند که هم در عمل کاربردی است و هم برای انسان‌ها قابل درک.
همان‌طور که می‌بینید، Naive Bayes با ضرب احتمالات محلی کار می‌کند، در حالی که رگرسیون لجستیک یک ترکیب خطی جهانی از ویژگی‌ها ایجاد می‌کند و سپس آن را غیرخطی می‌سازد. این تفاوت باعث می‌شود رگرسیون لجستیک بتواند روابط پیچیده‌تری بین ویژگی‌ها را (بدون فرض استقلال آنها) مدل کند، از طرف دیگر Naive Bayes در برابر داده‌های کم سریع‌تر و مقاوم‌تر است.

مثال - تشخیص پیامک های تبلیغاتی

هدف در این مثال اینست که، یک سیستم هوشمند دیدن متن یک پیامک جدید—بدون دخالت انسان—تصمیم بگیرد که آیا این پیام تبلیغاتی است یا شخصی.
یک مسئلهٔ دسته‌بندی دودویی: خروجی نهایی فقط دو حالت دارد—«اسپم» یا «غیراسپم»—اما رگرسیون لجستیک به جای پریدن مستقیم به یکی از این دو برچسب، ابتدا احتمال تعلّق پیامک به دستهٔ اسپم را محاسبه می‌کند. این احتمال عددی بین ۰ تا ۱ است؛ مثلاً ۰.۹۲ یعنی «با اطمینان ۹۲٪ این پیام تبلیغاتی است».
برای انجام این کار، سیستم ابتدا متن پیامک را به یک بردار عددی تبدیل می‌کند—معمولاً با شمارش تعداد دفعاتی که کلمات کلیدی (مثل «تخفیف»، «فوری»، «برنده شوید») در آن ظاهر شده‌اند. سپس، با استفاده از ضرایبی که قبلاً از داده‌های آموزشی یاد گرفته (مثلاً وزن کلمهٔ «تخفیف» = ۱.۲، وزن «سلام» = −۰.۸)، یک امتیاز خطی محاسبه می‌کند. این امتیاز از طریق تابع سیگموئید به یک احتمال تبدیل می‌شود.
اما متن خام (مثل یک پیامک) چگونه به بردار عددی تبدیل می شود؟
اینکار مراحل ساده‌ای دارد:
۱. پاک‌سازی: حروف را کوچک می‌کنیم، علائم نگارشی را حذف می‌کنیم و کلمات را به صورت پایه (مثلاً «خریدم» → «خرید») درمی‌آوریم.
۲. حذف کلمات بی‌معنی: کلماتی مثل «و»، «در»، «است» که اطلاعات تشخیصی ندارند (stop words) حذف می‌شوند.
۳. بردارسازی: هر پیامک را به یک لیست عددی تبدیل می‌کنیم. ساده‌ترین روش، شمارش فراوانی (Term Frequency) است: برای هر کلمهٔ مهم (مثل «تخفیف»، «فوری»)، تعداد دفعاتی که در پیامک آمده است را یادداشت می‌کنیم. اگر کلمه وجود ندارد، عدد آن صفر است.
نتیجه، یک بردار عددی است—مثلاً [۰, ۱, ۰, ۲]—که هر خانه نشان‌دهندهٔ یک کلمهٔ از پیش‌تعریف‌شده است. این بردار ورودی واقعی مدل رگرسیون لجستیک است.
گاهی به جای شمارش ساده، از روش TF-IDF استفاده می‌شود تا کلمات رایج ولی بی‌ارزش (مثل «سلام») وزن کمتری بگیرند. اما حتی با ساده‌ترین روش، رگرسیون لجستیک می‌تواند الگوهای مفیدی—مثل «وجود کلمهٔ تخفیف = احتمال بالای اسپم»—را یاد بگیرد.
حال بیایید روش محاسبهٔ ضرایب (وزن‌ها) از روی داده‌های آموزشی را بررسی کنیم.
در این روش، این ضرایب—که نشان می‌دهند هر ویژگی چقدر روی خروجی تأثیر می‌گذارد—به صورت خودکار و با استفاده از یک فرآیند بهینه‌سازی یاد گرفته می‌شوند. هدف اصلی این است که مدل بتواند احتمال‌هایی تولید کند که تا حد ممکن با واقعیت هم‌خوانی داشته باشند.
برای مثال، فرض کنید می‌خواهیم تشخیص دهیم یک پیامک اسپم است یا خیر، و فقط سه کلمهٔ کلیدی را در نظر می‌گیریم: «تخفیف»، «فوری» و «سلام». هر پیامک به یک بردار سه‌تایی تبدیل می‌شود—مثلاً پیامک «تخفیف فوری!» می‌شود [۱, ۱, ۰] چرا که کلمات «تخفیف» و «فوری» در آن وجود دارند و کلمه «سلام» نه.
مدل برای هر کلمه یک وزن (w₁, w₂, w₃) در نظر گرفته و همچنین یک عدد ثابت (b) نیز برای بایاس مشخص می‌کند. در مرحلهٔ آموزش، الگوریتم این وزن‌ها را طوری تنظیم می‌کند که:

  • وقتی یک پیامک واقعاً اسپم است، احتمال پیش‌بینی‌شده توسط مدل نزدیک به ۱ باشد.

  • وقتی پیامک غیراسپم است، احتمال پیش‌بینی‌شده نزدیک به ۰ باشد.
    این کار با کمینه‌کردن یک تابع هزینه (معمولاً حداکثر شباهت یا Maximum Likelihood) انجام می‌شود. الگوریتم—معمولاً با روشی به نام گرادیان کاهشی—در هر مرحله وزن‌ها را کمی جابه‌جا می‌کند تا خطای کلی کاهش یابد.

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

مثلاً اگر مدل برای یک پیامک اسپم فقط احتمال ۰.۳ داده باشد، الگوریتم متوجه می‌شود که وزن کلماتی مثل «تخفیف» باید افزایش یابد. برعکس، اگر کلمه‌ای مثل «سلام» بیشتر در پیامک‌های شخصی دیده شود، وزن آن منفی خواهد شد تا حضور آن، احتمال اسپم بودن را کاهش دهد.
این فرآیند تا جایی ادامه می‌یابد که دیگر نتوان خطا را به‌طور قابل توجهی کاهش داد—یعنی مدل به بهترین ترکیب ممکن از وزن‌ها رسیده است. نکتهٔ زیبای این روش این است که همهٔ این یادگیری بدون دخالت انسان و فقط با دیدن الگوهای موجود در داده‌های آموزشی انجام می‌شود.

رگرسیون خطی

بد نیست در انتهای این بخش اشاره‌ای هم به رگرسیون خطی و تفاوت آن با لجستیک داشته باشیم.
رگرسیون خطی (Linear Regression): بر خلاف لجستیک یک عدد پیوسته را پیش‌بینی می‌کند. یعنی خروجی می‌تواند هر مقداری باشد (از منفی تا مثبت بی‌نهایت). خطای مدل معمولاً با معیاری مثل "مجذور خطا" سنجیده می‌شود و مدل سعی می‌کند یک خط مستقیم از میان نقاط داده عبور دهد.
مثالی از بازارهای مالی:
فرض کنید می‌خواهیم قیمت سهام یک شرکت را بر اساس "حجم معاملات روزانه" تحلیل کنیم.

  • از رگرسیون خطی: برای پیش‌بینی «میزان دقیق قیمت پایانی سهم» استفاده می‌کنیم.
    مثل اینکه بپرسیم: «اگر حجم معاملات فلان قدر باشد، قیمت سهم فردا چند تومان خواهد بود؟». خروجی اینجا یک عدد است (مثلاً ۱۵۳۲۰ تومان). این روش به درد سرمایه‌گذاری می‌خورد که می‌خواهد ارزش واقعی یک دارایی را تخمین بزند.

  • از رگرسیون لجستیک: برای پیش‌بینی «جهت حرکت بازار» استفاده می‌کنیم.
    مثلاً می‌پرسیم: «با توجه به حجم معاملات امروز، آیا قیمت سهم فردا رشد می‌کند یا افت؟». خروجی اینجا یک احتمال بین ۰ تا ۱ است (مثلاً ۸۵٪ احتمال رشد). با تعیین یک آستانه (مثلاً ۵۰٪)، مدل تصمیم می‌گیرد که سیگنال «خرید» صادر کند یا «فروش».

تفاوت اصلی دو روش در نوع سؤالی است که هر مدل پاسخ می‌دهد:

  • رگرسیون خطی می‌پرسد: «چقدر؟» → پاسخ: یک عدد است.

  • رگرسیون لجستیک می‌پرسد: «آیا؟» یا «کدام؟» → پاسخ: یک احتمال برای تصمیم‌گیری دودویی.

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

سایر بخشهای این سلسله مقالات را از دست ندهید:
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش اول
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش دوم
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش سوم
کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش چهارم

کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ - بخش پنجم(K-means)

کدام مدل هوش مصنوعی برای کدام مسئله مناسب است؟ بخش ششم و آخر(KNN)

رگرسیون خطیرگرسیون لجستیکهوش مصنوعیکاربرد هوش مصنوعی
۳
۱
حسین بحری
حسین بحری
سالهاست برنامه نویسی رو چه به عنوان حرفه و چه به عنوان سرگرمی و علاقمندی شخصی دنبال می کنم.
شاید از این پست‌ها خوشتان بیاید