Чи можливо додати дані тренінгу до існуючих моделей SVM?


14

Я використовую libsvm, і я помітив, що кожного разу, коли я дзвоню svmtrain (), я створюю нову модель і, здається, немає можливості розміщувати дані в існуючій моделі. Чи можливо це зробити? Я просто не бачу цього аспекту в libsvm?


Я не впевнений, що ви маєте на увазі під "введенням даних у існуючу модель"? Чи можете ви навести приклад якоїсь іншої техніки (не SVM), яка дозволяє це робити? Візьмемо для прикладу логістичну регресію; якщо ви додасте нові дані, ви отримаєте новий набір коефіцієнтів, перепідготовлений на існуючому наборі без посилання на те, які дані є "новими" чи "старими", це все лише дані навчання. Я думаю, що якщо ви використовуєте вирішувач типу градієнтного спуску, ви могли б заощадити час, ініціалізуючи попередньо оптимізовані значення, які, ймовірно, будуть близькими до нового рішення. Це ви маєте на увазі?
— Богдановіст

Відповіді:


17

Це здається, що ви шукаєте алгоритм навчання "поступового" чи "онлайн". Ці алгоритми дозволяють оновити класифікатор новими прикладами, не перевчаючи всю справу з нуля.

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

PS: @Bogdanovist: Про це досить велика література. kNN очевидно і тривіально наростає. Можна перетворити (деякі) байєсові класифікатори в додаткові класифікатори, зберігаючи підрахунки замість ймовірностей. STAGGER, AQ * та деякі (але не всі) алгоритми сімейства ідентифікаторів сімейства ID * також є поступовими, вгорі голови.


1
Цікаво, дякую за голови вгору. Я раніше бачив термін "онлайн", який перебуває у зв'язку із обмеженням, але не зрозумів технічного значення (я вважав, що це буквально означає "може занепокоїти Інтернет").
— Богдановіст

Радий допомогти! Я мав би згадати про це вище, але деякі онлайн / додаткові алгоритми насправді надають більшої ваги "найновішим" прикладам, які можуть бути або не корисні, залежно від вашої програми (наприклад, чудово для прогнозування щебетатишних тем, менш приголомшливих для раку дослідження).
— Метт Крауз

12

Більшість онлайн-інкрементальних утиліт SVM призначені для лінійних ядер, і я вважаю, що це не так складно, як для нелінійних ядер.

Деякі з найпомітніших Інтернет-/ поступових інструментів SVM, які зараз доступні:
+ LaSVM Leon Bottous : Він підтримує як лінійні, так і нелінійні ядра. Код C ++
+ LaRank Bordes : Він підтримує як лінійні, так і нелінійні ядра. C ++ код. Здається, зараз посилання розірвано :-(
+ код Герта Кавенберга, інкрементальний і декрементальний : підтримує як лінійні, так і нелінійні ядра. Код Matlab.
+ Кріс Діель Інкрементальне навчання SVM : підтримує як лінійні, так і нелінійні ядра. Matlab code.
+ Alistair SVMHeavy від Шилтона : Тільки двійкова класифікація та регресія. C ++ код
+ ІнтернетSVR Франческо Паррелла: Тільки регресія. Matlab і C ++.
+ Пегасо : Як лінійний, так і нелінійний. C і код Matlab. Інтерфейс Java .
+ Вабпал Лангфорда : Не впевнений :-(
+ MCSVM Кобі Краммера : як лінійний, так і нелінійний. C код

Більш оновлений список можна знайти у моїй відповіді Quora .


(+1) Ласкаво просимо на сайт. Це досить вичерпний список! :)
— кардинал

4

Інша можливість - альфа-висівання . Мені невідомо, чи підтримує libSVM. Ідея полягає в тому, щоб поділити величезну кількість навчальних даних на шматки. Потім ви тренуєте SVM на першому шматку. Оскільки отримані вектори підтримки - це не що інше, як деякі зразки ваших даних, ви берете їх і використовуєте їх для тренування вашого SVM з наступним фрагментом. Крім того, ви використовуєте цей SVM для обчислення початкової оцінки значень альфа для наступної ітерації (висіву). Тому переваги двоякі: кожна з проблем менша, і завдяки розумній ініціалізації вони сходяться ще швидше. Таким чином ви спростите величезну проблему для послідовного вирішення ряду більш простих кроків.


чи є там якась бібліотека, яка застосовує цей метод?
— d.putto

мабуть, libsvm вже це робить, або принаймні якийсь варіант алгоритму work.caltech.edu/~htlin/program/libsvm
— jpmuc

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.