В чем разница между пространством имен и функцией в Vowpal Wabbit?

При анализе в R или python мы знаем только имена функций (их значения) и используем их. В Vowpal Wabbit также есть пространства имен.

Я не могу понять: а. что подразумевается под пространством имен; б. чем он отличается от признаков; в. когда он используется? А когда не используется? То есть, можем ли мы избежать его использования. д. И как это используется?

Буду благодарен за один-два примера. Извините за столько вопросов.


person user3282777    schedule 18.02.2015    source источник


Ответы (1)


В vowpal пространства имен wabbit используются для удобного создания функций взаимодействия «на лету» во время выполнения без необходимости их предварительного объявления.

Простой пример формата без пространства имен:

1 | a:2 b:3

где 1 — метка, а a, b — обычные входные объекты.

Обратите внимание, что после | есть пробел.

Сравните приведенное выше с использованием двух пространств имен x и y (обратите внимание на отсутствие пробела между разделителем | и пространствами имен):

1 |x a:2 |y b:3

Этот пример по сути эквивалентен (за исключением расположения хэшей функций) первому примеру. В нем по-прежнему есть две функции с теми же значениями, что и в исходном примере. Разница в том, что теперь с этими пространствами имен мы можем пересекать функции, передавая параметры в vw. Например:

vw -q xy

будет генерировать дополнительные функции на лету, пересекая все функции в пространстве имен x со всеми функциями в пространстве имен y. Имена автоматически сгенерированных функций будут конкатенацией имен из двух пространств имен, а значения будут произведениями их соответствующих значений. В этом конкретном случае наш набор данных будет иметь одну дополнительную функцию: ab:6 (*)

Очевидно, это очень простой пример, представьте, что у вас есть пример с 3 функциями в пространстве имен:

1 |x a:2 b:3 c:5

Добавив -q xx к vw, вы можете автоматически создать 6 дополнительных функций взаимодействия: aa, ab, ac, bb, bc, cc на лету. И если бы у вас было 3 пространства имен, скажем: x, y, z, вы могли бы пересечь любое из них (или любое желаемое подмножество): -q xx -q xy -q xz -q yz -q yy -q zz в командной строке, чтобы получить все возможные взаимодействия между отдельными наборами функций. .

Вот и все. Это мощная функция, позволяющая экспериментировать и добавлять функции взаимодействия на лету.

Есть несколько опций, которые принимают (первые буквы) пространств имен в качестве аргументов, среди них:

-q
--cubic
--ignore
--keep
--redefine (very new)
--lrq

Дополнительные сведения см. в вики аргументов командной строки vw.

(*) На практике имена объектов будут иметь пространства имен с разделителем ^ между ними, поэтому фактическая хешированная строка будет x^a^y^b:6, а не ab:6 (вы можете проверить это, используя параметр --audit), но это всего лишь деталь.

person arielf - Reinstate Monica    schedule 19.02.2015
comment
таким образом, фактическая хешированная строка будет иметь вид x^a^y^b:6. На практике хэш квадратичного признака вычисляется другим способом (на основе хэшей двух исходных признаков и магической константы), так что он не то же самое, что хэш (x ^ a ^ y ^ b). Но это всего лишь техническая деталь. - person Martin Popel; 19.02.2015
comment
Спасибо, Мартин. Да, если вы действительно хотите узнать точные детали реализации, безопасный способ не упустить ни одной детали — просмотреть (бесплатный и открытый) исходный код. Есть также --hash strings и --hash all, что имеет значение, когда имя функции является числовым. Приведенное выше описание было в основном для того, чтобы объяснить концепцию пространств имен, сохраняя при этом краткий ответ (думаю, я не справился с этим :) В большинстве случаев точное значение хеш-функции и адрес, по которому функции в конечном итоге хранятся в памяти, не имеет значения для Пользователь. - person arielf - Reinstate Monica; 19.02.2015
comment
Спасибо за объяснение различий между пространствами имен и функциями. Функции, если можно так сказать, существуют в реальном мире, но необходимо создать пространства имен, если я хочу взаимодействия между функциями. Вы упомянули выше, что новая функция взаимодействия является произведением значений двух функций из разных пространств имен. Но если эти две характеристики категоричны, можно ли простыми словами объяснить, как будут развиваться ценности взаимодействия. Спасибо еще раз. - person user3282777; 20.02.2015
comment
Категориальные значения не напрямую поддерживаются vowpal wabbit. Тем не менее, есть классный прием, позволяющий заставить бинарные функции (значения в {0,1}) эмулировать категориальные значения: например: color=red color=blue color=green, это возможно, потому что = является лишь частью строки имени функции (т. е. = не является специальным разделителем, как :). Эта тема ортогональна и не имеет ничего общего с пространствами имен. Когда функции являются бинарными, взаимодействие работает естественно. Кстати: не стесняйтесь задавать отдельный вопрос о том, как представить различные типы функций в vw. Спасибо. - person arielf - Reinstate Monica; 20.02.2015
comment
@arief Спасибо. Представление функций в VW меня озадачивает. Я поднял другой вопрос. [ссылка] (stackoverflow.com/questions/ 28640837/). Пожалуйста помоги. - person user3282777; 21.02.2015