Який вплив С у SVM з лінійним ядром?


134

Зараз я використовую SVM з лінійним ядром для класифікації моїх даних. На навчальному наборі помилок немає. Я спробував кілька значень параметра ( 10 - 5 , , 10 2 ). Це не змінило помилки на тестовому наборі.C105,,102

Тепер мені цікаво: чи це помилка, спричинена рубіновими прив’язками для libsvmмене, що я використовую ( rb-libsvm ), чи це теоретично можна пояснити ?

Чи повинен параметр завжди змінювати продуктивність класифікатора?C


|w|2+Cξi,

Відповіді:


136

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


1
Гаразд, я розумію, що C визначає вплив неправильної класифікації на цільову функцію. Цільова функція - це сума терміну регуляризації та швидкості неправильної класифікації (див. En.wikipedia.org/wiki/Support_vector_machine#Soft_margin ). Коли я змінюю C, це не впливає на мінімум моєї об'єктивної функції. Чи може це означати, що термін регуляризації завжди дуже малий?
альфа

3
Я б запропонував спробувати більш широкий діапазон значень C, можливо, 10 ^ [- 5, ..., 5] або більше, якщо оптимізація буде швидкою у вашому наборі даних, щоб побачити, чи ви отримаєте щось, що виглядає більш розумним. Як зміна C, так і помилка навчання повинні змінюватися як значення C. Також, чи є масштаб ваших даних крайнім? Загалом, оптимальний параметр C повинен бути більшим, коли ви зменшуєте масштаб даних, і навпаки, тому якщо у вас є дуже малі значення для функцій, обов'язково включіть дуже великі значення для можливих значень C. Якщо жодне з вищезазначеного не допомагає, я думаю, проблема полягає в рубіновій обв'язці
Марк Шиверс

3
зміна врівноваженої точності з 0,5 (лише здогадка) на 0,86 не здається для мене граничним впливом. Було б хорошою ідеєю дослідити більш точну сітку значень для C, як пропонує Марк, але результати, які ви дали, здаються, досить нормальною поведінкою. Можна очікувати, що помилка знову повернеться назад, оскільки С схильний до нескінченності через надмірне розміщення, але це не здається великою проблемою в цьому випадку. Зауважте, що якщо вас дійсно цікавить збалансована помилка, і ваш навчальний набір не має розбіжностей 50:50, то, можливо, ви зможете отримати кращі результати ...
Dikran Marsupial

2
... за допомогою різних значень C для шаблонів, що належать до позитивних та негативних класів (що асимптотично еквівалентно переустановці даних для зміни пропорцій шаблонів, що належать до кожного класу).
Дікран Марсупіал

2
Я думаю, що цілком можливо, що як тільки ви досягнете C = 10 ^ 0, SVM вже правильно класифікує всі навчальні дані, і жоден з векторів підтримки не пов'язаний (альфа дорівнює C). не впливає на розчин.
Дікран Марсупіал

152

У SVM ви шукаєте дві речі: гіперплан з найбільшим мінімальним запасом і гіперплан, який правильно розділяє якомога більше екземплярів. Проблема в тому, що ви не завжди зможете отримати обидві речі. Параметр c визначає, наскільки велике ваше бажання для останнього. Нижче я намалював невеликий приклад, щоб проілюструвати це. Зліва у вас низький c, що дає вам досить великий мінімальний запас (фіолетовий). Однак це вимагає, щоб ми нехтували синім колом, що не вдалося віднести до правильного. Праворуч у вас високий c. Тепер ви не нехтуватимете зовнішнім виглядом і, таким чином, отримаєте набагато менший запас.

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

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

великий c найкраще тоді класифікатор, засвоєний за допомогою великого значення c, найкращий.

З іншого боку, якщо майбутні дані виглядатимуть так:

найкраще низький c то класифікатор, засвоєний за допомогою низького значення c, найкращий.

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

З яких даних ви намагаєтеся дізнатися модель? Скільки даних? Чи можемо ми це побачити?


4
Я не торкався даних уже більше 3 років. Це дуже об'ємно і шумно, і мені не дозволяється публікувати його. На питання вже відповіли, але я думаю, що ваша візуалізація дуже гарна та інтуїтивна.
альфа

приголомшливий у вас є такі пояснення щодо цінності гами?
MonsterMMORPG

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

@KentMuntheCaspersen - це ваше пояснення C невірно? Це протилежне тому, що сказано у книзі "Вступ до статистичного навчання".
діугальде

2
@diugalde Ви можете цитувати з книги, що саме відрізняється від мого пояснення? Я завжди вважаю c ціною помилкової класифікації (легко запам'ятовується c в класифікації). Таким чином, вище c означає високу вартість помилкової класифікації, що призводить до того, що алгоритм намагається ідеально розділити всі точки даних. Це не завжди можливо для людей, які переживають люди, або не завжди призводять до хорошого загального результату, що є вагомою причиною зниження / введення c.
Кент Мунт Касперсен

26

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

Правильна настройка C - це життєво важливий крок найкращої практики використання SVM, оскільки структурна мінімізація ризиків (ключовий принцип базового підходу) реалізується за допомогою налаштування C. Параметр C встановлює верхню межу норми ваги, це означає, що існує вкладений набір класів гіпотез, індексованих С. ​​У міру збільшення C ми збільшуємо складність класу гіпотез (якщо трохи збільшити C, ми все ще можемо сформувати всі лінійні моделі, які ми могли раніше а також те, що ми не могли раніше, ніж збільшили верхню межу допустимої норми ваг). Так само як і реалізація СРМ за допомогою максимальної маржинальної класифікації, вона також реалізується обмеженням складності класу гіпотез через керування С.

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


Гаразд, я думаю, я зараз розумію значення С. :)
альфа

2
Але якщо C - параметр регуляризації, чому високий C збільшує перевитрату, коли, як правило, регуляризація робиться для пом'якшення перевиконання, тобто шляхом створення більш загальної моделі?
користувач1603472

2
C - параметр регуляризації, але він, по суті, приєднується до терміну невідповідності даних (сума слабких змінних), а не терміну регуляризації (біт поля), тому велике значення C означає менше регуляризацію, а не більше. Крім того, ви можете переглядати звичайне подання параметра rgularisation як 1 / C.
Дікран Марсупіал

8

C - параметр регуляризації, який контролює компроміс між досягненням низької помилки тренувань та низькою помилкою тестування, що є можливістю узагальнити класифікатор для невидимих ​​даних.

Розглянемо цільову функцію лінійного SVM: min | w | ^ 2 + C∑ξ. Якщо ваш C занадто великий, алгоритм оптимізації спробує зменшити | w | якомога більше веде до гіперплану, який намагається правильно класифікувати кожен тренувальний приклад. Це призведе до втрати узагальнюючих властивостей класифікатора. З іншого боку, якщо ваш C занадто малий, то ви надаєте вашій цільовій функції певну свободу для збільшення | w | багато, що призведе до великої помилки тренувань.

Зображення нижче можуть допомогти вам уявити це. Лінійний класифікатор SVM з C = 10000000Лінійний класифікатор SVM з C = 0,001


Я не дуже розумію ваші сюжети. Чи можете ви це пояснити?
альфа

1
@alfa: Мій намір показувати сюжети був: 1) Якщо C занадто великий (сюжет 1), то ваш класифікатор буде надто придатним, тобто він спробує точно класифікувати кожну точку даних про навчання. На графіку 1 показано, що майже всі навчальні бали класифіковані правильно. 2) З іншого боку, якщо С занадто менше (сюжет 2), то ваш класифікатор буде відповідати. На графіку 2 показано класифікатор, що відповідає розміру. Це не розділяє бали у відповідних класах. Сподіваюсь, це допомагає.
deerishi

