Учебники

Аналитика больших данных — онлайн-обучение

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

В этом случае мы покажем, как реализовать алгоритм онлайн-обучения с использованием логистической регрессии. Как и в большинстве контролируемых алгоритмов обучения, существует функция стоимости, которая минимизируется. В логистической регрессии функция затрат определяется как —

J( theta)= frac1m left[ summi=1y(i)log(h theta(x(i)))+(1y(i))log(1h 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]. Для этого мы используем сигмовидную трансформацию.