Предупреждение libsvm «достижение максимального числа итераций» и перекрестная проверка


20

Я использую libsvm в режиме C-SVC с полиномиальным ядром степени 2, и мне необходимо обучить несколько SVM. Каждый тренировочный набор имеет 10 функций и 5000 векторов. Во время обучения я получаю это предупреждение для большинства SVM, которые я тренирую:

WARNING: reaching max number of iterations
optimization finished, #iter = 10000000

Может кто-нибудь объяснить, что подразумевает это предупреждение и, возможно, как его избежать?

Я также хочу применить перекрестную проверку для моих моделей, чтобы определить лучший выбор для гаммы и C (регуляризация). Мой план состоит в том, чтобы просто попробовать каждую комбинацию этих 10 значений: 0,00001, 0,0001, 0,001, 0,01, 0,1, 1, 10, 100, 1000, 10000 для обоих параметров и посмотреть, какая комбинация дает наилучшую точность во время перекрестной проверки. Этого достаточно? Должен ли я использовать больше значений в этом интервале, или я должен выбрать более широкий интервал?


Попробуйте режим NU_SVC, это должно решить вашу проблему.
Хосейн Битараф

Ответы:


20

Это предупреждение означает, что итеративная подпрограмма, используемая LIBSVM для решения задачи квадратичной оптимизации, чтобы найти гиперплоскость с максимальным запасом (т. Е. Параметры и b ), разделяющую ваши данные, достигла максимального числа итераций и должна будет остановиться, в то время как текущее приближение для w может быть дополнительно улучшено (то есть, w может быть изменено, чтобы сделать значение целевой функции более экстремальным). Короче говоря, это означает, что LIBSVM считает, что ему не удалось найти гиперплоскость с максимальным запасом, что может быть или не быть правдой.весбвесвес

Есть много причин, по которым это может произойти, я бы посоветовал вам сделать следующее:

  • Нормализуйте свои данные.
  • Убедитесь, что ваши занятия более или менее сбалансированы (имеют одинаковый размер). Если они этого не делают, используйте параметр -w, чтобы назначить им разные веса.
  • Сγ
    γU'v+коэфф0 степень

Хорошей идеей является поиск оптимального в логарифмическом масштабе, как и вы. Я думаю, что для нормализованных данных диапазон поиска для который вы предложили, должен быть в порядке. Полезная проверка: точность классификатора не должна сильно изменяться на границах этого диапазона и между двумя значениями вашего набора. Если это так, расширьте диапазон или добавьте промежуточные значения.CСС

Обратите внимание, что дистрибутив LIBSVM для Windows должен содержать скрипт Python grid.py, который может выбирать параметры для вас (на основе перекрестной проверки и указанных диапазонов поиска). Он также может создавать контурные графики для точности SVM. Этот инструмент может быть весьма полезным.

Следующий вопрос о StackOverflow и связанных с ним вопросах также может помочь: libsvm Shrinking Heuristics


Спасибо за подробное объяснение. Это определенно проясняет тайну. Я задал примерно тот же вопрос по SO (ссылка, которую вы предоставили), но ответ, который я получил, был в основном сфокусирован на эвристике.
Михай Тодор
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.