I'm trying to use TF-IDF para clasificar documentos en categorías. He calculado el tf_idf para algunos documentos, pero ahora cuando intento para calcular el coseno similitud entre dos de estos documentos que recibo un dicho rastreo:Coseno ¿Similitud de vectores de diferentes longitudes?
#len(u)==201, len(v)==246
cosine_distance(u, v)
ValueError: objects are not aligned
#this works though:
cosine_distance(u[:200], v[:200])
>> 0.52230249969265641
está rebanando el vector de modo que len (u) == len (v) el enfoque correcto? Yo pensaría que la similitud del coseno funcionaría con vectores de diferentes longitudes.
estoy usando this function:
def cosine_distance(u, v):
"""
Returns the cosine of the angle between vectors v and u. This is equal to
u.v/|u||v|.
"""
return numpy.dot(u, v)/(math.sqrt(numpy.dot(u, u)) * math.sqrt(numpy.dot(v, v)))
También - es el orden de los valores tf_idf en los vectores importantes? ¿Deberían ordenarse, o no tiene importancia para este cálculo?
Los vectores que estoy pasando a la función cosine_distance son listas de Python de los valores tf_idf. v [5] == [,0060830126968545294, ,00048241996565891193, ,0020712248617478965, ,0110036199241575, ,0110036199241575] Usted dice que el orden importa - ¿cuál es la forma correcta de ordenar el contenido del vector (smallest-> grande, orden de palabras en el documento?) – erikcw
Tiene que asignar un orden global a las palabras. Si la barra aparece antes de foo en doc2, entonces el valor tf_idf de la barra debe seguir siendo el primer elemento. – Pace