Онлайн обучение — это подполе машинного обучения, которое позволяет масштабировать контролируемые модели обучения в массивные наборы данных. Основная идея заключается в том, что нам не нужно читать все данные в памяти, чтобы соответствовать модели, нам нужно только читать каждый экземпляр за раз.
В этом случае мы покажем, как реализовать алгоритм онлайн-обучения с использованием логистической регрессии. Как и в большинстве контролируемых алгоритмов обучения, существует функция стоимости, которая минимизируется. В логистической регрессии функция затрат определяется как —
J( theta)= frac−1m left[ summi=1y(i)log(h theta(x(i)))+(1−y(i))log(1−h theta(x(i)))) right]
где J (θ) представляет функцию стоимости, а h θ (x) представляет гипотезу. В случае логистической регрессии это определяется по следующей формуле —
h theta(x)= frac11+e thetaTx
Теперь, когда мы определили функцию стоимости, нам нужно найти алгоритм, чтобы минимизировать ее. Простейший алгоритм для достижения этого называется стохастическим градиентным спуском. Правило обновления алгоритма для весов модели логистической регрессии определяется как —
thetaj:= thetaj− alpha(h theta(x)−y)x
Существует несколько реализаций следующего алгоритма, но тот, который реализован в библиотеке wowbit vowpal , безусловно, наиболее развит. Библиотека позволяет обучать крупномасштабные регрессионные модели и использует небольшие объемы оперативной памяти. По словам авторов, это описывается так: «Проект Vowpal Wabbit (VW) — это быстрая система обучения, основанная на ядре, спонсируемая Microsoft Research и (ранее) Yahoo! Research».
Мы будем работать с титановым набором данных из соревнований по борьбе. Исходные данные можно найти в папке bda / part3 / vw . Здесь у нас есть два файла —
- У нас есть тренировочные данные (train_titanic.csv), и
- немаркированные данные для новых прогнозов (test_titanic.csv).
Чтобы преобразовать формат csv во входной формат vowpal wabbit, используйте скрипт Python csv_to_vowpal_wabbit.py . Для этого вам, очевидно, потребуется установить python. Перейдите в папку bda / part3 / vw , откройте терминал и выполните следующую команду —
python csv_to_vowpal_wabbit.py
Обратите внимание, что для этого раздела, если вы используете Windows, вам нужно установить командную строку Unix, для этого зайдите на веб-сайт cygwin .
Откройте терминал, а также в папке bda / part3 / vw и выполните следующую команду —
vw train_titanic.vw -f model.vw --binary --passes 20 -c -q ff --sgd --l1 0.00000001 --l2 0.0000001 --learning_rate 0.5 --loss_function logistic
Давайте разберем, что означает каждый аргумент вызова vw .
-
-f model.vw — означает, что мы сохраняем модель в файле model.vw для последующего прогнозирования
-
—binary — сообщает о потере как двоичная классификация с -1,1 метками
-
—passes 20 — данные используются 20 раз, чтобы узнать вес
-
-c — создать файл кеша
-
-q ff — использовать квадратичные функции в пространстве имен f
-
—sgd — использовать регулярное / классическое / простое обновление стохастического градиентного спуска, т. е. неадаптивное, ненормализованное и неинвариантное.
-
—l1 —l2 — регуляризация нормы L1 и L2
-
—learning_rate 0.5 — Скорость обучения, определенная в формуле правила обновления
-f model.vw — означает, что мы сохраняем модель в файле model.vw для последующего прогнозирования
—binary — сообщает о потере как двоичная классификация с -1,1 метками
—passes 20 — данные используются 20 раз, чтобы узнать вес
-c — создать файл кеша
-q ff — использовать квадратичные функции в пространстве имен f
—sgd — использовать регулярное / классическое / простое обновление стохастического градиентного спуска, т. е. неадаптивное, ненормализованное и неинвариантное.
—l1 —l2 — регуляризация нормы L1 и L2
—learning_rate 0.5 — Скорость обучения, определенная в формуле правила обновления
Следующий код показывает результаты запуска модели регрессии в командной строке. В результате мы получаем среднее значение log-loss и небольшой отчет о производительности алгоритма.
-loss_function logistic creating quadratic features for pairs: ff using l1 regularization = 1e-08 using l2 regularization = 1e-07 final_regressor = model.vw Num weight bits = 18 learning rate = 0.5 initial_t = 1 power_t = 0.5 decay_learning_rate = 1 using cache_file = train_titanic.vw.cache ignoring text input in favor of cache input num sources = 1 average since example example current current current loss last counter weight label predict features 0.000000 0.000000 1 1.0 -1.0000 -1.0000 57 0.500000 1.000000 2 2.0 1.0000 -1.0000 57 0.250000 0.000000 4 4.0 1.0000 1.0000 57 0.375000 0.500000 8 8.0 -1.0000 -1.0000 73 0.625000 0.875000 16 16.0 -1.0000 1.0000 73 0.468750 0.312500 32 32.0 -1.0000 -1.0000 57 0.468750 0.468750 64 64.0 -1.0000 1.0000 43 0.375000 0.281250 128 128.0 1.0000 -1.0000 43 0.351562 0.328125 256 256.0 1.0000 -1.0000 43 0.359375 0.367188 512 512.0 -1.0000 1.0000 57 0.274336 0.274336 1024 1024.0 -1.0000 -1.0000 57 h 0.281938 0.289474 2048 2048.0 -1.0000 -1.0000 43 h 0.246696 0.211454 4096 4096.0 -1.0000 -1.0000 43 h 0.218922 0.191209 8192 8192.0 1.0000 1.0000 43 h finished run number of examples per pass = 802 passes used = 11 weighted example sum = 8822 weighted label sum = -2288 average loss = 0.179775 h best constant = -0.530826 best constant’s loss = 0.659128 total feature number = 427878
Теперь мы можем использовать модель.vw, которую мы обучили, для создания прогнозов с новыми данными.
vw -d test_titanic.vw -t -i model.vw -p predictions.txt
Прогнозы, сгенерированные в предыдущей команде, не нормализуются для соответствия диапазону [0, 1]. Для этого мы используем сигмовидную трансформацию.