libsvm попередження та перехресне підтвердження "досягнення максимальної кількості ітерацій"


20

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

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

Невже хтось може пояснити, що означає це попередження, і, можливо, як цього уникнути?

Я також хочу застосувати перехресну перевірку для моїх моделей, щоб визначити найкращий вибір для гами та С (регуляризація). Мій план - просто спробувати всі комбінації цих 10 значень: 0,00001, 0,0001, 0,001, 0,01, 0,1, 1, 10, 100, 1000, 10000 для обох параметрів і побачити, яка комбінація забезпечує найкращу точність під час перехресної перевірки. Цього достатньо? Чи слід використовувати більше значень в цьому інтервалі, або я повинен вибрати більш широкий інтервал?


Спробуйте режим NU_SVC, це повинно вирішити вашу проблему.
Хосейн Бітараф

Відповіді:


20

Це попередження означає, що ітеративна процедура, що використовується LIBSVM для вирішення задачі квадратичної оптимізації, щоб знайти максимальну гіперплану поля (тобто параметри і ), що розділяє ваші дані, досягнуто максимальної кількості ітерацій і доведеться зупинятись, поки поточне наближення для можна додатково посилити (тобто можна змінити, щоб зробити значення цільової функції більш крайнім). Коротше кажучи, це означає, що LIBSVM вважає, що не вдалося знайти гіперплану максимального запасу, що може бути, а може і не бути правдою.wbww

Є багато причин, чому це може статися, я б запропонував вам зробити наступне:

  • Нормалізуйте свої дані.
  • Переконайтесь, що ваші заняття більш-менш збалансовані (мають подібний розмір). Якщо цього немає, використовуйте параметр -w, щоб призначити їм різну вагу.
  • Спробуйте різні і . Поліномне ядро ​​в LIBSVM також має параметр 'coef0', оскільки ядро Cγ
    γuv+coeff0 degree

Це хороша ідея пошуку оптимального у логарифмічному масштабі, як і ви. Я думаю, що для нормалізованих даних діапазон пошуку для який ви запропонували, повинен бути добре. Корисна перевірка: точність класифікатора не повинна сильно змінюватися на межах цього діапазону та між двома значеннями вашого набору. Якщо це так, розширіть діапазон або додайте проміжні значення.CC

Зверніть увагу, що дистрибутив LIBSVM для Windows повинен містити скрипт Python під назвою grid.py, який може зробити вибір параметрів для вас (на основі перехресної перевірки та визначених діапазонів пошуку). Він також може створити контурні графіки для точності SVM. Цей інструмент може бути дуже корисним.

Наступне питання щодо StackOverflow та пов'язаних із цим питань також може допомогти: Евристика скорочення libsvm


Дякую за детальне пояснення. Це безумовно розгадує таємницю. Я задав приблизно те саме питання щодо SO (посилання, яке ви надали), але відповідь, яку я отримав там, була зосереджена здебільшого на скорочувальній евристиці.
Михай Тодор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.