2016-12-30 3 views
-1

Existe-t-il un moyen simple d'afficher les principales fonctionnalités de chaque classe? Basé sur tfidf? J'utilise Kfeighbors classifer, SVC-Linear, Multinomial NB.Scikit learn-Classification

Deuxièmement, j'ai cherché un moyen de voir les documents qui n'ont pas été classés correctement? Je peux voir la matrice de confusion mais j'aimerais voir des documents spécifiques pour voir quelles sont les caractéristiques qui causent la mauvaise classification.

classifier = SVC(kernel='linear') 
counts = tfidf_vectorizer.fit_transform(data['text'].values).toarray() 
targets = data['class'].values 
classifier.fit(counts, targets) 
counts = tfidf_vectorizer.fit_transform(test['text'].values).toarray() 
predictions = classifier.predict(counts) 

EDIT: J'ai ajouté l'extrait de code où je crée seulement une vectorisation de TFIDF et l'utiliser pour entraînment le classificateur.

+0

S'il vous plaît montrer du code, afin que nous puissions évaluer s'il est possible de vous fournir la réponse que vous recherchez. –

+0

http://stackoverflow.com/help/how-to-ask –

Répondre

0

Comme les commentaires précédents le suggèrent, une question plus précise résulterait en une meilleure réponse, mais j'utilise ce paquet tout le temps donc je vais essayer d'aider.

I. La détermination des principales caractéristiques des classes de classification dans sklearn dépend vraiment de l'outil que vous utilisez. Par exemple, de nombreuses méthodes d'ensemble (telles que RandomForestClassifier et GradientBoostingClassifer) sont associées à l'attribut .feature_importances_ qui permet de marquer chaque entité en fonction de son importance. En revanche, la plupart des modèles linéaires (comme LogisticRegression ou RidgeClassifier) ont une pénalité de régularisation qui pénalise la taille des coefficients, ce qui signifie que les tailles des coefficients reflètent quelque peu l'importance des caractéristiques (bien qu'il faille garder à l'esprit les échelles numériques) accessible à l'aide de l'attribut .coef_ de la classe de modèle. En résumé, presque tous les modèles sklearn ont une méthode pour extraire les importances de caractéristiques, mais les méthodes sont différentes d'un modèle à l'autre. Heureusement, la documentation de sklearn est FANTASTIQUE donc je lirais sur votre modèle spécifique pour déterminer votre meilleure approche. Assurez-vous également de lire le User Guide associé à votre type de problème en plus de l'API spécifique au modèle.

II. Il n'y a pas de méthode Sklearn prête à l'emploi pour fournir les enregistrements mal classés mais si vous utilisez un DataFrame pandas (ce que vous devriez) pour alimenter le modèle, il peut être accompli en quelques lignes de code comme ceci.

import pandas as pd 
from sklearn.linear_model import RandomForestClassifier 

df = pd.DataFrame(data) 
x = df[[<list of feature columns>]] 
y = df[<target column>] 

mod = RandomForestClassifier() 
mod.fit(x.values, y.values) 

df['predict'] = mod.predict(x.values) 

incorrect = df[df['predict']!=df[<target column>]] 

La incorrect résultante dataframe contiendra uniquement les enregistrements qui sont mal classés.

Espérons que cela aide!

+0

Et cela a vraiment aidé. – someone