特征哈希是如何工作的?

我阅读了许多关于机器学习中分类变量特征哈希的在线文章。不幸的是,我仍然无法理解这个概念和它的工作原理。我将通过下面的示例数据集和从另一个网站获取的哈希函数来说明我的困惑:

>>>data   pop     state  year0  1.5      Ohio  20001  1.7      Ohio  20012  3.6  New York  20023  2.4    Nevada  20014  2.9    Nevada  20025  1.8    Oregon  2003>>> def hash_col(df, col, N):       cols = [col + "_" + str(i) for i in range(N)]       def xform(x): tmp = [0 for i in range(N)]; tmp[hash(x) % N] = 1; return pd.Series(tmp,index=cols)       df[cols] = df[col].apply(xform)       return df.drop(col,axis=1)

下面的函数用于通过指定不同维数(换句话说,即哈希特征)来打印出不同的转换输出:

>>> print(hash_col(data, 'state',4))   pop  year  state_0  state_1  state_2  state_30  1.5  2000        0        0        1        01  1.7  2001        0        0        1        02  3.6  2002        0        0        0        13  2.4  2001        0        1        0        04  2.9  2002        0        1        0        05  1.8  2003        0        0        0        1>>> print(hash_col(data, 'state',5))   pop  year  state_0  state_1  state_2  state_3  state_40  1.5  2000        1        0        0        0        01  1.7  2001        1        0        0        0        02  3.6  2002        1        0        0        0        03  2.4  2001        0        0        1        0        04  2.9  2002        0        0        1        0        05  1.8  2003        0        0        0        0        1>>> print(hash_col(data, 'state',6))   pop  year  state_0  state_1  state_2  state_3  state_4  state_50  1.5  2000        0        0        0        0        1        01  1.7  2001        0        0        0        0        1        02  3.6  2002        0        0        0        0        0        13  2.4  2001        0        0        0        1        0        04  2.9  2002        0        0        0        1        0        05  1.8  2003        0        0        0        0        0        1

我不明白的是,每个‘state_0’, ‘state_1’, ‘state_2’等列代表什么。此外,由于我的数据集中有4个独特的州(Ohio, New York, Nevada, Oregon),为什么所有的’1‘只分配给了3个‘state_n’列,而不是像独热编码那样分配给4个列?例如,当我将维数设置为6时,输出在state_3, state_4state_5中有两个’1‘,但在state_0, state_1state_2中没有’1‘。任何反馈都将不胜感激!


回答:

特征哈希通常在你不知道分类变量的所有可能值时使用。正因为如此,我们无法创建从分类值到列的静态映射。因此,使用哈希函数来确定每个分类值对应哪个列。

这不是最佳用例,因为我们知道有确切的50个州,可以直接使用独热编码。

哈希函数也会有碰撞,不同的值被映射到同一个值。这就是这里发生的情况。两个不同的州名在哈希函数的模运算后被映射到同一个值。

减轻碰撞的一种方法是使特征空间(列数)大于可能的分类值数量。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注