
Support Vector Machines (SVM): Concepts and Code
AI Summary
**خلاصهٔ ویدیو دربارهٔ ماشینهای بردار پشتیبان (SVM)**
ویدیو با یک مثال ساده شروع میشود: وزن موشها را میگیرد و میخواهد آنها را به دو دستهٔ «چاق» و «غیرچاق» تقسیم کند. اگر فقط یک آستانهٔ وزن استفاده کنیم، موشی که وزن آن بالاتر از آستانه است اما نزدیک به موشهای غیرچاق باشد، به اشتباه دستهٔ «چاق» میشود. بنابراین فقط یک آستانه ثابت کافی نیست.
**حاشیهٔ حداکثری**
بهتر است آستانه را بین دو مشاهدۀ لبهکلسترها بگذاریم؛ این نقطهٔ میانی حداکثر فاصله (margin) را از هر دو دسته ایجاد میکند. حاشیهٔ بزرگتر نشاندهندهٔ جدایی واضحتر دادههاست. این روش را «طبقهبند حاشیهٔ حداکثری» (maximal‑margin classifier) مینامند.
**مشکل دادهٔ پرت**
اگر در دادهها نقطهای پرت (outlier) وجود داشته باشد، حاشیهٔ حداکثری ممکن است به سمت آن نقطه کشیده شود و مرز را از اکثر نقاط دیگر دور کند. در این حالت مدل به دادههای جدید حساسیت زیادی دارد (خطای واریانس زیاد) و عملکردش ضعیف میشود.
**قلمرو نرم (Soft‑Margin) و تعادلی بایاس‑واریانس**
برای رفع حساسیت به پرتها، اجازه میدهیم تا چند نقطهٔ آموزشی بهاشتباه دستهبندی شوند. این کار حاشیه را «نرم» میکند و بایاس مدل را افزایش میدهد ولی واریانس را کاهش میدهد. تعادل مناسب بین بایاس (خطای پیشبینی روی دادههای آموزشی) و واریانس (خطای پیشبینی روی دادههای جدید) هدف اصلی است. برای تعیین تعداد نقاطی که میتوانند داخل حاشیهٔ نرم قرار بگیرند، از **اعتبارسنجی متقابل (cross‑validation)** استفاده میشود.
**بردارهای پشتیبان**
نقطههای نزدیک به مرز (یا داخل حاشیهٔ نرم) را «بردارهای پشتیبان» مینامند؛ اینها همان مواردی هستند که مدل برای تعیین مرز به آنها وابسته است. بنابراین نام «طبقهبند بردار پشتیبان» (Support Vector Classifier) بهدست میآید.
**گسترش به ابعاد بیشتر**
اگر برای هر نمونه دو ویژگی (وزن و ارتفاع) داشته باشیم، دادهها دو‑بعدی میشوند و مرز یک خط میشود. با سه ویژگی (وزن، ارتفاع، سن) مرز یک صفحهٔ سهبعدی خواهد بود؛ با بیشتر از سه ویژگی، مرز تبدیل به «هایپرپلین» (hyperplane) میشود. مفهوم «فضای مسطح (flat affine subspace)» برای خط، صفحه یا هایپرپلین به کار میرود.
**محدودیتهای طبقهبندهای بردار پشتیبان**
وقتی دو کلاس به شدت همپوشانده شوند (مثلاً اثر دوز دارو بر بهبود بیماران که برای مقادیر خیلی کوچک یا خیلی بزرگ مؤثر نیست)، هیچ خط مستقیم واضحی وجود ندارد و حتی مرز نرم هم کارایی مناسبی نمیدهد.
**ماشینهای بردار پشتیبان (SVM) و تبدیل ابعاد**
برای حل این مشکل، دادهها به فضای با ابعاد بالاتر منتقل میشوند. مثال ویدیو: دوز دارو را به محور x میگذاریم و دوز² را به محور y؛ به این ترتیب دادهها دو‑بعدی میشوند و یک خط میتواند دو کلاس را جدا کند. این تبدیل ساده (قانونی مثل توان) فقط یک مثال است؛ در عمل میتوان توابع پیچیدهتری به کار برد.
**هسته (Kernel)ها**
بهجای انجام صریح تبدیل به ابعاد بالاتر، از توابع هسته استفاده میشود که روابط میان تمام جفت نقطهها را طوری محاسبه میکند که گویی دادهها در فضای بالاتر قرار دارند. انواع هستههای متداول:
* **هستهٔ چندجملهای (Polynomial Kernel)** – با پارامتر d درجهٔ چندجملهای را مشخص میکند. d = 1 همان رابطهٔ خطی، d = 2 تبدیل به فضای دو‑بعدی (دوز²)، d = 3 به سه‑بعدی (دوز³) و …
* **هستهٔ شعاعی پایه (RBF یا Radial Kernel)** – به صورت نظری در فضای بینهایت عمل میکند؛ وزن بیشترین به نزدیکترین نقاط (همسایههای نزدیک) میرسد و نقاط دورمختصات تأثیر کمی دارند.
برای انتخاب مقدار مناسب d یا پارامترهای دیگری مانند γ در RBF، از **cross‑validation** استفاده میشود؛ مدلهای مختلف را میسازیم، عملکردشان را روی زیرمجموعهای از دادهها میسنجیم و بهترین مقدار را انتخاب میکنیم.
**ترفند هسته (Kernel Trick)**
هستهها روابط را در فضای بالا **بدون** تبدیل صریح محاسبه میکنند؛ این کار هزینهٔ محاسباتی را بهطور چشمگیری کم میکند. بهعبارت دیگر، ما در ابعاد پایین کار میکنیم ولی همانند اینکه در ابعاد بالا بودهایم، نتایج همانند یک طبقهبند خطی در فضای بالا بهدست میآید.
**کد پیایتون با استفاده از scikit‑learn**
قسمت عملی ویدیو نشان میدهد چطور یک SVM با هستهٔ چندجملهای را پیادهسازی کنیم:
1. بارگذاری کتابخانهها (`numpy`, `pandas`, `matplotlib`, `seaborn`, `sklearn`).
2. خواندن دیتاست دیابت (ویژگیهای گلوکز و فشار خون) و انتخاب یک ویژگی (گلوکز) برای مثال.
3. تقسیم دادهها به مجموعهٔ آموزشی و تستی (`train_test_split`).
4. استانداردسازی دادهها (`StandardScaler`) تا مدل حساس به مقیاس نباشد.
5. ساخت مدل `SVC(kernel='poly', degree=2, coef0=0.5)` که معادل افزودن ویژگی «گلوکز²» است.
6. آموزش مدل روی دادههای آموزشی (`fit`) و پیشبینی روی تست (`predict`).
7. محاسبهٔ ماتریس درهمریختگی (confusion matrix) و دقت کلی (≈ 68 %).
8. برای نشان دادن «ترفند هسته»، دادهها را بهصورت صریح با افزودن ستون «گلوکز²» تبدیل میکنیم و مدل خطی (`kernel='linear'`) میگیریم؛ نتایج دقیقاً همانند مدل هستهای میشود که تائید میکند هسته واقعاً همان تبدیل را انجام میدهد.
9. استخراج وزنها (`coef_`) و بایاس (`intercept_`) برای رسم خط تصمیمگیری در فضای دو‑بعدی (گلوکز vs گلوکز²). این خط نشان میدهد نقاط زیر خط به کلاس ۰ و بالای خط به کلاس ۱ نسبت داده میشوند.
**نتیجهگیری**
ویدیو نکات کلیدی زیر را برجسته میکند:
* حاشیهٔ بزرگ (maximal margin) در حضور دادههای پرت ضعیف است؛ بهجای آن از حاشیهٔ نرم (soft‑margin) استفاده میکنیم.
* انتخاب مناسب بین بایاس و واریانس با اعتبارسنجی متقابل انجام میشود.
* وقتی دادهها در فضاهای کمبعدی قابل جداسازی نیستند، با تبدیل به فضای بالاتر (توسط هسته) میتوان مرز خطی یافت.
* هستههای چندجملهای و RBF رایجترین گزینهها هستند؛ پارامترهایشان با روشهای آزمون‑و‑خطا یا cross‑validation تنظیم میشود.
* «ترجمان هسته» (kernel trick) باعث میشود محاسبهٔ روابط در فضای بینهایت یا چندبعدی بدون هزینهٔ سنگین تبدیل صریح انجام شود.
* پیادهسازی در پایتون با کتابخانهٔ scikit‑learn ساده است: توابع `SVC`, `StandardScaler`, `train_test_split` و متریکهای `confusion_matrix`, `accuracy_score` تمام مراحل را پوشش میدهند.
* با افزودن ویژگیهای ساختهشده بهصورت دستی میتوان رفتار هسته را تأیید کرد و خط تصمیمگیری را بهصورت گرافیکی نشان داد.
در پایان سخنران از دورهٔ آموزشی خود دربارهٔ پیشپردازش دادهها (pandas, Polars, R) و کاربردهای SVM در پروژههای واقعی یادآوری میکند و فراخوانی برای شرکت در کارگاههای بعدی مینماید.
بهطور خلاصه، ویدیو مفاهیم بنیادی SVM (حاشیهٔ حداکثری، حاشیهٔ نرم، بردارهای پشتیبان)، مشکلات کلاسیک (دادههای پرت، همپوشانی شدید)، راهحلهای هستهای (Polynomial, RBF) و نحوهٔ پیادهسازی عملی را در قالب مثال موش و سپس دیتاست دیابت ارائه میدهد. این نکات به شنونده امکان میدهد تا درک روشنی از چگونگی ساخت، تنظیم و ارزیابی یک مدل SVM داشته باشد.