python - TypeError: sklearn.feature_extraction.FeatureHasher में एक फ्लोट की आवश्यकता है




scikit-learn feature-extraction (2)

गैर-संख्यात्मक सुविधाओं के लिए आपकी सबसे अच्छी शर्त कुंजी को स्वयं बदलना है, जैसा कि DictVectorizer करता है।

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

आप ऐसा अजगर फ़ंक्शन के साथ कर सकते हैं।

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}

मैं sklearn संस्करण 0.16.1 का उपयोग कर रहा हूँ। ऐसा लगता है कि फ़ीचरहाशर तारों का समर्थन नहीं करता (जैसा कि 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

मैं अपने डेटासेट बहुत बड़ा है और सुविधाओं के उच्च कार्डिनल के साथ हैं, इसलिए मैं एक MemoryError मिल के बाद से DictVectorizer का उपयोग नहीं कर सकते। कोई सुझाव?

अपडेट (अक्टूबर 2016):

जैसा कि नाइरज ने टिप्पणी की, यह अब समर्थित है, क्योंकि स्केलेर्न देव टीम ने इस मुद्दे को https://github.com/scikit-learn/scikit-learn/pull/6173 में संबोधित किया

फ़ीचरहाशर को संस्करण 0.18 के रूप में स्ट्रिंग डिक्शनरी मानों को ठीक से व्यवस्थित करना चाहिए।


यह एक ज्ञात स्केलेर्न समस्या है: फ़ीचरहाशर वर्तमान में अपने डायट इनपुट प्रारूप के लिए स्ट्रिंग मानों का समर्थन नहीं करता है

https://github.com/scikit-learn/scikit-learn/issues/4878





feature-extraction