Чи можливо додати дані тренінгу до існуючих моделей 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.