Це означає, що ваші осі x і y демонструють дві різні особливості. Мітки "довжина набору даних" та "Сума засобів" трохи заплутані?
альфа

Було б цікаво подивитися, як правильний вибір C допомагає в обох випадках.
альфа

2
Я думаю, що очевидно, що C = 10000000 - це поганий вибір, і я думаю, що набір даних не є правильним для того, щоб продемонструвати це. Можливо, набір даних із лише кількома сторонніми людьми з неправильної сторони роздільної гіперплани буде кращим?
альфа

4

Відповіді вище є чудовими. Уважно прочитавши ваші запитання, я виявив, що є два важливих факти, які ми можемо не помітити.

  1. Ви використовуєте лінійне ядро
  2. Ваші тренувальні дані лінійно відокремлюються, оскільки "Помилки на навчальному наборі немає".

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

Інтуїтивно кажучи, припустимо, що маржа на навчальних даних невелика, і / або немає тестових точок даних в межах запасу, зміщення оптимальної гіперплощини в межах поля не вплине на помилку класифікації тестового набору.

Тим не менш, якщо ви встановите C = 0, SVM буде ігнорувати помилки і просто намагатиметься мінімізувати суму квадратів ваг (w), можливо, ви можете отримати різні результати на тестовому наборі.


2

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


1

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

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

Якщо ядро ​​буде прямим, модель не буде добре узагальнюватись при прогнозуванні нових даних.

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