Ваш первый элемент, вероятно, будет самым трудным, поскольку в сущности не существует хороших добавочных реализаций SVM.
Несколько месяцев назад я также исследовал онлайн или инкрементные алгоритмы SVM. К сожалению, текущее состояние реализаций довольно скудное. Все, что я нашел, это пример Matlab , OnlineSVR (дипломный проект, реализующий только поддержку регрессии) и SVMHeavy (только поддержка двоичного класса).
Я не использовал ни одного из них лично. Все они, кажется, находятся на стадии «исследовательской игрушки». Я даже не смог заставить SVMHeavy скомпилировать.
На данный момент вы, вероятно, можете делать периодические тренинги для включения обновлений. Я также использую LibSVM, и он довольно быстрый, поэтому он может быть хорошей заменой, пока не будет реализована правильная инкрементная версия.
Я также не думаю, что SVM может моделировать концепцию "неизвестного" образца по умолчанию. Как правило, они работают как серия булевых классификаторов, поэтому выборка в конечном итоге оказывается положительно классифицированной как что-то, даже если эта выборка резко отличается от всего, что мы видели ранее. Возможный обходной путь - моделировать диапазоны ваших функций и случайным образом генерировать выборки, существующие за пределами этих диапазонов, а затем добавлять их в тренировочный набор.
Например, если у вас есть атрибут с именем «color», который имеет минимальное значение 4 и максимальное значение 123, вы можете добавить их в свой тренировочный набор
[({'color':3},'unknown'),({'color':125},'unknown')]
, чтобы дать вашему SVM представление о том, что означает "неизвестный" цвет.