Wie werden TTF-IDF vom scikit-learn TfidfVectorizer berechnet?

8

Ich führe den folgenden Code aus, um die Textmatrix in die TF-IDF-Matrix zu konvertieren.

%Vor%

Ich bekomme folgende Ausgabe

X_vovab =

%Vor%

und X_mat =

%Vor%

Jetzt verstehe ich nicht, wie diese Punkte berechnet werden. Meine Idee ist, dass für den Text [0] die Punktzahl für nur 'string' berechnet wird und es gibt eine Punktzahl in der 5. column. Aber wie TF_IDF ist das Produkt der Term-Frequenz, die 2 und IDF ist, die log (4/2) ist 1.39 und nicht 1.51 wie in der Matrix gezeigt. Wie wird der TF-IDF-Score in scikit-learn berechnet?

    
prashanth 01.05.2016, 11:16
quelle

2 Antworten

10

TF-IDF wird in mehreren Schritten von Scikit Learns TfidfVectorizer ausgeführt, der tatsächlich TfidfTransformer verwendet und CountVectorizer erbt.

Lassen Sie mich die Schritte zusammenfassen, die es macht, um es einfacher zu machen:

  1. tfs werden von CountVectorizers fit_transform ()
  2. berechnet
  3. idfs werden von TfidfTransformers fit ()
  4. berechnet
  5. tfidfs wird von TfidfTransformers transform ()
  6. berechnet

Sie können den Quellcode hier überprüfen .

Zurück zu Ihrem Beispiel. Hier ist die Berechnung, die für die Tfidf Gewicht für den 5. Begriff des Vokabulars durchgeführt wird, 1. Dokument (X_mat [0,4]):

Zuerst das tf für 'string', im ersten Dokument:

%Vor%

Zweitens, die IDF für 'string', mit Glättung aktiviert (Standardverhalten):

%Vor%

Und schließlich das tfidf-Gewicht für (Dokument 0, Merkmal 4):

%Vor%

Ich bemerkte, dass Sie die tfidf-Matrix nicht normalisieren wollten. Beachten Sie, dass die Normalisierung der Tfidf-Matrix ein gebräuchlicher und in der Regel empfohlener Ansatz ist, da die meisten Modelle erfordern, dass die Feature-Matrix (oder Design-Matrix) normalisiert wird.

TfidfVectorizer wird L-2 standardmäßig die Ausgabematrix als letzten Schritt der Berechnung normalisieren. Wenn es normalisiert wird, bedeutet dies, dass es nur zwischen 0 und 1 gewichtet ist.

    
Rabbit 01.05.2016, 21:38
quelle
3

Die genaue Berechnungsformel ist in Dokumente :

  

Die tatsächliche Formel, die für tf-idf verwendet wird, ist tf * (idf + 1) = tf + tf * idf, anstelle von tf * idf

und

  

Glätten Sie die IDF-Gewichte, indem Sie eine zu den Dokumenthäufigkeiten hinzufügen, so als ob ein zusätzliches Dokument gesehen würde, das jeden Ausdruck in der Sammlung genau einmal enthält.

Das bedeutet 1.51082562 wird als 1.51082562=1+ln((4+1)/(2+1))

erhalten     
Christian Hirsch 01.05.2016 12:24
quelle

Tags und Links