Я ожидаю, что SVM с мягким полем будет лучше, даже если обучающий набор данных линейно разделим. Причина в том, что в SVM с жестким полем один выброс может определить границу, что делает классификатор чрезмерно чувствительным к шуму в данных.
На диаграмме ниже один красный выброс по существу определяет границу, которая является отличительной чертой переоснащения
Чтобы понять, что делает SVM с мягким полем, лучше взглянуть на него в двойной формулировке, где вы можете видеть, что у него та же цель максимизации маржи (маржа может быть отрицательной), что и у жесткого margin SVM, но с дополнительным ограничением на то, что каждый множитель Лагранжа, связанный с опорным вектором, ограничен C. По существу, это ограничивает влияние любой отдельной точки на границе решения, для вывода см. Предложение 6.12 в "Введение Кристианини / Шоу-Тейлора". для поддержки векторных машин и других методов обучения, основанных на ядре ".
В результате SVM с мягким полем может выбрать границу решения, которая имеет ненулевую обучающую ошибку, даже если набор данных линейно разделим и с меньшей вероятностью будет соответствовать.
Вот пример использования libSVM для искусственной проблемы. Обведенные кружками точки показывают векторы поддержки. Вы можете видеть, что уменьшение C приводит к тому, что классификатор жертвует линейной отделимостью, чтобы добиться стабильности, в том смысле, что влияние любого отдельного элемента данных теперь ограничено C.
Значение векторов поддержки:
Для SVM с жестким полем опорные векторы - это точки, которые «на полях». На картинке выше, C = 1000 довольно близко к SVM с жестким полем, и вы можете видеть, что точки, обозначенные кружком, будут касаться поля (на этом рисунке поле почти равно 0, так что оно по сути совпадает с разделяющей гиперплоскостью )
Для SVM с мягким полем легче объяснить их в терминах двойных переменных. Ваш предиктор опорных векторов в терминах двойных переменных является следующей функцией.
Здесь alphas и b - это параметры, которые можно найти во время процедуры обучения, xi, yi - это ваш тренировочный набор, а x - это новая точка данных. Вспомогательные векторы - это точки данных из обучающего набора, которые включены в предиктор, т. Е. С ненулевым альфа-параметром.