Nuestro equipo de redactores ha estado por horas investigando para dar respuesta a tus interrogantes, te compartimos la respuestas y nuestro deseo es resultarte de mucha ayuda.
Solución:
TF-IDF se realiza en varios pasos mediante TfidfVectorizer de Scikit Learn, que de hecho usa TfidfTransformer y hereda CountVectorizer.
Permítanme resumir los pasos que realiza para que sea más sencillo:
- tfs se calculan mediante fit_transform() de CountVectorizer
- Los idf se calculan mediante el ajuste de TfidfTransformer ()
- tfidfs son calculados por transform() de TfidfTransformer
Puedes consultar el código fuente aquí.
Volvamos a tu ejemplo. Aquí está el cálculo que se hace para el peso tfidf para el 5to término del vocabulario, 1er documento (X_mat[0,4]):
Primero, la tf para ‘string’, en el 1er documento:
tf = 1
En segundo lugar, el idf para ‘string’, con suavizado habilitado (comportamiento predeterminado):
df = 2
N = 4
idf = ln(N + 1 / df + 1) + 1 = ln (5 / 3) + 1 = 1.5108256238
Y finalmente, el peso tfidf para (documento 0, función 4):
tfidf(0,4) = tf * idf = 1 * 1.5108256238 = 1.5108256238
Noté que eliges no normalizar la matriz tfidf. Tenga en cuenta que la normalización de la matriz tfidf es un enfoque común y generalmente recomendado, ya que la mayoría de los modelos requerirán la normalización de la matriz de características (o matriz de diseño).
TfidfVectorizer L-2 normalizará la matriz de salida de forma predeterminada, como paso final del cálculo. Tenerlo normalizado significa que solo tendrá pesos entre 0 y 1.
La fórmula de cálculo precisa se proporciona en los documentos:
La fórmula real utilizada para tf-idf es tf * (idf + 1) = tf + tf * idf, en lugar de tf * idf
y
Suavice los pesos de idf agregando uno a las frecuencias de los documentos, como si se viera un documento adicional que contiene todos los términos de la colección exactamente una vez.
Eso significa 1.51082562
se obtiene como 1.51082562=1+ln((4+1)/(2+1))