为了理解“哈希技巧”,我编写了以下测试代码:
import pandas as pd
from sklearn.feature_extraction import FeatureHasher
test = pd.DataFrame({'type': ['a', 'b', 'c', 'd', 'e','f','g','h']})
h = FeatureHasher(n_features=4, input_type='string')
f = h.transform(test.type)
print(f.toarray())在上面的示例中,我将8个类别映射为4列,输出如下:
[[ 0. 0. 1. 0.]<-a
[ 0. -1. 0. 0.]<-b
[ 0. -1. 0. 0.]<-c
[ 0. 0. 0. 1.]<-d
[ 0. 0. 0. 1.]<-e
[ 0. 0. 0. 1.]<-f
[ 0. 0. -1. 0.]<-g
[ 0. -1. 0. 0.]]<-g在得到的矩阵中,我可以看到重复,一些类别也是用同样的方式表示的。为什么?如果我使用二进制表示,8个类别可以映射到4列中。
请有人解释一下这项技术的输出,也许可以再详细说明一下吗?
发布于 2020-04-21 02:23:42
FeatureHasher将每个令牌分配给输出中的单个列;它不执行允许您忠实地将更多特性编码到较小空间的二进制编码。相反,重点是您不必像在OneHotEncoder中那样查找给定类别映射到哪一列:您只需将哈希函数应用于该值。使用低维目标空间可以保证碰撞,但即使是较大的目标空间也可能产生一些碰撞。
https://datascience.stackexchange.com/questions/72569
复制相似问题