title: How to fix "NaN or infinity" issue for sparse matrix in python?
body: <p>I'm totally new to python. I've used some code found online and I tried to work on it. So I'm creating a text-document-matrix and I want to add some extra features before training a logistic regression model.</p>
  
  <p>Although I've checked my data with R and I get no error, when I run the logistic regression I get the error <strong>"ValueError: Array contains NaN or infinity."</strong> I'm not getting the same error when I do not add my own features. My features are in the file "toPython.txt".</p>
  
  <p>Mind the two calls to <strong>assert_all_finite</strong> function that returns "None"!</p>
  
  <p>Below is the code I use and the output I get:</p>
  
  <pre><code>def _assert_all_finite(X):
  if X.dtype.char in np.typecodes['AllFloat'] and not np.isfinite(X.sum()) and not np.isfinite(X).all():
      raise ValueError("Array contains NaN or infinity.")
  
  def assert_all_finite(X):
  _assert_all_finite(X.data if sparse.issparse(X) else X)
  
  def main():
  
  print "loading data.."
  traindata = list(np.array(p.read_table('data/train.tsv'))[:,2])
  testdata = list(np.array(p.read_table('data/test.tsv'))[:,2])
  y = np.array(p.read_table('data/train.tsv'))[:,-1]
  
  tfv = TfidfVectorizer(min_df=12,  max_features=None, strip_accents='unicode',  
      analyzer='word',stop_words='english', lowercase=True,
      token_pattern=r'\w{1,}',ngram_range=(1, 1), use_idf=1,smooth_idf=1,sublinear_tf=1)
  
  rd = lm.LogisticRegression(penalty='l2', dual=True, tol=0.0001, 
                           C=1, fit_intercept=True, intercept_scaling=1.0, 
                           class_weight=None, random_state=None)
  
  X_all = traindata + testdata
  lentrain = len(traindata)
  
  f = np.array(p.read_table('data/toPython.txt'))
  indices = np.nonzero(~np.isnan(f))
  b = csr_matrix((f[indices], indices), shape=f.shape, dtype='float')
  
  print b.get_shape
  **print assert_all_finite(b)**
  print "fitting pipeline"
  tfv.fit(X_all)
  print "transforming data"
  X_all = tfv.transform(X_all)
  print X_all.get_shape
  
  X_all=hstack( [X_all,b], format='csr' )
  print X_all.get_shape
  
  **print assert_all_finite(X_all)**
  
  X = X_all[:lentrain]
  print "3 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rd, X, y, cv=3, scoring='roc_auc'))
  </code></pre>
  
  <p>And the output is:</p>
  
  <pre><code>loading data..
  &lt;bound method csr_matrix.get_shape of &lt;10566x40 sparse matrix of type '&lt;type 'numpy.float64'&gt;'
  with 422640 stored elements in Compressed Sparse Row format&gt;&gt;
  **None**
  fitting pipeline
  transforming data
  &lt;bound method csr_matrix.get_shape of &lt;10566x13913 sparse matrix of type '&lt;type 'numpy.float64'&gt;'
  with 1450834 stored elements in Compressed Sparse Row format&gt;&gt;
  &lt;bound method csr_matrix.get_shape of &lt;10566x13953 sparse matrix of type '&lt;type 'numpy.float64'&gt;'
  with 1873474 stored elements in Compressed Sparse Row format&gt;&gt;
  **None**
  3 Fold CV Score: 
  Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 523, in runfile
  execfile(filename, namespace)
  File "C:\Users\Stergios\Documents\Python\beat_bench.py", line 100, in &lt;module&gt;
  main()
  File "C:\Users\Stergios\Documents\Python\beat_bench.py", line 97, in main
  print "3 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rd, X, y, cv=3, scoring='roc_auc'))
  File "C:\Python27\lib\site-packages\sklearn\cross_validation.py", line 1152, in cross_val_score
  for train, test in cv)
  File "C:\Python27\lib\site-packages\sklearn\externals\joblib\parallel.py", line 517, in __call__
  self.dispatch(function, args, kwargs)
  File "C:\Python27\lib\site-packages\sklearn\externals\joblib\parallel.py", line 312, in dispatch
  job = ImmediateApply(func, args, kwargs)
  File "C:\Python27\lib\site-packages\sklearn\externals\joblib\parallel.py", line 136, in __init__
  self.results = func(*args, **kwargs)
  File "C:\Python27\lib\site-packages\sklearn\cross_validation.py", line 1064, in _cross_val_score
  score = scorer(estimator, X_test, y_test)
  File "C:\Python27\lib\site-packages\sklearn\metrics\scorer.py", line 141, in __call__
  return self._sign * self._score_func(y, y_pred, **self._kwargs)
  File "C:\Python27\lib\site-packages\sklearn\metrics\metrics.py", line 403, in roc_auc_score
  fpr, tpr, tresholds = roc_curve(y_true, y_score)
  File "C:\Python27\lib\site-packages\sklearn\metrics\metrics.py", line 672, in roc_curve
  fps, tps, thresholds = _binary_clf_curve(y_true, y_score, pos_label)
  File "C:\Python27\lib\site-packages\sklearn\metrics\metrics.py", line 504, in _binary_clf_curve
  y_true, y_score = check_arrays(y_true, y_score)
  File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 233, in check_arrays
  _assert_all_finite(array)
  File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 27, in _assert_all_finite
  raise ValueError("Array contains NaN or infinity.")
  ValueError: Array contains NaN or infinity.
  </code></pre>
  
  <p>Any ideas? Thank you!!</p>