python - vectorize - tfidftransformer




TypeError: un float est requis dans sklearn.feature_extraction.FeatureHasher (2)

J'utilise Sklearn version 0.16.1. Il semble que FeatureHasher ne supporte pas les chaînes (comme le fait DictVectorizer). Par exemple:

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

Mais l'erreur suivante est reçue:

    _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

Je ne peux pas utiliser DictVectorizer car mon jeu de données est très grand et les fonctionnalités sont avec une cardinalité élevée, donc je reçois un MemoryError. Aucune suggestion?

Mise à jour (octobre 2016):

Comme l'a commenté NirIzr, ceci est maintenant supporté, car l'équipe de sklearn dev a abordé ce problème sur https://github.com/scikit-learn/scikit-learn/pull/6173

FeatureHasher doit gérer correctement les valeurs de dictionnaire de chaînes à partir de la version 0.18.


Votre meilleur pari pour les fonctionnalités non numériques est de transformer les clés vous-même de la même manière que DictVectorizer .

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

Vous pourriez le faire avec une fonction 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

Exemple d'utilisation:

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





feature-extraction