title: Problems obtaining most informative features with scikit learn?
body: <p>Im triying to obtain the most informative features from a <a href="http://pastebin.com/3qYc9mfZ" rel="noreferrer">textual corpus</a>. From this well answered <a href="https://stackoverflow.com/questions/26976362/how-to-get-most-informative-features-for-scikit-learn-classifier-for-different-c">question</a> I know that this task could be done as follows:</p>
  
  <pre><code>def most_informative_feature_for_class(vectorizer, classifier, classlabel, n=10):
      labelid = list(classifier.classes_).index(classlabel)
      feature_names = vectorizer.get_feature_names()
      topn = sorted(zip(classifier.coef_[labelid], feature_names))[-n:]
  
      for coef, feat in topn:
          print classlabel, feat, coef
  </code></pre>
  
  <p>Then:</p>
  
  <pre><code>most_informative_feature_for_class(tfidf_vect, clf, 5)
  </code></pre>
  
  <p>For this classfier:</p>
  
  <pre><code>X = tfidf_vect.fit_transform(df['content'].values)
  y = df['label'].values
  
  
  from sklearn import cross_validation
  X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,
                                                      y, test_size=0.33)
  clf = SVC(kernel='linear', C=1)
  clf.fit(X, y)
  prediction = clf.predict(X_test)
  </code></pre>
  
  <p>The problem is the output of <code>most_informative_feature_for_class</code>:</p>
  
  <pre><code>5 a_base_de_bien bastante   (0, 2451)   -0.210683496368
    (0, 3533) -0.173621065386
    (0, 8034) -0.135543062425
    (0, 10346)    -0.173621065386
    (0, 15231)    -0.154148294738
    (0, 18261)    -0.158890483047
    (0, 21083)    -0.297476572586
    (0, 434)  -0.0596263855375
    (0, 446)  -0.0753492277856
    (0, 769)  -0.0753492277856
    (0, 1118) -0.0753492277856
    (0, 1439) -0.0753492277856
    (0, 1605) -0.0753492277856
    (0, 1755) -0.0637950312345
    (0, 3504) -0.0753492277856
    (0, 3511) -0.115802483001
    (0, 4382) -0.0668983049212
    (0, 5247) -0.315713152154
    (0, 5396) -0.0753492277856
    (0, 5753) -0.0716096348446
    (0, 6507) -0.130661516772
    (0, 7978) -0.0753492277856
    (0, 8296) -0.144739048504
    (0, 8740) -0.0753492277856
    (0, 8906) -0.0753492277856
    : :
    (0, 23282)    0.418623443832
    (0, 4100) 0.385906085143
    (0, 15735)    0.207958503155
    (0, 16620)    0.385906085143
    (0, 19974)    0.0936828782325
    (0, 20304)    0.385906085143
    (0, 21721)    0.385906085143
    (0, 22308)    0.301270427482
    (0, 14903)    0.314164150621
    (0, 16904)    0.0653764031957
    (0, 20805)    0.0597723455204
    (0, 21878)    0.403750815828
    (0, 22582)    0.0226150073272
    (0, 6532) 0.525138162099
    (0, 6670) 0.525138162099
    (0, 10341)    0.525138162099
    (0, 13627)    0.278332617058
    (0, 1600) 0.326774799211
    (0, 2074) 0.310556919237
    (0, 5262) 0.176400451433
    (0, 6373) 0.290124806858
    (0, 8593) 0.290124806858
    (0, 12002)    0.282832270298
    (0, 15008)    0.290124806858
    (0, 19207)    0.326774799211
  </code></pre>
  
  <p>It is not returning the label nor the words. Why this is happening and how can I print the words and the labels?. Do you guys this is happening since I am using pandas to read the data?. Another thing I tried is the following, form this <a href="https://stackoverflow.com/questions/11116697/how-to-get-most-informative-features-for-scikit-learn-classifiers">question</a>:</p>
  
  <pre><code>def print_top10(vectorizer, clf, class_labels):
      """Prints features with the highest coefficient values, per class"""
      feature_names = vectorizer.get_feature_names()
      for i, class_label in enumerate(class_labels):
          top10 = np.argsort(clf.coef_[i])[-10:]
          print("%s: %s" % (class_label,
                " ".join(feature_names[j] for j in top10)))
  
  
  print_top10(tfidf_vect,clf,y)
  </code></pre>
  
  <p>But I get this traceback:</p>
  
  <p>Traceback (most recent call last):</p>
  
  <pre><code>  File "/Users/user/PycharmProjects/TESIS_FINAL/Classification/Supervised_learning/Final/experimentos/RBF/SVM_con_rbf.py", line 237, in &lt;module&gt;
      print_top10(tfidf_vect,clf,5)
    File "/Users/user/PycharmProjects/TESIS_FINAL/Classification/Supervised_learning/Final/experimentos/RBF/SVM_con_rbf.py", line 231, in print_top10
      for i, class_label in enumerate(class_labels):
  TypeError: 'int' object is not iterable
  </code></pre>
  
  <p>Any idea of how to solve this, in order to get the features with the highest coefficient values?.</p>