Это распространенное заблуждение о vowpal wabbit.
Нельзя сравнивать пакетное обучение с онлайн-обучением.
vowpal wabbit не предназначен для группового обучения. Это онлайн-ученик. Онлайн-учащиеся учатся, просматривая примеры по одному и немного корректируя веса модели по мере продвижения.
У онлайн-обучения есть свои преимущества и недостатки. Обратной стороной является то, что приближение к окончательной модели происходит медленно / постепенно. Учащийся не выполняет «идеальную» работу по извлечению информации из каждого примера, потому что процесс является повторяющимся. Сходимость к окончательному результату намеренно сдерживается / замедляется. Из-за этого онлайн-учащиеся могут показаться слабыми на крошечных наборах данных, подобных приведенным выше.
Однако есть несколько плюсов:
- Онлайн-учащимся не нужно загружать полные данные в память (они работают, исследуя один пример за раз и корректируя модель на основе наблюдаемых в реальном времени потерь для каждого примера), поэтому они могут легко масштабироваться до миллиардов примеров. Статья 2011 г. 4 Yahoo! Исследователи описывают, как vowpal wabbit использовался для обучения с помощью набора данных tera (10 ^ 12) за 1 час на 1k узлах. Пользователи регулярно используют
vw
для изучения миллиардов примеров наборов данных на своих настольных компьютерах и ноутбуках.
- Онлайн-обучение является адаптивным и может отслеживать изменения условий с течением времени, поэтому оно может учиться на нестационарных данных, таких как обучение против адаптивного противника.
- Самоанализ обучения: один может наблюдать скорость сходимости потерь во время обучения и выявить конкретные проблемы и даже получить важную информацию из конкретных примеров или функций набора данных.
- Онлайн-учащиеся могут учиться постепенно, поэтому пользователи могут смешивать помеченные и немаркированные примеры, чтобы продолжать обучение, одновременно делая прогнозы.
- Расчетная ошибка, даже во время обучения, всегда "вне выборки", что является хорошей оценкой ошибка теста. Нет необходимости разделять данные на обучающие и тестовые подмножества или выполнять N-стороннюю перекрестную проверку. Следующий (пока невидимый) пример всегда используется в качестве сдерживающего фактора. Это огромное преимущество перед пакетными методами с точки зрения эксплуатации. Это значительно упрощает типичный процесс машинного обучения. Кроме того, пока вы не выполняете многократные проходы по данным, это служит отличным механизмом предотвращения чрезмерной подгонки.
Онлайн-ученики очень чувствительны к порядку примеров. Наихудший возможный порядок для онлайн-ученика - это когда классы сгруппированы вместе (сначала появляются все или почти все -1
, а затем все 1
), как в приведенном выше примере. Итак, первое, что нужно сделать, чтобы получить лучшие результаты от онлайн-ученика, такого как vowpal wabbit, - это равномерно перемешать 1
s и -1
s (или просто упорядочить по времени, как примеры обычно появляются в реальной жизни).
Хорошо, что теперь?
В: Есть ли способ создать разумную модель в том смысле, что она дает разумные прогнозы для небольших данных при использовании онлайн-учащегося?
О: Да, есть!
Вы можете более точно подражать тому, что делает пакетное обучение, выполнив два простых шага:
- Перемешайте
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
сходиться намного быстрее при обучении на небольших наборах данных, что требует меньшего количества проходов, чтобы добраться туда.
Обновить
С середины 2014 года vw
больше не требует внешней logistic
утилиты для сопоставления прогнозов с диапазоном [0,1]. Новая опция --link logistic
отображает прогнозы в диапазон логистической функции [0, 1]. Аналогичным образом --link glf1
отображает прогнозы в диапазон обобщенной логистической функции [-1, 1].
person
arielf - Reinstate Monica
schedule
18.07.2014