2013-09-03 6 views
8

मुझे एक त्रुटि मिल रही है जिसमें "ऐरे में NaN या अनंतता शामिल है"। मैंने लापता मूल्यों के लिए ट्रेन/परीक्षण दोनों में अपना डेटा चेक किया है और इसमें कुछ भी नहीं है।विज्ञान-किट के साथ त्रुटि एसजीडी अल्गो सीखें - "ऐरे में NaN या अनंतता है"

यह संभव है कि मेरे पास "अरे में NaN या अनंतता" का गलत अर्थ है।

import numpy as np 
from sklearn import linear_model 
from numpy import genfromtxt, savetxt 

def main(): 
    #create the training & test sets, skipping the header row with [1:] 
    dataset = genfromtxt(open('C:\\Users\\Owner\\training.csv','r'), delimiter=',')[0:50]  
    target = [x[0] for x in dataset] 
    train = [x[1:50] for x in dataset] 
    test = genfromtxt(open('C:\\Users\\Owner\\test.csv','r'), delimiter=',')[0:50] 

    #create and train the SGD 
    sgd = linear_model.SGDClassifier() 
    sgd.fit(train, target) 
    predictions = [x[1] for x in sgd.predict(test)] 

    savetxt('C:\\Users\\Owner\\Desktop\\preds.csv', predictions, delimiter=',', fmt='%f') 

if __name__=="__main__": 
    main() 

मैंने सोचा कि डेटा प्रकार लूप के लिए अलगो फेंक रहा है (वे फ़्लोटिंग-पॉइंट्स हैं)।

मुझे पता है कि एसजीडी फ़्लोटिंग-पॉइंट्स को संभाल सकता है, इसलिए मुझे यकीन नहीं है कि इस सेटअप को मुझे डेटाटाइप घोषित करने की आवश्यकता है या नहीं।

निम्न में से एक जैसे:

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-62-af5537e7802b> in <module>() 
    19 
    20 if __name__=="__main__": 
---> 21  main() 

<ipython-input-62-af5537e7802b> in main() 
    13  #create and train the SGD 
    14  sgd = linear_model.SGDClassifier() 
---> 15  sgd.fit(train, target) 
    16  predictions = [x[1] for x in sgd.predict(test)] 
    17 

C:\Anaconda\lib\site-packages\sklearn\linear_model\stochastic_gradient.pyc in fi 
t(self, X, y, coef_init, intercept_init, class_weight, sample_weight) 
    518       coef_init=coef_init, intercept_init=intercept_i 
nit, 
    519       class_weight=class_weight, 
--> 520       sample_weight=sample_weight) 
    521 
    522 

C:\Anaconda\lib\site-packages\sklearn\linear_model\stochastic_gradient.pyc in _f 
it(self, X, y, alpha, C, loss, learning_rate, coef_init, intercept_init, class_w 
eight, sample_weight) 
    397    self.class_weight = class_weight 
    398 
