机器学习中的哈希技巧如何运作?

问题描述 投票:-1回答:1

我有一个大的分类数据集和一个前馈ANN,我用它来分类。我使用Excel VBA编程了机器学习模型(我目前唯一可访问的编程语言)。

我的数据集中有150个类别需要处理。我尝试过使用二进制编码和单热编码,但是由于我需要处理的类别数量很多,这些向量通常太大而无法处理VBA,最终导致内存错误。

我想给Hashing一些技巧,看看它是否有效。但是我不明白如何使用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

我仍然不完全理解它。这是我到目前为止所做的。我使用以下代码示例为我的分类日期创建哈希序列:Generate short hash string based using VBA

使用上面的代码,我已经能够生成无冲突的数字哈希序列。但是,我现在该怎么办?现在是否需要将哈希序列转换为二进制向量?这是我迷路的地方。

到目前为止,我提供了一个我的数据的小例子。有人能够一步一步地向我展示散列技巧是如何工作的(最好是Excel)吗?

'CATEGORY   'HASH SEQUENCE
STEEL     37152
PLASTIC   31081
ALUMINUM      2310
BRONZE    9364
excel machine-learning hash hashcode
1个回答
0
投票

所以散列技巧的作用是防止假字占用额外的内存。在常规的词袋(BOW)模型中,词汇表中每个单词有1个维度。这意味着拼写错误的单词和常规单词都可以占用不同的维度 - 如果您在模型中有拼写错误的单词。如果拼写错误的单词不在模型中(取决于您的模型),您可能会完全忽略它。这随着时间的推移而增加。通过拼写错误的单词,我只是使用一个单词的示例,而不是在您使用的词汇表中创建向量来训练您的模型。这意味着任何以这种方式训练的模型都不能适应新的词汇而不需要再次训练。

散列方法允许您合并词汇外单词,但可能存在一些潜在的准确性损失。它还确保您可以限制记忆。本质上,散列方法首先定义一个散列函数,该散列函数接受一些输入(通常是一个单词)并将其映射到已经确定的范围内的输出值。您可以选择哈希函数输出介于0-2 ^ 16之间的某个位置。因此,您知道输出向量的大小始终为2 ^ 16(实际上是任意值),因此您可以防止内存问题。此外,散列函数具有“冲突” - 这意味着散列(a)可能等于散列(b) - 很少有适当的输出范围,但它可能。这意味着你会失去一些准确性 - 但由于哈希函数理论上能够接受任何输入字符串,因此它可以使用词汇表单词来获得与用于训练模型的原始向量相同大小的新向量。由于您的新数据向量与先前用于训练模型的数据相同,因此您可以使用它来优化模型,而不是被迫训练新模型。

© www.soinside.com 2019 - 2024. All rights reserved.