Какое влияние оказывает C на SVM с линейным ядром?


134

В настоящее время я использую SVM с линейным ядром для классификации моих данных. На тренировочном наборе ошибок нет. Я перепробовал несколько значений параметра ( 10 - 5 , , 10 2 ). Это не изменило ошибку на тестовом наборе.C105,,102

Теперь я задаюсь вопросом: это ошибка, вызванная привязками ruby, поскольку 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. Если ничто из вышеперечисленного не поможет, я предполагаю, что проблема в привязках рубина
Марк Шиверс

3
изменение сбалансированной точности с 0,5 (только предположения) до 0,86 не кажется мне незначительным влиянием. Было бы неплохо исследовать более точную сетку значений для C, как предполагает Марк, но результаты, которые вы дали, кажутся вполне нормальным поведением. Можно было бы ожидать, что ошибка снова увеличится, поскольку C стремится к бесконечности из-за чрезмерной подгонки, но в этом случае это не кажется большой проблемой. Обратите внимание, что если вы действительно заинтересованы в сбалансированной ошибке, а в вашем тренировочном наборе нет разделения 50:50, то вы сможете добиться лучших результатов ...
Дикран Marsupial

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

2
Я думаю, что возможно, что как только вы дойдете до C = 10 ^ 0, SVM уже правильно классифицирует все тренировочные данные, и ни один из векторов поддержки не будет связан (альфа равна C), в этом случае увеличение C приведет к не влияет на решение.
Дикран Сумчатый

152

В SVM вы ищете две вещи: гиперплоскость с наибольшим минимальным полем и гиперплоскость, которая правильно разделяет как можно больше экземпляров. Проблема в том, что вы не всегда сможете получить обе вещи. Параметр c определяет, насколько велико ваше желание для последнего. Я нарисовал небольшой пример ниже, чтобы проиллюстрировать это. Слева у вас низкий c, который дает вам довольно большой минимальный запас (фиолетовый). Однако это требует, чтобы мы пренебрегали синим кругом, который мы не смогли классифицировать правильно. Справа у вас высокий c. Теперь вы не будете пренебрегать выбросом и, следовательно, будете иметь гораздо меньший запас.

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

Итак, какие из этих классификаторов являются лучшими? Это зависит от того, как будут выглядеть прогнозируемые вами будущие данные, и чаще всего вы, конечно, этого не знаете. Если будущие данные выглядят так:

большой с лучше тогда лучше всего использовать классификатор с большим значением c.

С другой стороны, если будущие данные выглядят так:

низкий с лучше тогда классификатор, изученный с использованием низкого значения c, является лучшим.

В зависимости от вашего набора данных изменение c может привести к появлению другой гиперплоскости, а может и нет. Если он действительно производит другую гиперплоскость, это не означает , что ваш классификатор будет выводить различные классы для конкретной информации вы использовали его для классификации. Weka - это хороший инструмент для визуализации данных и работы с различными настройками SVM. Это может помочь вам лучше понять, как выглядят ваши данные и почему изменение значения c не меняет ошибки классификации. В общем, наличие нескольких обучающих экземпляров и множества атрибутов облегчает линейное разделение данных. Кроме того, тот факт, что вы оцениваете свои тренировочные данные, а не новые невидимые данные, облегчает разделение.

Какие данные вы пытаетесь узнать модель? Сколько данных? Можем ли мы увидеть это?


4
Я не трогал данные уже более 3 лет. Он очень объемный и шумный, и мне запрещено публиковать его. На вопрос уже дан ответ, но я думаю, что ваша визуализация очень хорошая и интуитивно понятная.
Альфа

классно. у вас есть такие объяснения для значения гамы тоже?
MonsterMMORPG

2
Гамма-параметр используется для функции ядра Гаусса. Функции ядра можно рассматривать как эффективный способ преобразования ваших исходных объектов в другое пространство, где разделяющая гиперплоскость в новом пространстве объектов не обязательно должна быть линейной в исходном пространстве объектов. Например, двумерное положение точки данных в исходном пространстве объектов может использоваться для вычисления нового объекта, представляющего расстояние до некоторого маркера на карте. С помощью этой новой функции можно создать нелинейный классификатор (в исходном пространстве), граница решения которого образует круг вокруг маркера
Кент Мунте Касперсен,

@KentMuntheCaspersen не является ли ваше объяснение C неверным? Это противоположно тому, что говорится в книге «Введение в статистическое обучение».
diugalde

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

26

C по существу является параметром регуляризации, который контролирует компромисс между достижением низкой ошибки в обучающих данных и минимизацией нормы весов. Он аналогичен параметру гребня в регрессии гребня (фактически на практике существует небольшая разница в производительности или теории между линейными SVM и регрессией гребня, поэтому я обычно использую последний или регрессию гребня ядра, если имеется больше атрибутов, чем наблюдений).

Правильная настройка C является жизненно важным шагом в передовой практике использования SVM, так как минимизация структурного риска (ключевой принцип базового подхода) выполняется стороной через настройку C. Параметр C устанавливает верхнюю границу нормы веса, что означает, что существует вложенный набор классов гипотез, индексируемых C. Когда мы увеличиваем C, мы увеличиваем сложность класса гипотез (если мы немного увеличим C, мы все еще можем сформировать все линейные модели, которые мы могли до этого а также некоторые, которые мы не могли сделать, прежде чем увеличили верхнюю границу допустимой нормы весов). Таким образом, помимо реализации SRM с помощью классификации максимального запаса, она также реализуется путем ограничения сложности класса гипотез с помощью контроля C.

К сожалению, теория определения того, как установить C, не очень хорошо развита в настоящее время, поэтому большинство людей склонны использовать перекрестную проверку (если они что-то делают).


Хорошо, я думаю, что теперь понимаю значение C. :)
Альфа

2
Но если C является параметром регуляризации, почему высокий уровень C увеличивает переоснащение, когда, вообще говоря, регуляризация выполняется для уменьшения переоснащения, т. Е. Путем создания более общей модели?
user1603472

2
C является параметром регуляризации, но он по существу связан с термином несоответствия данных (суммой переменных ослабления), а не с термином регуляризации (бит поля), поэтому большее значение C означает меньшую регуляризацию, чем большую. В качестве альтернативы вы можете просмотреть обычное представление параметра rgularisation как 1 / C.
Дикран Marsupial

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) С другой стороны, если C слишком мало (график 2), то ваш классификатор будет недостаточно. На графике 2 показан классификатор с недостаточной подгонкой. Он не разделяет точки на их соответствующие классы. Надеюсь это поможет.
Дериси

Это означает, что ваши оси 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.