Установите классификатор с большим количеством данных [дубликат]

В Ajax есть междоменная проблема. Вы должны быть уверены, что получаете доступ к своим файлам на одном и том же пути http:// без www. (или доступ из http://www. и сообщение на тот же путь, в том числе www.), который браузер считает другим доменом при доступе через www., поэтому вы видите, где проблема. Вы отправляете в другой домен, и браузер блокирует поток из-за ошибки происхождения.

Если API не размещен на том же хосте, который вы запрашиваете, поток заблокирован, и вам нужно будет найти другой способ связи с API.

27
задан Michael Aquilina 14 April 2014 в 10:30
поделиться

6 ответов

Хотя онлайн-алгоритмы для SVM существуют, важно определить, хотите ли вы ядро ​​или линейные SVM, так как было разработано много эффективных алгоритмов для частного случая линейных SVM.

Для линейного случая, если вы используете классификатор SGG в scikit-learn с потерей шарнира и регуляцией L2, вы получите SVM, который может быть обновлен онлайн / incrementall. Вы можете комбинировать это с преобразованиями функции , которые аппроксимируют ядро ​​, чтобы получить сходство с ядром SVM онлайн.

Одна из моих спецификаций заключается в том, что она должна постоянно обновляться для изменения трендов.

Это называется дрейфом концепции , и не будет обрабатываться с помощью простого онлайн-SVM. Использование классификатора PassiveAggresive, скорее всего, даст вам лучшие результаты, так как скорость обучения не уменьшается с течением времени.

Предполагая, что вы получаете обратную связь во время обучения / работы, вы можете попытаться обнаружить снижение точности с течением времени и начать обучение новой модели, когда точность начнет уменьшаться (и переключиться на новую, когда вы считаете, что это стал более точным). JSAT имеет 2 метода обнаружения дрейфа (см. jsat.driftdetectors ), которые могут использоваться для отслеживания точности и предупреждения о том, когда он изменился.

Он также имеет больше интерактивных линейных и ядерных методов.

(примечание смещения: я автор JSAT).

28
ответ дан Raff.Edward 26 August 2018 в 14:04
поделиться

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)
2
ответ дан Alaleh Rz 26 August 2018 в 14:04
поделиться

Технические аспекты

Короткий ответ - нет. Внедрение Sklearn (как и большинство других) не поддерживает онлайн-обучение SVM. Можно настроить SVM поэтапно, но это не так уж и сложно.

Если вы хотите ограничить себя линейным случаем, чем ответ да, поскольку sklearn предоставляет вам Stochastic Gradient Спуск (SGD), который имеет возможность минимизировать критерий SVM.

Вместо этого вы можете попробовать библиотеку pegasos, которая поддерживает онлайн-обучение SVM.

Теоретические аспекты

Проблема адаптации тенденции в настоящее время очень популярна в сообществе ML. Как заявил @Raff, он называется дрейфом концепции и имеет множество подходов, которые часто являются видами метамоделей, которые анализируют «как ведет себя тренда» и изменяют базовую модель ML (например, заставляя его переквалифицироваться на подмножество данных). Итак, у вас есть две независимые проблемы:

  • проблема онлайн-обучения, которая является чисто технической и может быть решена SGD или другими библиотеками, чем дрейф концепции sklearn
  • , который в настоящее время является горячей темой и не имеет ответов на справедливые работы. Существует много возможностей, гипотез и доказательств концепций, в то время как нет никого, общепринятого способа борьбы с этими явлениями, на самом деле многие докторские диссертации в области ML постоянно основаны на этом вопросе .
7
ответ дан lejlot 26 August 2018 в 14:04
поделиться

Если вы заинтересованы в онлайн-обучении с концептуальным дрейфом, то вот некоторая предыдущая работа

  1. Обучение под концептуальным дрейфом: обзор https://arxiv.org/pdf/1010.4784.pdf
  2. Проблема концептуального дрейфа: определения и соответствующая работа http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.9085&rep= rep1 & amp; type = pdf
  3. Опрос по адаптации концептуального дрейфа http://www.win.tue.nl/~mpechen/publications/pubs/Gama_ACMCS_AdaptationCD_accepted.pdf
  4. MOA Concept Drift Активные стратегии обучения потоковым данным http://videolectures.net/wapa2011_bifet_moa/
  5. Поток алгоритмов для концептуального дрейфа ] http://people.cs.georgetown.edu/~maloof/pubs/maloof.heilbronn12.handout.pdf
  6. ГОРЯЧИЕ ДАННЫЕ ПОТОКА С КОНЦЕПТОМ DRIFT http: // www .cs.put.poznan.pl / dbrzezinski / publications / ConceptDrift.pdf
  7. Анализ данных временных рядов с потоковой обработкой и машинным обучением http: //www.ibmbigda
2
ответ дан SemanticBeeng 26 August 2018 в 14:04
поделиться

Способ масштабирования SVM может быть разбит ваш большой набор данных на партии, которые могут быть безопасно использованы алгоритмом SVM, затем найдите вспомогательные векторы для каждой партии отдельно и затем создайте результирующую модель SVM в наборе данных, состоящем из всей поддержки векторов, найденных во всех партиях.

Обновление тенденций может быть достигнуто путем поддержания временного окна каждый раз, когда вы запускаете свой учебный конвейер. Например, если вы проводите свое обучение один раз в день, и в исторических данных за месяц вам будет достаточно информации, создайте ваш набор данных из исторических данных, полученных за последние 30 дней.

1
ответ дан Sergey Zakharov 26 August 2018 в 14:04
поделиться

Возможно, я наивна, но я думаю, что стоит упомянуть, как реально обновлять 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)
15
ответ дан user277194 26 August 2018 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: