Ответ 1
Это распространенное недоразумение воблевой магии.
Нельзя сравнивать пакетное обучение с онлайн-обучением.
vowpal wabbit не является учащимся партии. Это онлайн-ученик. Учащиеся онлайн учатся, просматривая примеры по одному и немного корректируя веса модели, когда они идут.
Есть преимущества и недостатки онлайн-обучения. Недостатком является то, что сближение с конечной моделью медленное/постепенное. Ученик не выполняет "идеальную" работу по извлечению информации из каждого примера, потому что процесс является итеративным. Конвергенция по окончательному результату преднамеренно сдерживается/замедляется. Это может сделать онлайн-учащихся слабыми на крошечных наборах данных, как указано выше.
Однако есть несколько недостатков:
- Пользователям онлайн не нужно загружать полные данные в память (они работают, анализируя один пример за раз и настраивая модель на основе наблюдаемой в реальном времени потери на один пример), поэтому они могут легко масштабироваться до миллиардов Примеры. Статья 2011 года от 4 Yahoo! исследователи описывают, как wowpal wabbit использовался для изучения из набора данных tera (10 ^ 12), установленных за 1 час на 1k узлах. Пользователи регулярно используют
vw
, чтобы узнать из множества наборов данных примеров на своих рабочих столах и ноутбуках. - Онлайн-обучение является адаптивным и может отслеживать изменения в условиях с течением времени, поэтому оно может учиться у нестационарных данных, таких как обучение против адаптивного противника.
- Изучение интроспекции: может наблюдать коэффициенты конвергенции потерь во время обучения и определять конкретные проблемы и даже получать существенные сведения из конкретных примеров или функций набора данных.
- Ученики онлайн могут учиться постепенно, поэтому пользователи могут смешивать помеченные и немеченые примеры, чтобы продолжать учиться одновременно с прогнозированием.
- Оцененная ошибка, даже во время обучения, всегда "вне выборки", которая является хорошей оценкой тестовой ошибки. Нет необходимости разбивать данные на подмножества поездов и тестов или выполнять N-образную перекрестную проверку. Следующий (пока невидимый) пример всегда используется в качестве продержания. Это огромное преимущество над пакетными методами из операционного аспекта. Это значительно упрощает типичный процесс машинного обучения. Кроме того, до тех пор, пока вы не выполняете несколько проходов по данным, он служит отличным механизмом предотвращения обхода.
Онлайн-пользователи очень чувствительны к примеру. Самый худший возможный порядок для онлайн-ученика - это когда классы группируются вместе (сначала все или почти все, -1
, а затем все 1
s), как показано в примере выше. Итак, первое, что нужно сделать, чтобы получить лучшие результаты от онлайн-ученика, такого как vowpal wabbit, - равномерно перетасовать теги 1
и -1
(или просто упорядочить по времени, поскольку примеры обычно появляются в реальной жизни).
Хорошо, что?
Q: Есть ли способ создать разумную модель в том смысле, что она дает разумные прогнозы по малым данным при использовании онлайн-ученика?
A: Да, есть!
Вы можете эмулировать то, что более детально изучает ученик, выполнив два простых шага:
- Примеры равномерного тасования
1
и-1
. - Запустите несколько проходов по данным, чтобы дать учащемуся возможность сходиться
Предостережение: если вы выполняете несколько проходов до тех пор, пока ошибка не исчезнет до 0, существует опасность переустановки. Ученик онлайн отлично изучил ваши примеры, но он не может хорошо обобщить невидимые данные.
Вторая проблема здесь заключается в том, что предсказания vw
дают не преобразование логистической функции (это неудачно). Они сродни стандартным отклонениям от средней точки (усекаются на [-50, 50]). Вам нужно передать прогнозы через utl/logistic
(в исходном дереве), чтобы получить подписанные вероятности. Обратите внимание, что эти подписанные вероятности находятся в диапазоне [-1, +1], а не [0, 1]. Вы можете использовать logistic -0
вместо logistic
, чтобы сопоставить их с диапазоном [0, 1].
Итак, учитывая выше, здесь рецепт, который должен дать вам больше ожидаемых результатов:
# Train:
vw train.vw -c --passes 1000 -f model.vw --loss_function logistic --holdout_off
# Predict on train set (just as a sanity check) using the just generated model:
vw -t -i model.vw train.vw -p /dev/stdout | logistic | sort -tP -n -k 2
Предоставление этого более ожидаемого результата в вашем наборе данных:
-0.95674145247658 P1
-0.930208359811439 P2
-0.888329575506748 P3
-0.823617739247262 P4
-0.726830630992614 P5
-0.405323815830325 P6
0.0618902961794472 P7
0.298575998150221 P8
0.503468453150847 P9
0.663996516371277 P10
0.715480084449868 P11
0.780212725426778 P12
Вы можете сделать результаты более/менее поляризованными (ближе к 1
в старшем возрасте и ближе к -1
для младшего), увеличивая/уменьшая количество проходов. Вы также можете быть заинтересованы в следующих вариантах обучения:
--max_prediction <arg> sets the max prediction to <arg>
--min_prediction <arg> sets the min prediction to <arg>
-l <arg> set learning rate to <arg>
Например, увеличивая скорость обучения от стандартного 0.5
до большого числа (например, 10
), вы можете заставить vw
сходиться намного быстрее при обучении на небольших наборах данных, что требует меньше проходов, чтобы получить есть.
Update
По состоянию на середину 2014 года vw
больше не требуется, чтобы внешняя утилита logistic
отображала прогнозы обратно в диапазон [0,1]. Новый параметр --link logistic
отображает прогнозы в область логистической функции [0, 1]. Аналогично --link glf1
отображает прогнозы в область обобщенной логистической функции [-1, 1].