В Ajax есть междоменная проблема. Вы должны быть уверены, что получаете доступ к своим файлам на одном и том же пути http://
без www.
(или доступ из http://www.
и сообщение на тот же путь, в том числе www.
), который браузер считает другим доменом при доступе через www.
, поэтому вы видите, где проблема. Вы отправляете в другой домен, и браузер блокирует поток из-за ошибки происхождения.
Если API не размещен на том же хосте, который вы запрашиваете, поток заблокирован, и вам нужно будет найти другой способ связи с API.
Хотя онлайн-алгоритмы для SVM существуют, важно определить, хотите ли вы ядро или линейные SVM, так как было разработано много эффективных алгоритмов для частного случая линейных SVM.
Для линейного случая, если вы используете классификатор SGG в scikit-learn с потерей шарнира и регуляцией L2, вы получите SVM, который может быть обновлен онлайн / incrementall. Вы можете комбинировать это с преобразованиями функции , которые аппроксимируют ядро , чтобы получить сходство с ядром SVM онлайн.
Одна из моих спецификаций заключается в том, что она должна постоянно обновляться для изменения трендов.
blockquote>Это называется дрейфом концепции , и не будет обрабатываться с помощью простого онлайн-SVM. Использование классификатора PassiveAggresive, скорее всего, даст вам лучшие результаты, так как скорость обучения не уменьшается с течением времени.
Предполагая, что вы получаете обратную связь во время обучения / работы, вы можете попытаться обнаружить снижение точности с течением времени и начать обучение новой модели, когда точность начнет уменьшаться (и переключиться на новую, когда вы считаете, что это стал более точным). JSAT имеет 2 метода обнаружения дрейфа (см. jsat.driftdetectors ), которые могут использоваться для отслеживания точности и предупреждения о том, когда он изменился.
Он также имеет больше интерактивных линейных и ядерных методов.
(примечание смещения: я автор JSAT).
SGD для задач пакетного обучения обычно имеет уменьшающуюся скорость обучения и многократно проходит тренировочный набор. Итак, для чисто онлайн-обучения убедитесь, что для параметра learning_rate установлено значение «constant» в sklearn.linear_model.SGDClassifier () и eta0 = 0,1 или любое требуемое значение. Поэтому процесс выглядит следующим образом:
clf= sklearn.linear_model.SGDClassifier(learning_rate = 'constant', eta0 = 0.1, shuffle = False, n_iter = 1)
# get x1, y1 as a new instance
clf.partial_fit(x1, y1)
# get x2, y2
# update accuracy if needed
clf.partial_fit(x2, y2)
Короткий ответ - нет. Внедрение Sklearn (как и большинство других) не поддерживает онлайн-обучение SVM. Можно настроить SVM поэтапно, но это не так уж и сложно.
Если вы хотите ограничить себя линейным случаем, чем ответ да, поскольку sklearn предоставляет вам Stochastic Gradient Спуск (SGD), который имеет возможность минимизировать критерий SVM.
Вместо этого вы можете попробовать библиотеку pegasos, которая поддерживает онлайн-обучение SVM.
Проблема адаптации тенденции в настоящее время очень популярна в сообществе ML. Как заявил @Raff, он называется дрейфом концепции и имеет множество подходов, которые часто являются видами метамоделей, которые анализируют «как ведет себя тренда» и изменяют базовую модель ML (например, заставляя его переквалифицироваться на подмножество данных). Итак, у вас есть две независимые проблемы:
Если вы заинтересованы в онлайн-обучении с концептуальным дрейфом, то вот некоторая предыдущая работа
Способ масштабирования SVM может быть разбит ваш большой набор данных на партии, которые могут быть безопасно использованы алгоритмом SVM, затем найдите вспомогательные векторы для каждой партии отдельно и затем создайте результирующую модель SVM в наборе данных, состоящем из всей поддержки векторов, найденных во всех партиях.
Обновление тенденций может быть достигнуто путем поддержания временного окна каждый раз, когда вы запускаете свой учебный конвейер. Например, если вы проводите свое обучение один раз в день, и в исторических данных за месяц вам будет достаточно информации, создайте ваш набор данных из исторических данных, полученных за последние 30 дней.
Возможно, я наивна, но я думаю, что стоит упомянуть, как реально обновлять sci-kit SGD classifier , когда вы представляете свои данные постепенно:
clf = linear_model.SGDClassifier()
x1 = some_new_data
y1 = the_labels
clf.partial_fit(x1,y1)
x2 = some_newer_data
y2 = the_labels
clf.partial_fit(x2,y2)