Читать данные из памяти в Vowpal Wabbit?

Есть ли способ отправить данные для обучения модели в Vowpal Wabbit, не записывая их на диск?

Вот что я пытаюсь сделать. У меня есть относительно большой набор данных в CSV (около 2 ГБ), который без проблем помещается в памяти. Я загружаю его в R в кадр данных, и у меня есть функция для преобразования данных в этом кадре в формат VW.

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

Итак, предполагая, что я могу создать символьный вектор в R, в котором каждый элемент представляет собой строку данных в формате VW, как я могу передать это в VW, не записывая его на диск?

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

Я готов использовать c ++ (через пакет Rcpp), если это необходимо.

Заранее большое спасибо.

ОБНОВИТЬ:

Спасибо всем за вашу помощь. В случае, если кому-то интересно, я просто передал вывод в VW, как предложено в ответе, примерно так:

# Two sample rows of data
datarows <- c("1 |name 1:1 2:4 4:1", "-1 |name 1:1 4:1")
# Open connection to VW
con <- pipe("vw -f my_model.vw")
# Write to connection and close
writeLines(datarows, con)
close(con)

5

Решение

Vowpal Wabbit поддерживает чтение данных из стандартного ввода (cat train.dat | vw), поэтому вы можете открыть канал непосредственно из R.

Режим демона поддерживает обучение. Если вам нужно пошаговое / непрерывное обучение, вы можете использовать трюк с фиктивным примером, тег которого начинается со строки «save». При желании вы также можете указать имя файла модели:

1 save_filename|

Еще один вариант — использовать VW в качестве библиотеки, см. пример.

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

2

Другие решения

То, что вы можете искать, работает vw в режиме демона.

Стандартный способ сделать это — запустить vw как демон:

vw -i some.model --daemon --quiet --port 26542 -p /dev/stdout

Вы можете заменить 26542 по порту на ваш выбор.

Теперь вы можете TCP-соединение с сервером (который может быть localhostв порту 26542) и каждый запрос, который вы пишете в сокет TCP, будет отвечать на тот же сокет.

Вы можете учиться (отправлять помеченные примеры, которые будут изменять модель в режиме реального времени) или писать запросы и читать ответы.

Вы можете сделать это либо один запрос + прогноз за один раз, либо несколько одновременно. Все, что вам нужно, это символ новой строки в конце каждого запроса, точно так же, как вы тестировали бы из файла. Заказ гарантированно будет сохранен.

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

Этот пример обновит модель, потому что она имеет вес 1:

label 1 'tag1| input_features...

И этот не будет обновлять модель, потому что он имеет вес 0:

label 0 'tag2| input_features...

Немного больше в официальной ссылке в wowbit vowpal:
Как запустить vowpal wabbit в качестве демона хотя обратите внимание, что в этом главном примере модель предварительно изучена и загружена в память.

5

Я также использую R для преобразования данных и вывода их в VowpalWabbit. Существует RVowpalWabbit
пакет на CRAN, который можно использовать для соединения R с VowpalWabbit. Тем не мение,
он доступен только в Linux.

Кроме того, чтобы ускорить процесс, я использую fread функция data.table пакет. Преобразования data.table также быстрее, чем в data.frame, но нужно изучить другой синтаксис.

0
По вопросам рекламы [email protected]