如何在python中正确使用特征哈希

时间:2014-12-20 05:21:17

标签: python hash scikit-learn feature-extraction

我有许多相同维度的数组,例如

x = np.array([3,2,0,4,5,2,1...]) #the dimension of the vectors is above 50000 
y = np.array([1,3,4,2,4,1,4...])

我想要做的是使用特征哈希来减少这些向量的维度(尽管会有碰撞)。然后可以在分类器中使用较低维度向量。

我试过的是

from sklearn.feature_extraction import FeatureHasher
hasher = FeatureHasher()
hash_vector = hasher.transform(x)

但是,FeatureHasher似乎不能直接使用,而是AttributeError: 'matrix' object has no attribute 'items'

因此,为了顺利进行功能散列,接下来该怎么办? 如果我遗失了什么,谁能让我知道?或者,如果还有其他方法可以更有效地进行功能散列?

1 个答案:

答案 0 :(得分:1)

transform方法的参数必须是可迭代的样本,而不是单个样本 - 请参阅http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.FeatureHasher.html

但是,您的代码存在更多问题:您未通过input_type来构建哈希,因此它默认为dict - "字典over(feature_name,value)" (需要items: - )。

无论如何,没有任何输入类型可以让aher接受"未命名"您似乎希望传递给transform的功能......这不是功能哈希的工作原理。

您可以考虑采用不同的降维方法,例如http://scipy-lectures.github.io/advanced/scikit-learn/#dimension-reduction-with-principal-component-analysis ...