Яке співвідношення між кількістю векторів підтримки та даними навчальної діяльності та результатами класифікаторів? [зачинено]


77

Я використовую LibSVM для класифікації деяких документів. Документи, здається, трохи важко класифікувати, як показують кінцеві результати. Однак я щось помітив під час навчання своїх моделей. і це: якщо моїм навчальним набором є, наприклад, 1000, то близько 800 з них вибрані як вектори підтримки. Я всюди шукав, чи добре це чи погано. Я маю на увазі, чи існує зв’язок між кількістю векторів підтримки та продуктивністю класифікаторів? Я прочитав це попереднє повідомлення, але виконую вибір параметрів, а також впевнений, що всі атрибути у векторах функцій упорядковані. Мені просто потрібно знати відношення. Дякую. ps: Я використовую лінійне ядро.


Fwiw, RBF-SVM на 50000 цифр MNIST (784d) дає 14398 векторів підтримки, 29%.
denis

Відповіді:


162

Підтримка векторних машин - це проблема оптимізації. Вони намагаються знайти гіперплан, який розділяє два класи з найбільшим запасом. Вектори підтримки - це точки, які потрапляють у цей відступ. Найпростіше зрозуміти, якщо ви будуєте його від простого до більш складного.

Лінійний SVM із жорстким полем

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

Hard-Margin SVM

Всі вектори підтримки лежать точно на краю. Незалежно від кількості розмірів або розміру набору даних, кількість векторів підтримки може бути лише 2.

Soft-Margin Linear SVM

Але що, якщо наш набір даних не можна лінійно розділяти? Ми вводимо SVM з м'якою маржею Ми більше не вимагаємо, щоб наші точки даних знаходились за межами поля, ми дозволяємо деякій кількості з них збиватися через лінію в поле. Ми використовуємо параметр провину C, щоб керувати цим. (nu в nu-SVM) Це дає нам ширший запас і більшу помилку в навчальному наборі даних, але покращує узагальнення та / або дозволяє знайти лінійний поділ даних, який не можна лінійно розділяти.

М'який лінійний SVM

Тепер кількість векторів підтримки залежить від того, скільки ми дозволяємо слабкості та розподілу даних. Якщо ми допустимо велику кількість слабини, ми матимемо велику кількість опорних векторів. Якщо ми дозволимо дуже мало слабкості, у нас буде дуже мало векторів підтримки. Точність залежить від пошуку правильного рівня слабкості для даних, що аналізуються. За деякими даними неможливо отримати високий рівень точності, ми просто повинні знайти найкраще, що ми можемо.

Нелінійний SVM

Це підводить нас до нелінійного SVM. Ми все ще намагаємось лінійно розділити дані, але зараз намагаємось зробити це у просторі вищих розмірів. Це робиться за допомогою функції ядра, яка, звичайно, має власний набір параметрів. Коли ми переводимо це назад у вихідний простір об’єктів, результат нелінійний:

введіть тут опис зображення

Тепер кількість векторів підтримки все ще залежить від того, скільки ми дозволяємо слабкості, але це також залежить від складності нашої моделі. Кожен поворот у фінальній моделі у нашому вхідному просторі вимагає визначення одного або декількох векторів підтримки. Зрештою, вихід SVM - це опорні вектори та альфа, що, по суті, визначає, наскільки великий вплив цей конкретний вектор підтримки має на остаточне рішення.

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

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

Хороший ресурс: Підручник з машин векторної підтримки для розпізнавання зразків


чудова відповідь! але посилання вже не працює ... чи можете ви оновити його?
Маттео


"Кількість векторів підтримки може коливатися від дуже небагатьох до кожної окремої точки даних, якщо ви повністю переставите свої дані." Підводячи підсумок, велика кількість векторів підтримки - це не добре. Тож питання полягає в тому, чи є 800 SV з 1000 навчальних зразків «великими»?
Kanmani

Дякую! ... За посиланнями та посиланнями я знайшов це приємне пояснення! :)
leandr0garcia

29

800 з 1000 в основному говорить вам, що SVM повинен використовувати майже кожен окремий навчальний зразок для кодування навчального набору. Це в основному говорить вам про те, що у ваших даних немає великої регулярності.

Здається, у вас є основні проблеми з недостатньою кількістю навчальних даних. Також, можливо, подумайте про деякі специфічні особливості, які краще відокремлюють ці дані.


9
Я вибрав це як відповідь. Довгі відповіді просто несуттєві пояснення C&P SVM
Валентин Хайніц,

7
Я згоден. Хоча інші відповіді намагалися дати хороший підсумок, це є найбільш доречним для роботи. Якщо частина SV велика, це означає запам'ятовування, а не вивчення, а це означає погане узагальнення => помилка з вибірки (помилка тестового набору) бути великим.
Кай

12

Як кількість вибірок, так і кількість атрибутів можуть впливати на кількість опорних векторів, роблячи модель більш складною. Я вважаю, що ви використовуєте слова або навіть ngrams як атрибути, тому їх досить багато, а моделі природної мови самі по собі дуже складні. Отже, 800 векторів підтримки з 1000 зразків здаються нормальними. (Також зверніть увагу на коментарі @ karenu щодо параметрів C / nu, які також мають великий вплив на кількість SV).

Щоб отримати інтуїцію щодо цього, згадайте основну ідею SVM. SVM працює в багатовимірному просторі об'єктів і намагається знайти гіперплощину, яка розділяє всі задані зразки. Якщо у вас багато зразків і лише 2 функції (2 виміри), дані та гіперплан можуть виглядати так:

введіть тут опис зображення

