Как работает хэш-трюк в машинном обучении? - PullRequest
0 голосов
/ 28 марта 2019

У меня большой категориальный набор данных и ANN с прямой связью, которые я использую для целей классификации.Я запрограммировал модель машинного обучения, используя Excel VBA (единственный язык программирования, к которому у меня сейчас есть доступ).

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

IЯ хотел бы попробовать Хэшинг-трюк и посмотреть, будет ли он работать лучше.Однако я не понимаю, как это сделать в Excel.

Я проверил следующие ссылки, чтобы попытаться понять это:

https://docs.microsoft.com/en-us/azure/machine-learning/studio-module-reference/feature-hashing

https://medium.com/value-stream-design/introducing-one-of-the-best-hacks-in-machine-learning-the-hashing-trick-bf6a9c8af18f

https://en.wikipedia.org/wiki/Vowpal_Wabbit

Я до сих пор не до конца понимаю.Вот что я сделал до сих пор.Я использовал следующий пример кода для создания хэш-последовательности для моей категорической даты: Создание короткой строки хеш-функции на основе VBA

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

Пока я привел небольшой пример своих данных.Кто-нибудь сможет показать мне шаг за шагом, как работает трюк хеширования (желательно для Excel)?

'CATEGORY   'HASH SEQUENCE
STEEL     37152
PLASTIC   31081
ALUMINUM      2310
BRONZE    9364

1 Ответ

0 голосов
/ 28 марта 2019

Итак, хитрость хеширования заключается в том, что она не позволяет поддельным словам занимать дополнительную память. В обычной модели Bag-Of-Words (BOW) у вас есть 1 измерение на слово в словаре. Это означает, что слово с ошибкой и обычное слово могут принимать разные измерения - если у вас есть слово с ошибкой в ​​модели вообще. Если слово с ошибкой отсутствует в модели (в зависимости от вашей модели), вы можете полностью его игнорировать. Это складывается со временем. И, используя слово с ошибкой, я просто использую пример любого слова, отсутствующего в словаре, который вы используете для создания векторов для обучения вашей модели. Это означает, что ни одна модель, обученная таким образом, не может адаптироваться к новому словарю без повторного обучения.

Метод хеширования позволяет вводить слова без слов, что может привести к потере точности. Это также гарантирует, что вы можете связать свою память. По сути, метод хэширования начинается с определения хеш-функции, которая принимает некоторый вход (обычно слово), и сопоставляет его с выходным значением в пределах уже определенного диапазона. Вы бы выбрали свою хеш-функцию для вывода где-нибудь между, скажем, 0-2 ^ 16. Таким образом, вы знаете, что ваши выходные векторы всегда будут ограничены размером 2 ^ 16 (произвольное значение на самом деле), так что вы можете предотвратить проблемы с памятью. Кроме того, хеш-функции имеют «коллизии» - это означает, что хеш (a) может равняться hash (b) - очень редко с соответствующим выходным диапазоном, но это возможно. Это означает, что вы теряете некоторую точность - но поскольку теоретически хеш-функция может принимать любую входную строку, она может работать с словарными словами, чтобы получить новый вектор того же размера, что и исходные векторы, используемые для обучения модели. Поскольку ваш новый вектор данных имеет тот же размер, что и те, которые использовались для обучения модели ранее, вы можете использовать его для уточнения модели, вместо того, чтобы заставлять обучать новую модель.

...