Ich denke, die Funktion TfidfVectorizer berechnet nicht korrekt den IDF-Faktor. Zum Beispiel Kopieren Sie den Code aus tf-idf feature weights using sklearn.feature_extraction.text.TfidfVectorizer:Berechnung von IDF mit TfidfVectorizer von sklearn.feature_extraction.text.TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["This is very strange",
"This is very nice"]
vectorizer = TfidfVectorizer(
use_idf=True, # utiliza o idf como peso, fazendo tf*idf
norm=None, # normaliza os vetores
smooth_idf=False, #soma 1 ao N e ao ni => idf = ln(N+1/ni+1)
sublinear_tf=False, #tf = 1+ln(tf)
binary=False,
min_df=1, max_df=1.0, max_features=None,
strip_accents='unicode', # retira os acentos
ngram_range=(1,1), preprocessor=None, stop_words=None, tokenizer=None, vocabulary=None
)
X = vectorizer.fit_transform(corpus)
idf = vectorizer.idf_
print dict(zip(vectorizer.get_feature_names(), idf))
Die Ausgabe lautet:
{u'is': 1.0,
u'nice': 1.6931471805599454,
u'strange': 1.6931471805599454,
u'this': 1.0,
u'very': 1.0}`
Aber sein sollte:
{u'is': 0.0,
u'nice': 0.6931471805599454,
u'strange': 0.6931471805599454,
u'this': 0.0,
u'very': 0.0}
es nicht? Was mache ich falsch?
Während der Berechnung der IDF, nach http://www.tfidf.com/ ist:
IDF(t) = log_e(Total number of documents/Number of documents with term t in it)
So wie die Begriffe 'this', 'ist' und 'sehr' in zwei Sätzen erscheinen, die IDF = log_e (2/2) = 0.
Die Begriffe 'seltsam' und 'nett' erscheinen nur in einem der beiden Dokumente, also log_e (2/1) = 0,69314.
Hallo Priscilla. Ich bin kein Python-Benutzer, aber können Sie klarstellen, was Sie vorhaben und auf welches Problem Sie gestoßen sind? Sie erhalten eher Antworten von Experten, wenn sie Ihr genaues Ziel verstehen, warum Sie es versuchen Um es zu erreichen, und warum die Ausgabe falsch ist. Viel Glück, eine Antwort zu bekommen, und willkommen zu Stack Overflow! –
Ich muss wirklich verstehen, was ich tun kann, um die richtigen Tf-IDF-Werte mit dieser Sklearn-Funktion zu erhalten, weil sie zurückkehren falsch –