我正在使用sklearn版本0.16.1。似乎FeatureHasher不支持字符串(如DictVectorizer那样)。
例如:

values = [
          {'city': 'Dubai', 'temperature': 33.},
          {'city': 'London', 'temperature': 12.},
          {'city': 'San Fransisco', 'temperature': 18.}
          ]

print("Starting FeatureHasher ...")
hasher = FeatureHasher(n_features=2)
X = hasher.transform(values).toarray()
print X


但是收到以下错误:

    _hashing.transform(raw_X, self.n_features, self.dtype)
  File "_hashing.pyx", line 46, in sklearn.feature_extraction._hashing.transform (sklearn\feature_extraction\_hashing.c:1762)
TypeError: a float is required


我不能使用DictVectorizer,因为我的数据集很大并且功能具有很高的基数,所以出现MemoryError。
有什么建议么?

更新(2016年10月):

正如NirIzr所评论的那样,现在这已得到支持,因为sklearn开发团队在https://github.com/scikit-learn/scikit-learn/pull/6173中解决了此问题。

从0.18版开始,FeatureHasher应该正确处理字符串字典值。

最佳答案

最好的选择是使用非数字功能是像DictVectorizer一样自行转换键。

values = [
      {'city_Dubai':1., 'temperature': 33.},
      {'city_London':1., 'temperature': 12.},
      {'city_San Fransisco':1., 'temperature': 18.}
      ]


您可以使用python函数执行此操作。

def transform_features(orig_dict):
    transformed_dict = dict()
    for name, value in orig_dict.iteritems():
        if isinstance(value , str):
            name = "%s_%s" % (name,value)
            value = 1.
        transformed_dict[name] = value
    return transformed_dict


用法示例:

transform_features({'city_Dubai':1., 'temperature': 33.})
# Returns {'city_Dubai': 1.0, 'temperature': 33.0}

关于python - TypeError:sklearn.feature_extraction.FeatureHasher中需要浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33982717/

10-12 16:29