2017-02-01 3 views
0

Ich habe den folgenden Code geschrieben, um die Kosinusähnlichkeit zwischen einer Anzahl vorverarbeiteter Dokumente zu berechnen (Stoppwortentfernung, Stemming und Häufigkeit der Häufigkeits-inversen Dokumente).Berechnen der Kosinusähnlichkeit mit Python

print(X.shape) 
similarity = [] 
for each in X: 
    similarity.append(cosine_similarity(X[i:1], X)) 
    print(cosine_similarity(X[i:1], X)) 
    i = i+1 

Allerdings, wenn ich es laufen erhalte ich dieses:

(2235, 7791) 
[[ 1.   0.01490594 0.11752643 ..., 0.00941571 0.03652551 
    0.]] 
Traceback (most recent call last): 
    File "...", line 83, in <module> 
    similarity.append(cosine_similarity(X[i:1], X)) 
    File "/Users/.../anaconda/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 881, in cosine_similarity 
    X, Y = check_pairwise_arrays(X, Y) 
    File "/Users/.../anaconda/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 96, in check_pairwise_arrays 
    X = check_array(X, accept_sparse='csr', dtype=dtype) 
    File "/Users/.../anaconda/lib/python3.5/site-packages/sklearn/utils/validation.py", line 407, in check_array 
    context)) 
ValueError: Found array with 0 sample(s) (shape=(0, 7791)) while a minimum of 1 is required. 
[Finished in 56.466s] 
+2

Sie verwenden X [i: 1] innerhalb Ihrer Schleife. Wenn ich 1 erreiche, greifen Sie auf X [1: 1] zu, das eine leere Liste zurückgibt. Das verursacht den Fehler. –

+0

@DileepKumarPatchigolla Wie kann ich es dann tun? – user7347576

+0

Ich bin nicht vertraut mit der Kosinus-Ähnlichkeit. Kannst du mir ein Beispiel dafür geben, wie X aussieht, damit ich es ausprobieren kann? –

Antwort

0

Es ist nicht klar, was Sie erreichen wollen. Sie nehmen eine Kosinusähnlichkeit zwischen einer Scheibe der Matrix X und der gesamten Matrix. Das Segment ist leer, außer wenn i == 0. Ihre für Anweisung durchläuft die Matrix, aber Sie verwenden nie die Iterationsvariable jeweils.

Kosinusähnlichkeit ist eine Operation zwischen zwei Vektoren gleicher Länge. Zum Beispiel können Sie die Ähnlichkeit zwischen Zeile i berechnen und j mit

cosine_similarity(X[i], X[j]) 

Zeile Wenn Sie alle der Reihe zu Reihe Ähnlichkeiten in einer Liste berechnet wollen, verwenden Sie eine Liste Verständnis:

similarity = [cosine_similarity(a, b) for a in X for b in X] 

Macht Sie das in Bewegung?

Verwandte Themen