2017-08-11 4 views
2

Question mise à jour: Je l'ai fait, mais j'obtiens le même résultat pour la précision et le rappel parce que j'utilise average = 'binary'?Obtention de la même valeur pour Precision and Recall (K-NN) en utilisant sklearn

mais quand je l'utilise en moyenne = 'macro' Je reçois ce message d'erreur:

test Un examen personnalisé messageC: \ Python27 \ lib \ site-packages \ sklearn \ métriques \ classification.py: 976 : DeprecationWarning: A partir de la version 0.18, l'entrée binaire ne sera pas traitée spécialement lors de l'utilisation de précision/rappel/F-score moyennés. S'il vous plaît utilisez average = 'binary' pour signaler uniquement les performances de la classe positive.
. Classe de performance positive », DeprecationWarning)

Voici mon code mis à jour:

path = 'opinions.tsv' 
data = pd.read_table(path,header=None,skiprows=1,names=['Sentiment','Review']) 
X = data.Review 
y = data.Sentiment 
#Using CountVectorizer to convert text into tokens/features 
vect = CountVectorizer(stop_words='english', ngram_range = (1,1), max_df = .80, min_df = 4) 
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=1, test_size= 0.2) 
#Using training data to transform text into counts of features for each message 
vect.fit(X_train) 
X_train_dtm = vect.transform(X_train) 
X_test_dtm = vect.transform(X_test) 




#Accuracy using KNN Model 
KNN = KNeighborsClassifier(n_neighbors = 3) 
KNN.fit(X_train_dtm, y_train) 
y_pred = KNN.predict(X_test_dtm) 
print('\nK Nearest Neighbors (NN = 3)') 



#Naive Bayes Analysis 
tokens_words = vect.get_feature_names() 
print '\nAnalysis' 
print'Accuracy Score: %f %%'% (metrics.accuracy_score(y_test,y_pred)*100) 
print "Precision Score: %f%%" % precision_score(y_test,y_pred, average='binary') 
print "Recall Score: %f%%" % recall_score(y_test,y_pred, average='binary') 

En utilisant le code ci-dessus, je reçois même valeur pour la précision et le rappel

Nous vous remercions de répondre à ma question, très apprécié.

Répondre

0

Pour calculer precision et recall métriques, vous devez importer les méthodes de sklearn.metrics selon.

Comme il est indiqué dans la documentation, leurs paramètres sont 1-d des tableaux de vrai et les étiquettes prédit:

from sklearn.metrics import precision_score 
from sklearn.metrics import recall_score 

y_true = [0, 1, 2, 0, 1, 2] 
y_pred = [0, 2, 1, 0, 0, 1] 

print('Calculating the metrics...') 

recision_score(y_true, y_pred, average='macro') 
>>> 0.22 

recall_score(y_true, y_pred, average='macro') 
>>> 0.33 
+0

Merci d'avoir répondu, mais j'ai encore quelques problèmes dans le calcul de la précision et de rappel, je reçois le même valeur pouvez-vous jeter un oeil à ma question mise à jour? très apprécié –

+0

Ce n'est pas un problème que vous receviez la même valeur pour les métriques de précision et de rappel. C'est juste une particularité de vos données. Pour ajouter, le message que vous recevez n'est pas une erreur, il indique que votre entrée est binaire, je. e. soit zéro ou un, vous devriez donc utiliser 'average = 'binary'' pour calculer la précision et rappeler les métriques. –