Implementación de un clasificador Random Forest en Python

0
278

Recientemente empecé a escribir sobre Machine Learning aquí en Panama Hitek. Ya he construído una sección especial con publicaciones sobre este tema.

Empecé escribiendo sobre un algoritmo de clasificación de imágenes de números manuscritos basado en un Support Vector Machine. Lo que haré en este post será repetir el procedimiento de ese post, pero utilizando un clasificador Random Forest disponible en la librería Sklearn en Python.

El algoritmo Random Forest es uno de los más populares en cuanto a Machine Learning en la actualidad, o al menos así lo creo yo. Siento que últimamente una gran parte de los papers que he estado leyendo en cuanto a Machine Learning utilizan el algoritmo Random Forest, el cual normalmente se destaca con respecto a otros. Al menos en las tareas en los cuales he visto que lo han estado utilizando.

Una vez más, este será un post meramente técnico sin entrar mucho en la teoría de como funciona el algoritmo de clasificación Random Forest. Ese es un tema que debería desarrollar en un post dedicado a tal propósito. Por ahora lo que haré será compartir un script con un clasificador Random Forest, utilizarlo con el dataset MNIST y evaluar el performance del algoritmo con respecto al Support Vector Machine de mi post anterior.

El siguiente script está disponible en nuestro repositorio en Github:

El resultado de la ejecución de este script es el siguiente:

Aunque la eficiencia de este algoritmo es menor que la que obtuvimos con el Support Vector Machine (97.84%), el tiempo de entrenamiento es mucho menor (38 segundos vs. 173 segundos). El tiempo de pruebas es de 106 segundos, más o menos el mismo tiempo que el algoritmo SVM con un kernel RBF (104 segundos), que fue el algoritmo que presentó el mejor performance en el post anterior.

Esta es una de las razones por las cuales el algoritmo Random Forest es tan popular. Presenta un buen performance en tareas de clasificación de datasets con grandes cantidades de datos y el tiempo de ejecución es bastante rápido en comparación a otros algoritmos de clasificación.

Optimización de parámetros

En el algoritmo de clasificación Random Forest es posible configurar distintos parámetros que pueden mejorar el performance del algoritmo a cambio de un mayor tiempo de entrenamiento y clasificación. En el caso de la librería Sklearn, estos son los parámetros del clasificador en cuestión:

class sklearn.ensemble.RandomForestClassifier(n_estimators=100*criterion=‘gini’max_depth=Nonemin_samples_split=2min_samples_leaf=1min_weight_fraction_leaf=0.0max_features=‘sqrt’max_leaf_nodes=Nonemin_impurity_decrease=0.0bootstrap=Trueoob_score=Falsen_jobs=Nonerandom_state=Noneverbose=0warm_start=Falseclass_weight=Noneccp_alpha=0.0max_samples=None)

Podemos probar modificando todos esos valores para obtener mejores resultados. Por ejemplo, al utilizar 200 estimadores, en vez de los 100 que se utilizan por default, el resultado es el siguiente:

Utilizando 300 estimadores, este es el resultado:

Vemos que se redujo el performance y aumentaron los tiempos de prueba y de entrenamiento, por lo cual no podemos decir que con solo aumentar la cantidad de estimadores es igual a mejorar el rendimiento.

Se pueden probar distintas combinaciones de parámetros para este algoritmo, pero ese es un tema que abordaré en detalle en un post dedicado a ello. Por lo pronto concluimos que el algoritmo Random Forest es bastante eficiente en cuanto a precisión y tiempo de procesamiento.

Probando el clasificador Random Forest con mi propia escritura

Hace unos días escribí un post en el que probé el clasificador basado en el Support Vector Machine con mis propios números manuscritos. En esta sección probaré el clasificador Random Forest con mis propios números. El script es el siguiente:

El resultado obtenido es:

El mismo inconveniente que con el Support Vector Machine, la imposibilidad de reconocer el 7 y el 9. Los resultados no mejoraron utilizando más estimadores, ni tampoco con el procesamiento que describimos en el post en el que probamos el SVM.

Por lo pronto, esto es todo lo que quiero compartir sobre el clasificador Random Forest. Logramos un procesamiento más rápido, con un performance comparable al del SVM. Seguimos teniendo problemas con la clasificación de mis números manuscritos y nos queda pendiente explicar en detalle en qué consiste el algoritmo Random Forest desde el punto de vista matemático y la explicación de cómo escoger los mejores parámetros para el clasificador a través de un procedimiento de Cross Validation.

Espero que esta información les sea útil. Cualquier duda o comentario me lo pueden hacer llegar a través de la caja de comentarios.

 

5 2 votes
Article Rating
Suscríbete
Notify of
guest

0 Comments
Inline Feedbacks
View all comments