2015-10-27 1 views
1

Je suis très nouveau à Python. Je suis en train d'écrire une fonction qui fait ce qui suit, et réutiliser la fonction dans les prochaines parties du code: (ce que fait la fonction):Fonction ne retournant rien python

  • trouver le cosineValue entre les éléments de deux listes
  • add les valeurs à une liste et calcule la moyenne
  • append les valeurs moyennes à une liste
  • retour la liste des moyens

Je voudrais ensuite faire des calculs basés sur la liste tha t est renvoyé par la fonction ci-dessus. Cependant, la fonction (c'est-à-dire knearest_similarity (tfidf_datamatrix)) ne retourne rien. Les commandes d'impression de la seconde fonction (c'est-à-dire threshold_function()) ne montrent rien. Quelqu'un peut-il s'il vous plaît jeter un oeil sur le code et dites-moi ce que je fais mal.

def knearest_similarity(tfidf_datamatrix): 
    k_nearest_cosineMean = [] 
    for datavector in tfidf_datamatrix: 
     cosineValueSet = [] 
     for trainingvector in tfidf_vectorizer_trainingset: 
      cosineValue = cx(datavector, trainingvector) 
      cosineValueSet.append(cosineValue) 
     similarityMean_of_k_nearest_neighbours = np.mean(heapq.nlargest(k_nearest_neighbours, cosineValueSet)) #the cosine similarity score of top k nearest neighbours 
     k_nearest_cosineMean.append(similarityMean_of_k_nearest_neighbours)   
    print k_nearest_cosineMean 
    return k_nearest_cosineMean 


def threshold_function(): 
    mean_cosineScore_mean = np.mean(knearest_similarity(tfidf_matrix_testset)) 
    std_cosineScore_mean = np.std(knearest_similarity(tfidf_matrix_testset)) 
    threshold = mean_cosineScore_mean - (3*std_cosineScore_mean) 
    print "The Mean of the mean of cosine similarity score for a normal Behaviour:", mean_cosineScore_mean #The mean will be used for finding the threshold 
    print "The standard deviation of the mean of cosine similarity score:", std_cosineScore_mean #The standstart deviation is also used to find threshold 
    print "The threshold for normal behaviour should be (Mean - 3*standard deviation):", threshold 
    return threshold 

EDIT

J'ai essayé de définir deux variables globales pour les fonctions à utiliser (à savoir tfidf_vectorizer_trainingset et tfidf_matrix_testset).

#fitting tfidf transfrom for training data 
tfidf_vectorizer_trainingset = tfidf_vectorizer.fit_transform(readfile(trainingdataDir)).toarray() 

#tfidf transform the test set based on the training set 
tfidf_matrix_testset = tfidf_vectorizer.transform(readfile(testingdataDir)).toarray(). 

Cependant, les commandes d'impression dans threshold_function() apparaissent comme ci-dessous:

The Mean of the mean of cosine similarity score for a normal Behaviour: nan 
The standard deviation of the mean of cosine similarity score: nan 
The threshold for normal behaviour should be (Mean - 3*standard deviation): nan 

EDIT2 J'ai trouvé que la première valeur dans la k_nearest_cosineMean était nan. Après avoir supprimé la valeur, j'ai réussi à obtenir des calculs valides.

+0

Lorsque vous dites que "les commandes d'impression ... ne montrent rien", voulez-vous littéralement dire que rien n'est imprimé ou que ce qui est imprimé ne contient pas les chiffres que vous voulez? Il serait plus facile pour les autres de vous aider si vous pouviez fournir une [mcve] et des informations spécifiques sur ce que vous attendez de voir par rapport à ce que vous voyez réellement. –

Répondre

3

Je la première ligne de threshold_function() vous appelez knearest_similarity(tfidf_matrix_testset) mais vous ne définissez jamais ce que tfidf_matrix_testset est. Vous faites cela dans la deuxième ligne aussi. Dans la troisième ligne, vous utilisez la sortie de la deuxième ligne. Donnez tfidf_matrix_testset une valeur.

+0

Merci, quand je lui donne des valeurs comme variables globales, _threshold_function() _ ne me donne toujours rien. Je reçois les valeurs 'nan' pour mean_cosineScore_mean, std_cosineScore_mean et threshold. – SSF

+0

en fait vous aviez raison. Je devais lui donner une valeur. bien qu'il y ait une valeur 'nan' dans le 'k_nearest_cosineMean' qui causait le problème avec un résultat de calcul invalide. Ça semble fonctionner maintenant. Merci encore. – SSF