2$). Это не изменило ошибку на тестовом наборе.
Сейчас я
интересно: это ошибка , вызванная рубиновыми привязками для libsvm
, которые я использую
(rb-libsvm) или это теоретически объяснимо ?
Должен ли параметр $C$ всегда изменять производительность классификатора?
- машинное обучение
- svm
- libsvm
$\endgroup$
1
$\begingroup$
Параметр C сообщает оптимизации SVM, насколько вы хотите избежать неправильной классификации каждого обучающего примера. Для больших значений C оптимизация выберет гиперплоскость с меньшим запасом, если эта гиперплоскость лучше справляется с правильной классификацией всех обучающих точек. И наоборот, очень маленькое значение C заставит оптимизатор искать разделяющую гиперплоскость с большим запасом, даже если эта гиперплоскость неправильно классифицирует большее количество точек. Для очень маленьких значений C вы должны получить неправильно классифицированные примеры, часто даже если ваши обучающие данные линейно разделимы.
$\endgroup$
9
$\begingroup$
В SVM вы ищете две вещи: гиперплоскость с наибольшим минимальным запасом и гиперплоскость, которая правильно разделяет как можно больше экземпляров. Проблема в том, что вы не всегда сможете получить обе вещи. Параметр c определяет, насколько велико ваше стремление к последнему.
Я нарисовал небольшой пример ниже, чтобы проиллюстрировать это. Слева у вас есть низкий c, который дает вам довольно большую минимальную маржу (фиолетовый). Однако это требует, чтобы мы пренебрегали выбросом синего круга, который мы не смогли правильно классифицировать. Справа у вас высокий c. Теперь вы не будете пренебрегать выбросом и, таким образом, получите гораздо меньший запас.
Итак, какой из этих классификаторов лучше? Это зависит от того, как будут выглядеть будущие данные, которые вы будете предсказывать, и чаще всего вы, конечно, этого не знаете.
Если будущие данные выглядят так:
тогда классификатор, обученный с использованием большого значения c, лучше всего.
С другой стороны, если будущие данные выглядят так:
тогда классификатор, обученный с использованием низкого значения c, лучше всего.
В зависимости от вашего набора данных изменение c может привести или не привести к другой гиперплоскости. если это означает, что создает другую гиперплоскость, что не означает, что ваш классификатор будет выводить разные классы для конкретных данных, которые вы использовали для классификации. Weka — хороший инструмент для визуализации данных и экспериментов с различными настройками SVM. Это может помочь вам лучше понять, как выглядят ваши данные и почему изменение значения c не меняет ошибку классификации.
В целом, наличие небольшого количества обучающих экземпляров и большого количества атрибутов упрощает линейное разделение данных. Кроме того, тот факт, что вы оцениваете свои тренировочные данные, а не новые невидимые данные, облегчает разделение.
Из каких данных вы пытаетесь получить модель? Сколько данных? Можем ли мы это увидеть?
$\endgroup$
7
$\begingroup$
C по сути является параметром регуляризации, который контролирует компромисс между достижением низкой ошибки в обучающих данных и минимизацией нормы весов. Он аналогичен параметру гребня в гребневой регрессии (на практике между линейным SVM и гребневой регрессией разница в производительности или теории невелика, поэтому я обычно использую последнюю — или ядерную гребневую регрессию, если атрибутов больше, чем наблюдений).
Правильная настройка C является жизненно важным шагом в передовой практике использования SVM, поскольку минимизация структурного риска (ключевой принцип, лежащий в основе базового подхода) частично реализуется посредством настройки C. Параметр C устанавливает верхнюю границу нормы весов, а это означает, что существует вложенный набор классов гипотез, индексированных C. По мере увеличения C мы увеличиваем сложность класса гипотез (если мы немного увеличим C, мы все еще можем сформировать все линейные модели, которые мы могли раньше, а также некоторые, которые мы не могли, прежде чем мы увеличили верхнюю границу допустимой нормы весов). Таким образом, помимо реализации SRM с помощью классификации максимальной маржи, она также реализуется путем ограничения сложности класса гипотезы посредством управления C.
К сожалению, теория определения того, как установить C, в настоящее время не очень хорошо разработана, поэтому большинство людей склонны использовать перекрестную проверку (если они что-то делают).
$\endgroup$
5
$\begingroup$
C — это параметр регуляризации, который управляет компромиссом между достижением низкой ошибки обучения и низкой ошибкой тестирования, то есть способностью обобщать ваш классификатор для невидимых данных. 92+С∑ξ. Если ваш C слишком велик, алгоритм оптимизации попытается уменьшить |w| насколько это возможно, приводит к гиперплоскости, которая пытается правильно классифицировать каждый обучающий пример. Это приведет к потере свойств обобщения классификатора. С другой стороны, если ваш C слишком мал, вы даете своей целевой функции некоторую свободу увеличивать |w| много, что приведет к большой ошибке обучения.
Рисунки ниже могут помочь вам визуализировать это.
$\endgroup$
10
$\begingroup$
Ответы выше превосходны. Внимательно прочитав ваши вопросы, я обнаружил, что есть два важных факта, которые мы могли упустить из виду.
- Вы используете линейное ядро
- Ваши обучающие данные линейно разделимы, так как «нет ошибки
на тренировочном наборе».
Учитывая 2 факта, если значения C изменяются в разумных пределах, оптимальная гиперплоскость будет просто случайным образом смещаться на небольшую величину в пределах поля (промежутка, образованного опорными векторами).
Интуитивно предположим, что поле для обучающих данных небольшое и/или в пределах поля также нет точек тестовых данных, смещение оптимальной гиперплоскости в пределах поля не повлияет на ошибку классификации тестового набора.
Тем не менее, если вы установите C=0, то SVM проигнорирует ошибки и просто попытается минимизировать сумму квадратов весов (w), возможно, вы получите другие результаты на тестовом наборе.
$\endgroup$
$\begingroup$
Большинство приведенных выше ответов довольно хороши, но позвольте мне кое-что пояснить для таких, как я.
которому пришлось потратить 3 дня на понимание роли параметра C в SVM из-за разных источников.
В книге ISLR (http://faculty.marshall.usc.edu/gareth-james/ISL/) большее значение C означает, что допустима большая неправильная классификация, что делает поля шире, а меньшее значение C означает, что допускается меньшее количество ошибок в классификации, что приводит к меньшему размеру поля. В то время как любой другой ресурс, который я читал, и документация по python, как раз наоборот.
На самом деле ISLR C определяется как верхняя граница суммы всех резервных переменных.
Но в питоне и другом источнике (https://shuzhanfan.github.io/2018/05/understanding-mathematics-behind-support-vector-machines/#:~:text=In%20terms%20of%20the%20SVM ,%2Bb)%E2%88%921%5D.) C — это ограничения на резервные переменные. Если мы установим C на положительную бесконечность, мы получим тот же результат, что и SVM с жесткими маржами. Наоборот, если мы установим C равным 0, ограничений больше не будет, и мы получим гиперплоскость, ничего не классифицирующую. Эмпирические правила таковы: малые значения C приведут к более широкому диапазону за счет некоторых неверных классификаций; большие значения C дадут вам классификатор Hard Margin и допустят нарушение нулевого ограничения
$\endgroup$
2
$\begingroup$
C Параметр используется для управления выбросами — низкий C означает, что мы допускаем больше выбросов, высокий C означает, что мы допускаем меньше выбросов.
$\endgroup$
$\begingroup$
Высокая C (стоимость) означает увеличение стоимости неправильной классификации. Это означает, что гибкое ядро станет более волнистым, чтобы избежать неправильной классификации наблюдений в обучающем наборе.
Если ядро волнистое , модель не будет хорошо обобщать при прогнозировании новых данных.
Если ядро равно прямым , модель не будет хорошо обобщать при прогнозировании новых данных.
$\endgroup$
Содержание
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
Классификация
.
Что такое точная настройка параметров в SVM?
спросил
Изменено
8 лет, 5 месяцев назад
Просмотрено
1к раз
$\begingroup$
Я получил это предложение в одной из статей, но я не понимаю, что оно означает??
«Обучение классификатора на основе обучения, такого как SVM, на несбалансированном наборе данных часто требует точной настройки параметров, что делает систему менее общей»
$\endgroup$
1
$\begingroup$
Несбалансированный набор данных означает, что положительных примеров гораздо больше, чем отрицательных, или наоборот. Если вы обучаете SVM с мягким запасом для такого набора данных, результирующая гиперплоскость будет в равной степени наказывать как отрицательные, так и положительные примеры. Поскольку в одной группе примеров гораздо больше, гиперплоскость будет лежать ближе к группе с меньшими примерами. При выводе метки класса для новой точки данных она будет чаще классифицироваться с меткой группы большинства из-за того, как она была обучена (гиперплоскость находится дальше от группы примеров большинства). На практике часто бывает так, что отрицательных примеров гораздо больше, чем положительных. Общий SVM почти всегда будет предсказывать точку данных тестирования как отрицательную. Один из способов справиться с этим — иметь два разных параметра $C_1,C_2$, один для положительных и один для отрицательных примеров. Чтобы сбалансировать положительный или отрицательный результат, мы будем наказывать менее частые примеры выше. Пусть $C$ — исходный параметр, тогда положим
$$C_1=\frac{\# \text{количество положительных примеров}}{\text{всего # примеров}}C$$
$$C_2=\frac{\# \text{количество отрицательных примеров}}{\text{всего # примеров}}C$$
Существуют и другие способы решения этой проблемы.