--> 399   X = atleast2d_or_csr(X, dtype=np.float64, order="C") 
    400   n_samples, n_features = X.shape 
    401 

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in atleast2d_or_csr(X 
, dtype, order, copy) 
    114  """ 
    115  return _atleast2d_or_sparse(X, dtype, order, copy, sparse.csr_matrix 
, 
--> 116         "tocsr") 
    117 
    118 

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in _atleast2d_or_spar 
se(X, dtype, order, copy, sparse_class, convmethod) 
    94   _assert_all_finite(X.data) 
    95  else: 
---> 96   X = array2d(X, dtype=dtype, order=order, copy=copy) 
    97   _assert_all_finite(X) 
    98  return X 

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in array2d(X, dtype, 
order, copy) 
    79       'is required. Use X.toarray() to convert to dens 
e.') 
    80  X_2d = np.asarray(np.atleast_2d(X), dtype=dtype, order=order) 
---> 81  _assert_all_finite(X_2d) 
    82  if X is X_2d and copy: 
    83   X_2d = safe_copy(X_2d) 

C:\Anaconda\lib\site-packages\sklearn\utils\validation.pyc in _assert_all_finite 
(X) 
    16  if (X.dtype.char in np.typecodes['AllFloat'] and not np.isfinite(X.s 
um()) 
    17    and not np.isfinite(X).all()): 
---> 18   raise ValueError("Array contains NaN or infinity.") 
    19 
    20 

ValueError: Array contains NaN or infinity. 

किसी भी विचार की सराहना की जाएगी:

>>> dt = np.dtype('i4') # 32-bit signed integer 
>>> dt = np.dtype('f8') # 64-bit floating-point number 
>>> dt = np.dtype('c16') # 128-bit complex floating-point number 
>>> dt = np.dtype('a25') # 25-character string 

नीचे पूर्ण त्रुटि संदेश है।

+5

क्या आप त्रुटि का पूरा पता पोस्ट कर सकते हैं, और 'प्रिंट dataset.dtype' प्रिंट कर सकते हैं? साथ ही, आपके पास एक टिप्पणी है कि आप "हेडर पंक्ति को '[1:]' "से छोड़ रहे हैं, लेकिन ऐसा नहीं लगता है .... – Dougal

+1

मुझे लगता है जैसे @Dougal का एक अच्छा सुझाव है हेडर लोड करने के बारे में। आप यह जांचने का प्रयास कर सकते हैं कि आपका डेटासेट सही ढंग से 'assert np.any (np.isnan (डेटासेट) | np.isinf (डेटासेट) के साथ लोड हो गया है या नहीं) '। – lmjohns3

+0

क्या आपने numpy.nan_to_num (ndarray) का प्रयास किया है, जो फ़ंक्शन नैन को शून्य करता है और जहां तक ​​मुझे पता है, बड़ी संख्या में अनंतताएं होती हैं, (यदि आप जानते हैं कि आपको शून्य पर कितना परिणाम मिलना चाहिए और बहुत अधिक संख्याएं, अन्यथा वास्तव में नहीं) – usethedeathstar

उत्तर

0

त्रुटि रिपोर्ट के रूप में आपके पास np.nan या np.inf या -np.inf आपके डेटा में कहीं भी है। चूंकि आप एक टेक्स्ट फ़ाइल से पढ़ रहे हैं और आप कहते हैं कि आपका डेटा में अनुपलब्ध मान नहीं हैं, तो यह संभवतः कॉलम हेडर या फ़ाइल में किसी अन्य मान के कारण होता है जिसे स्वचालित रूप से व्याख्या नहीं किया जा सकता है।

genfromtxt के लिए दस्तावेज़ से पता चलता है कि डिफ़ॉल्ट dtype-पढ़ने में सरणियों के लिए float है, जिसका अर्थ है कि सभी मूल्यों है कि आप पढ़ सकते हैं float(x) के बराबर से गुजरना होगा।

आप अनिश्चित अगर इस त्रुटि आपको इस प्रकार numpy सरणी से गैर-परिमित संख्या को हटा सकते हैं हो रही हैं:

dataset[ ~np.isfinite(dataset) ] = 0 # Set non-finite (nan, inf, -inf) to zero 

कि त्रुटि समाप्त करते हैं, तो क्या आप वाकई अमान्य मान है कि हो सकता है आपके चर में, कहींलगाने के लिए जहां आप निम्नलिखित का उपयोग कर सकते हैं:

np.where(~np.isfinite(dataset)) 

यह जैसे सूचकांकों की एक सूची जहां अमान्य मान रहे हैं, वापस आ जाएगी

>>> import numpy as np 

>>> dataset = np.array([[0,1,1],[np.nan,0,0],[1,2,np.inf]]) 
>>> dataset 
array([[ 0., 1., 1.], 
     [ nan, 0., 0.], 
     [ 1., 2., inf]]) 

>>> np.where(~np.isfinite(dataset)) 
(array([1, 2]), array([0, 2])) 
संबंधित मुद्दे