Eseguo il seguente codice per convertire la matrice di testo in matrice TF-IDF.Come vengono calcolati TF-IDF dallo scikit-learn TfidfVectorizer
text = ['This is a string','This is another string','TFIDF computation calculation','TfIDF is the product of TF and IDF']
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(max_df=1.0, min_df=1, stop_words='english',norm = None)
X = vectorizer.fit_transform(text)
X_vovab = vectorizer.get_feature_names()
X_mat = X.todense()
X_idf = vectorizer.idf_
ottengo il seguente output
X_vovab =
[u'calculation',
u'computation',
u'idf',
u'product',
u'string',
u'tf',
u'tfidf']
e X_mat =
([[ 0. , 0. , 0. , 0. , 1.51082562,
0. , 0. ],
[ 0. , 0. , 0. , 0. , 1.51082562,
0. , 0. ],
[ 1.91629073, 1.91629073, 0. , 0. , 0. ,
0. , 1.51082562],
[ 0. , 0. , 1.91629073, 1.91629073, 0. ,
1.91629073, 1.51082562]])
Ora Non capisco come questi punteggi vengono calcolati. La mia idea è che per il testo [0], il punteggio per solo 'stringa' sia calcolato e che ci sia un punteggio nella quinta colonna. Ma come TF_IDF è il prodotto della frequenza di termine che è 2 e IDF che è log (4/2) è 1,39 e non 1,51 come mostrato nella matrice. Come viene calcolato il punteggio TF-IDF in scikit-learn.
Questa è davvero una buona risposta !! Ho passato un'intera giornata a capirlo. @Rabbit puoi mostrare in questo esempio come viene applicata la normalizzazione? – Himadri