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?
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:
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.
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))
Tags und Links nlp scikit-learn tf-idf