当前位置: 首页 > 面试题库 >

Spark对HashingTF使用什么哈希函数,如何复制它?

柳墨一
2023-03-14
问题内容

Spark MLLIb具有HashingTF()函数,该函数根据每个术语的哈希值计算文档术语频率。

1)它使用什么函数进行哈希处理?

2)如何从Python获得相同的哈希值?

3)如果我想为给定的单个输入计算散列输出,而不计算术语“频率”,我该怎么做?


问题答案:

如果您有疑问,通常检查来源。给定项的存储区确定如下:

def indexOf(self, term):
    """ Returns the index of the input term. """
    return hash(term) % self.numFeatures

如您所见,这只是hash存储桶的一个普通的旧模块数。

最终哈希只是每个存储区计数的向量(为简便起见,我省略了docstring和RDD的情况):

def transform(self, document):
    freq = {}
    for term in document:
        i = self.indexOf(term)
        freq[i] = freq.get(i, 0) + 1.0
    return Vectors.sparse(self.numFeatures, freq.items())

如果您想忽略频率,则可以将其set(document)用作输入,但是我怀疑这里有很多好处。要创建sethash无论如何都要计算每个元素。



 类似资料:
  • 问题内容: 几乎每本教科书和CS课程都引用了两种实现哈希函数的基本方法: 除法 ,我们只需要简单地选择m作为素数就不太接近2的幂。 乘法方法 是将k与0到1之间的某些非理性选择数(Knuth建议使用基于黄金比率的数)相乘,取乘积的小数部分,并从中使用所需数目的最高有效位。 大多数教科书和课程都列举了方法1的几个缺点,包括方法昂贵且取决于m的事实。但是,我从未见过任何教科书或课程提到方法2的单一缺点

  • 从原理到应用分析什么是哈希? 一、什么是哈希? 哈希(hash):将任意长度的输入(关键字),通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值,通常哈希值代表了关键字的存储位置。 但是为什么要这样做呢?或者说,哈希是怎样来的呢? 哈希的出现解决了两个问题:存储和搜索。 1. 存储(数据结构):如果在容器中保存对象及其关联的键,并且不用键

  • 我有一个包含许多重复条目的文件,如下所示: 那里的每个实体也与一个ID相关联,也许是一个,也许是更多, 我想单独获取每个实体,但由于消除歧义,对于类似于,每个实体都可以与多个ID关联,因此在下,可能会有一个用于河流的ID,另一个用于海湾、城镇等。 我想最好的方法是使用哈希映射,其中名称是关键,对吗? 有没有办法输出JSON格式的hashmap或其他高度可移动的数据表示?

  • 在查看了用于生成 Java MD5 和 SHA* 哈希的多个在线参考后,我注意到纯文本(文件字符串)之前经历了某些准备 PS:我想答案与Java和Digest对象如何处理它们的业务有关,我问这个问题的动机是为了理解这种行为,并可能获得一些深入解释这一点的文档/文献的参考资料。 丹科!

  • 我正在尝试编写一个C程序,使用哈希表来存储不同的单词,我需要一些帮助。 首先,我创建一个哈希表,其大小为最接近我必须存储的单词数的素数,然后我使用一个哈希函数为每个单词找到一个地址。我从最简单的函数开始,把字母加在一起,结果有88%的碰撞。然后我开始实验这个函数,发现无论我把它改成什么,碰撞都不会低于35%。现在我在用 这只是我想出来的一个随机函数,但它给了我最好的结果--大约35%的碰撞。 在过

  • 问题内容: 我正在阅读Java 1.6 API提供的HashMap类的代码,无法完全理解以下操作的需要(位于put和get方法的主体中): 该方法具有以下主体: 通过对提供的哈希码执行位操作,可以有效地重新计算哈希。即使API声明如下,我也无法理解这样做的必要性: 这很关键,因为HashMap使用2的幂的哈希表,否则哈希表在低位无差异时会遇到冲突。 我确实知道键值参数存储在数据结构数组中,并且该数