了解特征散列

机器算法验证 特征工程
2022-03-22 19:39:27

Wikipedia 在描述特征散列时提供了以下示例但映射似乎与定义的字典不一致

例如,to应该3根据字典转换为,但它被编码为1代替。

描述有错误吗?特征哈希是如何工作的?

文本:

John likes to watch movies. Mary likes too.
John also likes to watch football games.

可以转换,使用字典

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, 
"football": 7, "games": 8, "Mary": 9, "too": 10}

到矩阵

[[1 2 1 1 1 0 0 0 1 1]
 [1 1 1 1 0 1 1 1 0 0]]
2个回答

矩阵的构造方式如下:

  • 行代表线
  • 列代表特征

并且每个入口矩阵(i,j)=k 表示:

在第 i 行,索引为 j 的单词出现 k 次。

Soto映射到索引 3。它在第 1 行中恰好出现一次。所以 m(1,3)=1。

更多示例

  • likes映射到索引 2。它在第一行恰好出现两次。所以 m(1,2)=2
  • also映射到索引 6。它没有出现在第 1 行,而是在第 2 行出现一次。所以 m(1,6)=0 和 m(2,6)=1。

正如 Steffen 所指出的,示例矩阵编码了一个单词在文本中出现的次数。编码到矩阵中的位置由单词(矩阵上的列位置)和文本(矩阵上的行位置)给出。

现在,散列技巧的工作方式相同,尽管您不必最初定义包含每个单词的列位置的字典。

实际上,散列函数将为您提供可能的列位置范围(散列函数将为您提供可能的最小值和最大值)以及要编码到矩阵中的单词的确切位置。例如,假设“likes”这个词被我们的散列函数散列成数字 5674,那么 5674 列将包含与“likes”这个词相关的编码。

以这种方式,您无需在分析文本之前构建字典。如果您将使用稀疏矩阵作为文本矩阵,您甚至不必准确定义矩阵大小。只需通过动态扫描文本,您将通过散列函数将单词转换为列位置,并且您的文本矩阵将根据您正在逐步分析的文档(行位置)填充数据(频率,即)。