logo

Алгоритм опорної векторної машини (SVM).

Support Vector Machine (SVM) — це потужний алгоритм машинного навчання, який використовується для завдань лінійної чи нелінійної класифікації, регресії та навіть виявлення викидів. SVM можна використовувати для різноманітних завдань, таких як класифікація тексту, класифікація зображень, виявлення спаму, ідентифікація рукописного тексту, аналіз експресії генів, виявлення облич і виявлення аномалій. SVM є адаптивними та ефективними в різноманітних програмах, оскільки вони можуть керувати даними великої розмірності та нелінійними зв’язками.

Алгоритми SVM дуже ефективні, оскільки ми намагаємося знайти максимальну роздільну гіперплощину між різними класами, доступними в цільовому об’єкті.

макет сітки

Підтримуюча векторна машина

Машина опорного вектора (SVM) — це a кероване машинне навчання алгоритм, що використовується як для класифікації, так і для регресії. Хоча ми також говоримо про проблеми регресії, це найкраще підходить для класифікації. Основна мета алгоритму SVM — знайти оптимальну гіперплощину в N-вимірному просторі, яка може розділити точки даних у різних класах у просторі ознак. Гіперплощина намагається, щоб відстань між найближчими точками різних класів була якомога більшою. Розмірність гіперплощини залежить від кількості ознак. Якщо кількість вхідних елементів дорівнює двом, то гіперплощина є просто лінією. Якщо кількість вхідних елементів дорівнює трьом, то гіперплощина стає двовимірною площиною. Стає важко уявити, коли кількість ознак перевищує три.



Розглянемо дві незалежні змінні x1, х2,і одна залежна змінна, яка є синім або червоним колом.

Лінійно роздільні точки даних

З малюнка вище дуже ясно, що є кілька ліній (наша гіперплощина тут є лінією, оскільки ми розглядаємо лише дві вхідні характеристики x1, х2), які відокремлюють наші точки даних або проводять класифікацію між червоними та синіми колами. Отже, як вибрати найкращу пряму або загалом найкращу гіперплощину, яка розділяє наші точки даних?

Як працює SVM?

Один розумний вибір як найкраща гіперплощина – це та, яка представляє найбільше розділення або маржу між двома класами.

Кілька гіперплощин, що розділяють дані з двох класів

Кілька гіперплощин відділяють дані від двох класів

Отже, ми вибираємо гіперплощину, відстань від якої до найближчої точки даних з кожного боку є максимальною. Якщо така гіперплощина існує, її називають гіперплощина/жорстке поле максимального поля . Отже, з наведеного вище малюнка ми вибираємо L2. Розглянемо сценарій, як показано нижче

Вибір гіперплощини для даних із викидом

Вибір гіперплощини для даних із викидом

Тут ми маємо одну синю кулю на межі червоної кулі. Отже, як SVM класифікує дані? Це просто! Синя куля на межі червоних є викидом синіх куль. Алгоритм SVM має характеристики, щоб ігнорувати викид і знаходити найкращу гіперплощину, яка максимізує запас. SVM стійкий до викидів.

Гіперплан, який є найбільш оптимізованим

Гіперплан, який є найбільш оптимізованим

Отже, у цьому типі точок даних SVM знаходить максимальний запас, як це було зроблено з попередніми наборами даних, а також додає штраф щоразу, коли точка перетинає запас. Так називаються маржі в таких випадках м'які поля . Якщо для набору даних є м’який запас, SVM намагається мінімізувати його (1/маржа+∧(∑штраф)) . Втрата шарніра є поширеним штрафом. Якщо порушень немає, то немає втрат на шарнірі. Якщо є порушення, втрата на шарнірах пропорційна відстані порушення.

Досі ми говорили про лінійно розділені дані (групу синіх кульок і червоних кульок можна розділити прямою/лінійною лінією). Що робити, якщо дані не розділяються лінійно?

Оригінальний 1D набір даних для класифікації

Оригінальний 1D набір даних для класифікації

Скажімо, наші дані показані на малюнку вище. SVM вирішує це, створюючи нову змінну за допомогою a ядро . Назвемо точку xiна рядку, і ми створюємо нову змінну yiяк функція відстані від початку, тож якщо ми побудуємо це графік, ми отримаємо щось подібне до того, як показано нижче

Відображення 1D-даних у 2D, щоб мати змогу розділити два класи

Відображення 1D-даних у 2D, щоб мати змогу розділити два класи

У цьому випадку нова змінна y створюється як функція відстані від початку координат. Нелінійна функція, яка створює нову змінну, називається ядром.