Тут є лише 3 вектори підтримки, всі інші стоять за ними, і тому не грають жодної ролі. Зверніть увагу, що ці опорні вектори визначаються лише двома координатами.

А тепер уявіть, що у вас є тривимірний простір і, отже, опорні вектори визначаються 3 координатами.

введіть тут опис зображення

Це означає, що є ще один параметр (координата), який потрібно відрегулювати, і для цього коригування може знадобитися більше зразків для пошуку оптимальної гіперплощини. Іншими словами, у гіршому випадку SVM знаходить лише 1 координату гіперплощини на зразок.

Коли дані добре структуровані (тобто досить добре тримають шаблони), може знадобитися лише кілька векторів підтримки - всі інші залишаться за ними. Але текст - це дуже, дуже погано структуровані дані. SVM робить все можливе, намагаючись якнайкраще підібрати зразок, і таким чином бере як вектори підтримки навіть більше зразків, ніж крапель. Зі збільшенням кількості зразків ця "аномалія" зменшується (з'являються більш незначні зразки), але абсолютна кількість опорних векторів залишається дуже високою.


Дякую за відповідь! чи є у вас посилання на те, що ви згадали в останньому абзаці? "Коли дані добре структуровані (тобто досить добре утримують шаблони), може знадобитися лише кілька векторів підтримки - всі інші залишаться за ними. Але текст дуже, дуже погано структуровані дані. SVM робить все можливе, намагаючись відповідати вибірці якнайкраще, і таким чином бере в якості опорних векторів навіть більше зразків, ніж крапель ". thx
Хоссейн

Це неправильно - ви можете мати тривимірний набір даних лише з 2 векторами підтримки, якщо набір даних лінійно відокремлюваний і має правильний розподіл. Ви також можете мати такий самий набір даних і в кінцевому підсумку отримати 80% векторів підтримки. Все залежить від того, як ви встановили C. Насправді, в nu-svm ви можете контролювати кількість векторів підтримки, встановивши nu дуже низьким (.1)
karenu

@karenu: Я не говорив, що зростання кількості атрибутів завжди призводить до зростання кількості опорних векторів, я просто сказав, що навіть при фіксованих параметрах C / nu кількість опорних векторів залежить від кількості розмірів ознаки та кількості вибірок . А для текстових даних, які дуже погано структуровані за своєю природою, кількість векторів підтримки всередині поля (жорсткий марж SVM не застосовується для класифікації тексту навіть з ядрами вищого порядку) буде завжди високою.
приятель

@Hossein: Я маю на увазі лінійну відокремлюваність. Уявіть собі завдання класифікації спаму. Якщо ваші спам-повідомлення майже завжди містять такі слова, як "Віагра", "купити", "гроші", а ваші шинки містять лише "дім", "привіт", "привіт", то ваші дані добре структуровані і їх можна легко розділити на ці вектори слів. Однак на практиці у вас є поєднання добрих і поганих слів, і, отже, ваші дані не мають явних закономірностей. Якщо у вас є 3 слова зі спаму та 3 із шинки, як класифікувати повідомлення? Вам потрібно більше функцій, і це одна з причин, чому SVM використовує більше векторів підтримки.
ffriend

@ffriend Я вважаю це оманливим. Якщо сказати, що це залежить від мене, здається, що якщо ваш набір даних збільшить, ваш номер sv збільшиться, що якимось чином існує взаємозв'язок між # зразками (або # розмірами) та # векторами підтримки. Існує взаємозв'язок між складністю моделі та SV, і більші набори даних з вищими розмірами мають тенденцію мати більш складні моделі, але розмір набору даних або розмірність не визначають безпосередньо номер SV.
karenu

7

Класифікація SVM є лінійною за кількістю опорних векторів (SVs). Кількість СВ у найгіршому випадку дорівнює кількості навчальних зразків, тому 800/1000 - це ще не найгірший випадок, але все ще досить поганий.

Знову ж таки, 1000 навчальних документів - це невеликий навчальний набір. Ви повинні перевірити, що відбувається, коли масштабуєте до 10000 і більше документів. Якщо ситуація не покращиться, подумайте про використання лінійних SVM, навчених LibLinear , для класифікації документів; вони масштабуються набагато краще (розмір моделі та час класифікації лінійні за кількістю ознак та не залежать від кількості навчальних зразків).


Просто цікаво, що змушує вас припустити, що OP вже не використовує лінійний SVM? Напевно, я пропустив це, якщо використовував якесь нелінійне ядро.
Кріс А.

1
@ChrisA .: так, я кажу лише про швидкість. Точність повинна бути приблизно однаковою, коли використовуються однакові налаштування (хоча і LibSVM, і LibLinear використовують деяку рандомізацію, тому навіть не гарантовано однаковість у декількох прогонах одного і того ж алгоритму навчання).
Fred Foo

1
Зачекайте, чи робить ця рандомізація шлях до остаточного класифікатора? Я не розглядав код жодної бібліотеки, але це порушує все моє розуміння того, що це опукла проблема оптимізації з унікальним мінімумом.
Кріс А.

1
Ця рандомізація проводиться лише на етапі навчання як прискорення. Проблема оптимізації справді опукла.
Fred Foo

1
Випадковість просто допомагає їй швидше наблизитися до оптимального рішення.
karenu

-1

Між джерелами існує певна плутанина. Наприклад, у підручнику ISLR 6-е видання C описується як "бюджет порушення меж", звідки випливає, що вищий C дозволить більше порушень меж та більше векторів підтримки. Але у реалізаціях svm в R та python параметр C реалізований як "покарання за порушення", що є протилежним, і тоді ви помітите, що для вищих значень C менше векторів підтримки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.