【问题标题】:How to use sklearn FeatureHasher?如何使用 sklearn FeatureHasher?
【发布时间】:2017-04-05 23:14:43
【问题描述】:

我有一个这样的数据框:

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

如何使用sklearn FeatureHasher 有吗?

我试过了:

from sklearn.feature_extraction import FeatureHasher 
FH = FeatureHasher()
train = FH.transform(test.type)

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

FH.transform(test.to_dict(orient='list'))

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

AttributeError: 'str' object has no attribute 'items'

谢谢

【问题讨论】:

  • FH.transform(test['type'].tolist()) 工作吗?
  • 使用FH.transform(test.to_dict(orient='records')) 代替FH.transform(test.to_dict(orient='list'))orient='records' 会将数据帧转换为字典列表,然后由FeatureHasher 处理。

标签: python pandas scikit-learn


【解决方案1】:

初始化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.]])

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

input_type : 字符串,可选,默认“dict”

  • “dict”(默认值)接受字典(特征名称、值);
  • “pair”接受成对的 (feature_name, 值);
  • 或“字符串”以接受单个字符串。 feature_name 应该是 字符串,而 value 应该是一个数字。 在“字符串”的情况下,一个 值 1 是隐含的

feature_name 被散列以找到 该功能的相应列。值的符号可能会翻转 在输出中(但请参阅下面的 non_negative)。

【讨论】:

  • 好的,这正在返回一些东西,但不是我认为它会返回的东西
  • 嗯,这与这个问题不同,我想我已经回答了。你期待什么?
  • 假设我有一张表:Article|Category 每个Article 有很多category 我希望每篇文章有一个哈希结果到left_join 作为我数据集中的一个特征。当我拿到桌子时,我得到了一个(2x n_features) 框架。还是我一般不理解特征散列的使用?
  • 在将它放入特征哈希之前我应该​​先做假吗?
  • 不,您不应该使用虚拟变量(=one-hot encoding),因为 one-hot 编码和特征散列最终用于将分类数据转换为数字数据的相同目的(根据 ML 的需要)算法)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2017-07-14
  • 2019-10-11
  • 2019-05-16
  • 2013-11-01
  • 2017-11-04
相关资源
最近更新 更多