Термінологія опорних векторних машин

    Гіперплощина: гіперплощина — це межа рішення, яка використовується для розділення точок даних різних класів у просторі ознак. У випадку лінійних класифікацій це буде лінійне рівняння, тобто wx+b = 0. Опорні вектори: опорні вектори є найближчими точками даних до гіперплощини, що відіграє вирішальну роль у визначенні гіперплощини та запасу. Відступ: відстань — це відстань між опорним вектором і гіперплощиною. Основна мета алгоритму опорних векторних машин – максимізувати маржу. Більш широке поле вказує на кращу продуктивність класифікації. Ядро: ядро ​​— це математична функція, яка використовується в SVM для відображення вихідних точок вхідних даних у простори ознак великої розмірності, щоб можна було легко знайти гіперплощину, навіть якщо точки даних не є лінійно роздільними у вихідному вхідному просторі. Деякі з поширених ядерних функцій — це лінійна, поліноміальна, радіальна базисна функція (RBF) і сигмоїда. Жорстке поле: гіперплощина максимального поля або гіперплощина жорсткого поля — це гіперплощина, яка належним чином розділяє точки даних різних категорій без будь-яких помилкових класифікацій. М’яке поле: якщо дані не можна повністю розділити або містять викиди, SVM дозволяє використовувати техніку м’якого поля. Кожна точка даних має слабку змінну, введену формулою SVM з м’якою маржею, яка пом’якшує суворі вимоги до маржі та допускає певні неправильні класифікації або порушення. Він знаходить компроміс між збільшенням маржі та зменшенням порушень. C: Максимізація маржі та штрафи за неправильну класифікацію врівноважуються параметром регулярізації C у SVM. Він визначає покарання за перевищення межі або неправильну класифікацію елементів даних. Накладається більш суворе покарання з більшим значенням C, що призводить до меншої маржі та, можливо, меншої кількості неправильних класифікацій. Втрата шарніра: типовою функцією втрат у SVM є втрата шарніра. Він карає за неправильну класифікацію або порушення маржі. Цільова функція в SVM часто формується шляхом поєднання її з членом регуляризації. Подвійна проблема: подвійна проблема оптимізаційної задачі, яка вимагає визначення множників Лагранжа, пов’язаних із опорними векторами, може бути використана для вирішення SVM. Подвійна формула дозволяє використовувати трюки ядра та більш ефективні обчислення.

Математична інтуїція машини опорних векторів

Розглянемо задачу двійкової класифікації з двома класами, позначеними як +1 і -1. У нас є навчальний набір даних, що складається з вхідних векторів ознак X і відповідних їм міток класу Y.

Рівняння для лінійної гіперплощини можна записати так:

w^Tx+ b = 0

Вектор W представляє вектор нормалі до гіперплощини. тобто напрямок, перпендикулярний до гіперплощини. Параметр b у рівнянні представляє зсув або відстань гіперплощини від початку уздовж вектора нормалі в .

щось швидке сортування

Відстань між точкою даних x_i та межею прийняття рішення можна обчислити як:

d_i = frac{w^T x_i + b}

де ||w|| являє собою евклідову норму вагового вектора w. Евклідова нормавектора нормалі W

Для лінійного класифікатора SVM:

Оптимізація:

    Для лінійного класифікатора SVM із жорстким полем:

underset{w,b}{	ext{minimize}}frac{1}{2}w^Tw =underset{W,b}{	ext{minimize}}frac{1}{2}left | w 
ight|^{2}  	ext{subject to}; y_i(w^Tx_i + b) geq 1 ;для; i = 1, 2,3, cdots,m

Цільова змінна або мітка для iтиснавчальний екземпляр позначається символом tiу цій заяві. І тi=-1 для негативних випадків (коли yi= 0) і ti=1позитивні випадки (коли уi= 1) відповідно. Оскільки нам потрібна межа рішення, яка задовольняє обмеження: underset{w,b}{	ext{minimize }}frac{1}{2}w^Tw+ C sum_{i=1}^m zeta_{i}  	ext{з урахуванням } y_i( w^Tx_i + b)ge 1-zeta_{i};; і ; zeta_{i} ge 0;; для ; i = 1, 2,3, cdots,m

    Для лінійного класифікатора SVM з м’яким полем:

underset{alpha}{	ext{maximize}}: frac{1}{2}underset{i	o m;}{sum};underset{j	o m}{sum} alpha_ialpha_j t_i t_j K(x_i, x_j) -underset{i	o m}{sum}alpha_i

    Подвійна проблема: подвійна проблема оптимізаційної задачі, яка вимагає визначення множників Лагранжа, пов’язаних із опорними векторами, може бути використана для вирішення SVM. Оптимальні множники Лагранжа α(i), які максимізують наступну подвійну цільову функцію

w= underset{i	o m}{sum}alpha_i t_i K(x_i, x) + b  t_i(w^Tx_i-b) = 1 Довга стрілка вліво b= w^Tx_i-t_i

