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

时间:2019-03-28 16:24:58

标签: excel machine-learning hash hashcode

我有一个很大的分类数据集和一个用于分类目的的前馈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

1 个答案:

答案 0 :(得分:0)

因此,哈希技巧的作用是防止伪造的单词占用额外的内存。在常规的单词袋(BOW)模型中,词汇表中每个单词具有1维。这意味着拼写错误的单词和常规单词都可以占据不同的维度-如果您的模型中完全有拼写错误的单词。如果拼写错误的单词不在模型中(取决于您的模型),您可能会完全忽略它。随着时间的推移,这加起来。而且,通过拼写错误的单词,我只是使用一个单词的示例,该单词不在您用来创建用于训练模型的向量的词汇表中。意味着以这种方式训练的任何模型都必须重新训练,才能适应新的词汇。

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