特征哈希是如何工作的?

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

>>>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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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