如何使用sklearn FeatureHasher?

Kil*_*ail 5 python pandas scikit-learn

我有这样的数据帧:

import pandas as pd
test = pd.DataFrame({'type': ['a', 'b', 'a', 'c', 'b'], 'model': ['bab', 'ba', 'ba', 'ce', 'bw']})
Run Code Online (Sandbox Code Playgroud)

我该如何使用sklearn FeatureHasher 它呢?

我试过了:

from sklearn.feature_extraction import FeatureHasher 
FH = FeatureHasher()
train = FH.transform(test.type)
Run Code Online (Sandbox Code Playgroud)

但它不喜欢它?它似乎想要一个字符串或一个列表,所以我尝试

FH.transform(test.to_dict(orient='list'))
Run Code Online (Sandbox Code Playgroud)

但这也不起作用?我明白了:

AttributeError: 'str' object has no attribute 'items'
Run Code Online (Sandbox Code Playgroud)

谢谢

Jul*_*rec 7

初始化FeatureHasher实例时,需要指定输入类型:

In [1]:
from sklearn.feature_extraction import FeatureHasher
h = FeatureHasher(n_features=5, input_type='string')
f = h.transform(test.type)
f.toarray()

Out[1]:
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0., -1.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  0., -1.,  0.,  0.],
       [ 0., -1.,  0.,  0.,  0.]])
Run Code Online (Sandbox Code Playgroud)

请注意,根据上面链接的文档,这将假设这些功能的值为1(大胆强调是我的):

input_type:string,optional,默认"dict"

  • "dict"(默认值)接受字典(feature_name,value);
  • "pair"接受对(feature_name,value);
  • 或"字符串"接受单个字符串.feature_name应该是一个字符串,而value应该是一个数字.在"string"的情况下,隐含值1.

对feature_name进行哈希处理以查找该功能的相应列.值的符号可能会在输出中翻转(但请参见下面的non_negative).

  • 而且不,您不应该使用伪变量(= one-hot编码),因为one-hot编码和特征哈希最终达到将分类数据转换为数值数据的相同目的(根据ML算法的要求)。 (2认同)