max_df y min_df con count vectorizer

Autor: | Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

Los límites max_df y min_df, es decir, los límites superior e inferior, pueden definirse como float (de 0.0 a 1.0) o como int:

  • float: frecuencia de repetición máxima/mínima.
  • int: número de repeticiones máximo/mínimo.

Veamos cómo poner en práctica estos conceptos de max_df y min_df por medio de un ejercicio de aplicación. Imagina que tenemos las siguientes oraciones:

  • ‘me gustan los perros’
  • ‘hay perros y perros’
  • ‘hay muchas razas de perros’

Las convertimos en un corpus al juntarlas y es con esas con las que trabajaremos los términos de max_df y min_df en el count vectorizer.

Ejercicio de max_df y min_df con count vectorizer

Con el max_df y min_df podemos establecer límites en cuanto a la frecuencia y al número de repeticiones que queremos tener en cuenta, de cara a la generación del vocabulario.

Hay dos formas de poner los límites, con float y con int. Si nuestra intención es ponerlo en float, debemos saber que este cuenta la frecuencia de repetición máxima o mínima que queremos. Esto es probabilidad, por lo que si decimos que queremos que el max df tenga una repetición mayor al 80%, proponemos que el max_df sea igual a 0.8.

Si queremos establecer, por ejemplo, solo como vocabulario los tokens que se repitan más de dos veces, proponemos que el min_df sea igual a dos. Si solo aparece una vez, de cara a hacer la representación, solo va a tener sentido en una de las frases del corpus, que es en la que aparece; en las demás siempre va a aparecer igual a cero. Esto, como sabemos, no tendría ningún tipo de valor.

#max_df y min_df con count vectorizer
vectorizer = CountVectorizer (max_df = 0.8, min_df = 2) #Jugar con los valores
X = vectorizer. fit _transform (corpus)
#max_df y min_df con count vectorizer
print (vectorizer. get_ feature_names ())

[‘hay’, ‘perros’]

#max_df y min_df con count vectorizer
doc_term_ matrix = pd.DataFrame (X.toarray (), columns = vectorizer.get_feature_names ())
doc_term_ matrix
hayperros
001
112
211

Entonces, podemos estar jugando con estos valores y decir que el min_df sea igual a 3:

#max_df y min_df con count vectorizer
vectorizer = CountVectorizer (max_df = 1.0, min_df = 3) #Jugar con los valores
X = vectorizer. fit _transform (corpus)
#max_df y min_df con count vectorizer
print (vectorizer. get_ feature_names ())

[‘perros’]

#max_df y min_df con count vectorizer
doc_term_ matrix = pd.DataFrame (X.toarray (), columns = vectorizer.get_feature_names ())
doc_term_ matrix
perros
01
12

Lo que vemos aquí es que la única palabra que tiene la máxima frecuencia con un número de repeticiones mayor que tres es «perros». ¿Esto tiene algún sentido? Pues evidentemente no, porque al final lo que vamos a obtener es un conteo de las veces que aparece la palabra «perros» en cada frase.

En este caso, hay que jugar un poco más con los parámetros. La palabra que más se repite, según el corpus, es «perros», que se repite cuatro veces; lo demás es un poco más limitado. Por ejemplo, la palabra «hay» se repite varias veces, entonces, si establecemos el límite del mínimo en 2 y vamos a generarlo, en este caso sí nos añadiría «hay» y «perros», palabras que tienen una frecuencia mayor a dos.

El dilema del max_df

Podríamos pensar, por ejemplo, que si ponemos un max_df menor a 1.0 nos quitaría las palabras que estén en ese límite y tengan mayor frecuencia. Esto no es tan simple, ya que lo que sucede es que se nos calcula la frecuencia de esa palabra respecto al corpus. Por tanto, si es una palabra que se repite mucho en comparación al resto de palabras que hay en el corpus, la quita.

¿Esto para qué sirve? Si no queremos hacer un filtrado en función del número de frecuencias, sino que queremos hacerlo a partir de la probabilidad respecto al resto de palabras, nos quitará las palabras que tengan una frecuencia mayor respecto al número que se indique en el max_df (por ejemplo 0.8 → 80%).

¿Quieres seguir avanzando?

Ahora que hemos visto cómo trabajar con el max_df y min_df, podemos seguir avanzando en nuestro proceso formativo. Para poder acceder a las opciones laborales del Big Data, uno de los mercados con mayor demanda y mejores salarios, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva adquirirás los conocimientos tanto teóricos como prácticos imprescindibles para abrirte paso en el mundillo tecnológico en pocos meses. ¡No dudes en dar el paso que transformará tu futuro y entra ya para pedir más información!

Artículos ms leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado