Detección de género para nombres de personas (2)

Aprovechando las vacaciones y que ahora tengo una mejor idea de clasificadores automáticos, actualicé mi programa que indica si el nombre de una persona es de género masculino o femenino. Cambié la forma de representar los datos, el algoritmo de clasificación y la librería que utilizaba para implementarlo. El nuevo clasificador comete menos errores y es más facil de modificar.

Primero, la representación de los datos es muy sencilla: se basa en las últimas letras de cada nombre. Concretamente, por cada nombre se extraen tres partes que corresponden a la última, 4 últimas y cinco últimas letras. Por ejemplo, Daniel se representa como una secuencia de tres elementos: “l”, “niel” y “aniel”. Para nombres compuestos (como Manuel Darío) se hace lo mismo para cada nombre. Esta fue la combinación con la cual el clasificador obtuvo mejores resultados durante las pruebas.

Segundo, reemplacé el clasificador bayesiano (naïve bayes) por regresión logística, de nuevo, porque obtuve mejores resultados, y ahora utilizo la implementación de scikit-learn, mi librería favorita para mis proyectos de machine learning. En cuanto a los resultados, el nuevo clasificador pasó de 252 errores a 121 en los datos de prueba (alrededor de 14.000 nombres). En una serie de datos adicionales, el anterior clasificador cometía 255 errores, mientras que la nueva versión comete 132.

Creo que los resultados son bastante buenos, especialmente teniendo en cuenta la simplicidad del modelo. Me gustaría comparar los resultados usando árboles de decisión y AdaBoost, como me lo sugirieron en un comentario a la primera versión. Sin embargo, primero tengo que hacer unas modificaciones para usar las implementaciones de la librería. Espero trabajar en eso durante estos días, aunque este proyecto no es más que un juguete poco útil, quiero utilizar más y contribuir a scikit-learn.