Выбор параметров SVM

9

Есть ли лучшие альтернативные методы для выбора C и Gamma, которые дают лучшие результаты тренировки?

Джон
источник

Ответы:

5

Поиск по сетке идет медленно, так как он тратит много времени на изучение настроек гиперпараметров, которые далеко не оптимальны. Лучшим решением является симплексный алгоритм Нелдера-Мида , который не требует вычисления информации о градиенте и прост в реализации (должно быть достаточно информации на странице Википедии). В наборе инструментов Weka также может присутствовать некоторый код Java , однако я работаю в MATLAB и не рассматривал Weka в деталях.

SMO - это алгоритм поиска параметров модели, а не гиперпараметров.

Дикран Сумчатый
источник
Не могли бы вы предоставить свою реализацию Matlab?
Зак
1
Здесь есть один theoval.cmp.uea.ac.uk/matlab/#optim, но если у вас уже есть набор инструментов оптимизации, то fminsearch также является реализацией метода Nelder-Mead IIRC.
Дикран Marsupial
5

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

Если вы интересуетесь оптимизацией C и гаммы на основе градиента, есть такие методы, как оптимизация границ допустимого радиуса или оптимизация частоты ошибок в проверочном наборе. Вычисление градиента целевой функции включает в себя что-то вроде одного поезда SVM, но простое снижение градиента может включать в себя всего несколько десятков итераций. (Посмотрите на http://olivier.chapelle.cc/ams/ статью и реализацию Matlab.)

Innuo
источник
По моему опыту, nelder-mead обычно быстрее, чем поиск по сетке, а спуск по градиенту происходит лишь немного быстрее, потому что он требует меньше итераций, а стоимость вычисления градиента высока. Так что если у вас есть реализация, которая обеспечивает градиентный спуск, используйте ее, но Nelder-Mead, вероятно, не сильно отстает. Конечно, как только у вас есть более двух гиперпараметров для настройки поиска по сетке, это становится самым медленным методом. Было бы интересно увидеть исследование сравнительной эффективности каждого метода.
Дикран Сумчатый
Вы правы в том, что если количество параметров больше пары, поиск по сетке будет нежизнеспособным. Но то же самое относится и к Nelder-Mead, потому что размер симплекса определяется размерностью.
Innuo
только в той же степени, что и для градиентного спуска, добавление дополнительного измерения к задаче добавляет только одну дополнительную точку к симплексу, поэтому, подобно градиентному спуску, оно приблизительно линейно масштабируется по числу гиперпараметров. Я использовал его с проблемами с более чем 40 гиперпараметрами, и он только немного медленнее, чем градиентный спуск (вы склонны переусердствовать в выборе модели в любом случае, хотя с таким количеством гиперпараметров).
Дикран Сумчатый
0

Вот запись в блоге Алекса Смолы, связанная с вашим вопросом

Вот цитата:

[...] выберите, скажем, 1000 пар (x, x ') случайным образом из вашего набора данных, вычислите расстояние всех таких пар и возьмите медиану, квантиль 0,1 и 0,9. Теперь выберите λ, чтобы быть обратным любому из этих трех чисел. Немного пройдя перекрестную проверку, вы поймете, какой из трех является лучшим. В большинстве случаев вам не нужно искать дальше.

carlosdc
источник