де,

  • aiце множник Лагранжа, пов’язаний з i-ю навчальною вибіркою.
  • K(xi, хj) є функцією ядра, яка обчислює подібність між двома зразками xiі хj. Це дозволяє SVM вирішувати проблеми нелінійної класифікації шляхом неявного відображення зразків у просторі ознак більшої розмірності.
  • Термін ∑αiявляє собою суму всіх множників Лагранжа.

Границя рішення SVM може бути описана в термінах цих оптимальних множників Лагранжа та опорних векторів, коли подвійну проблему було вирішено та оптимальні множники Лагранжа виявлено. Навчальні вибірки, які мають i> 0, є опорними векторами, тоді як границя рішення забезпечується:

egin{aligned} 	ext{Лінійний : } K(w,b) &= w^Tx+b  	ext{Поліном : } K(w,x) &= (gamma w^Tx+b)^ N  	ext{Gaussian RBF: } K(w,x) &= exp(-gamma|| x_i-x_j||^n  	ext{Sigmoid :} K(x_i, x_j) &=  tanh(alpha x_i^Tx_j + b) end{вирівняно}

Типи опорних векторних машин

Виходячи з характеру межі прийняття рішень, опорні векторні машини (SVM) можна розділити на дві основні частини:

    Лінійний SVM: Лінійні SVM використовують лінійну межу прийняття рішень для розділення точок даних різних класів. Коли дані можуть бути точно розділені лінійно, лінійні SVM дуже підходять. Це означає, що одна пряма лінія (у 2D) або гіперплощина (у вищих вимірах) може повністю розділити точки даних на відповідні класи. Гіперплощина, яка максимізує відстань між класами, є межею прийняття рішення. Нелінійний SVM: нелінійний SVM можна використовувати для класифікації даних, якщо їх неможливо розділити на два класи прямою лінією (у випадку 2D). Використовуючи функції ядра, нелінійні SVM можуть обробляти нелінійно розділені дані. Вихідні вхідні дані перетворюються цими функціями ядра в простір ознак більшої розмірності, де точки даних можуть бути розділені лінійно. Лінійний SVM використовується для визначення межі нелінійного рішення в цьому модифікованому просторі.

Популярні функції ядра в SVM

Ядро SVM — це функція, яка бере вхідний простір низької розмірності та перетворює його на простір вищої розмірності, тобто перетворює нероздільні проблеми на роздільні. Це в основному корисно в задачах нелінійного розділення. Простіше кажучи, ядро ​​виконує деякі надзвичайно складні перетворення даних, а потім знаходить процес для розділення даних на основі визначених міток або виходів.

Класифікація раку молочної залози з ядром SVM RBF-Geeksforgeeks

Переваги SVM

  • Ефективний у великих габаритних випадках.
  • Його пам'ять ефективна, оскільки він використовує підмножину тренувальних точок у функції прийняття рішень, які називаються опорними векторами.
  • Для функцій прийняття рішень можна вказати різні функції ядра, а також можна вказати власні ядра.

Реалізація SVM на Python

Спрогнозуйте доброякісний або злоякісний рак. Використання історичних даних про пацієнтів, у яких діагностовано рак, дозволяє лікарям диференціювати злоякісні випадки, а доброякісні – отримувати незалежні ознаки.

Кроки

  • Завантажте набір даних про рак молочної залози з sklearn.datasets
  • Розділіть вхідні функції та цільові змінні.
  • Створіть і навчіть класифікатори SVM за допомогою ядра RBF.
  • Побудуйте діаграму розсіювання вхідних об’єктів.
  • Побудуйте межу рішення.
  • Побудуйте межу рішення

Python3

# Load the important packages> from> sklearn.datasets>import> load_breast_cancer> import> matplotlib.pyplot as plt> from> sklearn.inspection>import> DecisionBoundaryDisplay> from> sklearn.svm>import> SVC> # Load the datasets> cancer>=> load_breast_cancer()> X>=> cancer.data[:, :>2>]> y>=> cancer.target> #Build the model> svm>=> SVC(kernel>=>'rbf'>, gamma>=>0.5>, C>=>1.0>)> # Trained the model> svm.fit(X, y)> # Plot Decision Boundary> DecisionBoundaryDisplay.from_estimator(> >svm,> >X,> >response_method>=>'predict'>,> >cmap>=>plt.cm.Spectral,> >alpha>=>0.8>,> >xlabel>=>cancer.feature_names[>0>],> >ylabel>=>cancer.feature_names[>1>],> >)> # Scatter plot> plt.scatter(X[:,>0>], X[:,>1>],> >c>=>y,> >s>=>20>, edgecolors>=>'k'>)> plt.show()>
>
>

Вихід :

Класифікація раку молочної залози з ядром SVM RBF

файл розширення java