Bosque aleatorio práctico con Python: hacia la IA

Estás leyendo la publicación: Bosque aleatorio práctico con Python: hacia la IA

Publicado originalmente en Hacia la IA, la empresa líder mundial en noticias y medios de IA y tecnología. Si está creando un producto o servicio relacionado con la IA, lo invitamos a considerar convertirse en patrocinador de la IA. En Hacia la IA, ayudamos a escalar las empresas emergentes de IA y tecnología. Permítanos ayudarlo a dar rienda suelta a su tecnología a las masas.

Una guía práctica sobre cómo implementar bosques aleatorios con la técnica de búsqueda en cuadrícula usando scikit-learn.

Un modelo puede hacer una predicción incorrecta. Pero si combina las predicciones de varios modelos en uno, puede hacer mejores predicciones. Este concepto se llama aprendizaje conjunto. Los conjuntos son métodos que combinan múltiples modelos para construir modelos más potentes. Los métodos de conjunto han ganado gran popularidad durante la última década. Hay dos modelos de conjuntos esenciales basados ​​en árboles de decisión: bosque aleatorio y aumento de gradiente. En esta publicación, hablaré sobre los siguientes temas,

  • ¿Qué es un bosque aleatorio?
  • Algunas ventajas y desventajas de los bosques aleatorios
  • ¿Cómo implementar un bosque aleatorio con un conjunto de datos del mundo real?

¡Vamos a sumergirnos!

Academia Tirendaz

¿Qué es el bosque aleatorio?

Random Forest es un algoritmo de aprendizaje automático supervisado que se usa ampliamente en problemas de clasificación y regresión. Puede pensar en un bosque aleatorio como un conjunto de árboles de decisión. Los modelos de árboles de decisión tienden a sobreajustar los datos de entrenamiento. Puede superar el problema de sobreajuste utilizando un bosque aleatorio.

Para implementar un bosque aleatorio, debe crear muchos árboles de decisión. El bosque aleatorio consta de una colección de árboles de decisión. Cada árbol en un bosque aleatorio es ligeramente diferente de los demás. Estos árboles se seleccionan de un subconjunto diferente de características. Tenga en cuenta que estas características se seleccionan al azar. Al hacer la predicción final, se combinan las predicciones de todos los árboles y se promedian estas predicciones. Dado que usa muchos árboles, puede reducir la cantidad de sobreajuste.

Algunas ventajas de los bosques aleatorios

Echemos un vistazo a algunas ventajas del bosque aleatorio.

  • Puede usar bosques aleatorios para tareas de clasificación y regresión.
  • Los bosques aleatorios a menudo funcionan bien sin un gran ajuste de los hiperparámetros.
  • No es necesario escalar los datos.
  • Los bosques aleatorios pueden proporcionar una mayor precisión que los árboles de decisión, ya que solucionan el problema del sobreajuste.

Algunas desventajas de los bosques aleatorios

Hay algunas desventajas de los bosques aleatorios. Echemos un vistazo a estas desventajas.

  • Los bosques aleatorios no se pueden realizar bien en datos muy dimensionales y dispersos, como los datos de texto.
  • Los bosques aleatorios no son fáciles de interpretar, ya que utilizan un árbol más profundo que los árboles de decisión.
🔥 Recomendado:  10 formas de mejorar su producción de contenido con la automatización de IA

Así que viste algunas ventajas y desventajas de los bosques aleatorios. Ahora avancemos y echemos un vistazo a cómo implementar un bosque aleatorio con scikit learn.

¿Cómo implementar Random Forest con Scikit-Learn?

Para mostrar cómo implementar un bosque aleatorio, usaré los conjuntos de datos de Wisconsin sobre el cáncer de mama. Antes de cargar el conjunto de datos, déjame importar pandas.

importar pandas como pd

Carguemos el conjunto de datos.

df = pd.read_csv(“cáncer_de_mama_wisconsin.csv”)

Puede encontrar el cuaderno y el conjunto de datos aquí. Echemos un vistazo a las primeras cinco filas del conjunto de datos.

df.cabeza()

Este conjunto de datos consta de muestras de células tumorales malignas y benignas. La primera columna del conjunto de datos muestra los números de identificación únicos y la segunda columna muestra los diagnósticos, digamos que M indica maligno y B indica benigno. El resto de las columnas son nuestras características. Echemos un vistazo a la forma del conjunto de datos.

df.forma #Salida:
(569, 33)

Preprocesamiento de datos

El preprocesamiento de datos es una de las etapas más importantes del análisis de datos. Ahora, vamos a crear las variables de entrada y salida. Para hacer esto, voy a usar el método loc. Primero, déjame crear nuestra variable objetivo.

y = df.loc[:,”diagnosis”].valores

Vamos a crear nuestra variable de función y eliminar las columnas innecesarias. Para hacer esto, voy a usar el método drop.

X = df.drop([“diagnosis”,”id”,”Unnamed: 32″],eje=1).valores

Tenga en cuenta que nuestra variable de destino tiene dos categorías, M y B. Codifiquemos la variable de destino con un codificador de etiquetas. Primero, voy a importar esta clase.

de sklearn.preprocessing importar LabelEncoder

Ahora, voy a crear un objeto de esta clase.

le = LabelEncoder()

Ajustemos y transformemos nuestra variable objetivo.

y = le.fit_transform(y)

Antes de construir el modelo, dividamos el conjunto de datos en conjuntos de entrenamiento y de prueba. Para hacer esto, usaré la función train_test_split. Primero, déjame importar esta función.

de sklearn.model_selection import train_test_split

Dividamos nuestro conjunto de datos usando esta función.

X_tren,X_prueba,y_tren,y_prueba=tren_prueba_dividir(X, y,
estratificar=y,
estado_aleatorio=0)

Fresco. Nuestros conjuntos de datos están listos para analizar.

Construcción de un modelo de bosque aleatorio

Para usar un bosque aleatorio en Scikit-Learn, necesitamos importar RandomForestClassifier desde el módulo de conjunto. Primero, importemos esta clase.

de sklearn.ensemble importar RandomForestClassifier

Ahora, voy a crear un objeto de esta clase. Aquí, solo voy a usar valores predeterminados

rf = RandomForestClassifier (estado_aleatorio = 0)

A continuación, construyamos nuestro modelo. Para hacer esto, usaré el método de ajuste con el conjunto de entrenamiento.

rf.fit(tren_X, tren_y)

Impresionante. Nuestro modelo está listo para predecir. Evaluemos nuestro modelo usando el conjunto de entrenamiento y prueba.

y_tren_pred = rf.predict(X_tren)
y_test_pred = rf.predict(X_test)

Ahora, echemos un vistazo al rendimiento de nuestro modelo en conjuntos de datos. Para hacer esto, voy a usar la función precision_score. Primero, déjame importar esta función.

de sklearn.metrics importar precision_score

🔥 Recomendado:  TikTok Video Dimensiones 2023: Según TikTok

Después de eso, echemos un vistazo a las puntuaciones de precisión para el conjunto de entrenamiento y prueba.

rf_tren = precisión_puntuación(y_tren, y_tren_pred)
rf_test = precision_score(y_test, y_test_pred)

Ahora, imprimamos estas partituras.

print(f’Precisión de prueba/tren de bosque aleatorio: {rf_train: .3f}/{rf_test:.3f}’) #Salida:
Precisión de prueba/tren forestal aleatorio: 1.000/0.958

Impresionante, las partituras fueron impresas. Como puede ver, la puntuación en el conjunto de entrenamiento es del 100 % y la puntuación en el conjunto de prueba es del 95 %. Esto significa que el modelo tiene un problema de sobreajuste. Tenga en cuenta que este modelo de bosque aleatorio aprendió muy bien el conjunto de entrenamiento. Entonces, simplemente memorizó el resultado. Pero, el modelo no puede generalizar. Para superar el problema de sobreajuste, controlamos la complejidad del modelo.

Ajuste de hiperparámetros con búsqueda en cuadrícula

Para la complejidad del modelo, necesitamos ajustar el modelo usando diferentes parámetros. Para hacer esto, voy a usar la técnica de búsqueda en cuadrícula. La búsqueda en cuadrícula es una técnica de optimización de hiperparámetros modelo. En scikit-learn, esta técnica se proporciona en la clase GridSearchCV. Importemos esta clase.

de sklearn.model_selection importar GridSearchCV

Ahora, voy a crear un objeto de RandomForestClassifier para usarlo en la búsqueda de cuadrícula.

rf = RandomForestClassifier (estado_aleatorio = 42)

Al construir la clase GridSearchCV, debe proporcionar un diccionario de hiperparámetros para evaluar el argumento param_grid. Este es un mapa del nombre del parámetro del modelo y una matriz de valores para probar. Ahora, permítanme crear una variable de parámetros que contenga los valores de los parámetros.

parámetros = {‘máx_profundidad’:[5,10,20](1)
‘n_estimadores’:[i for i in range(10, 100, 10)](2)
‘min_muestras_hoja2:[i for i in range(1, 10)](3)
‘criterio’ :[‘gini’, ‘entropy’](4)
‘max_features’: [‘auto’, ‘sqrt’, ‘log2’]} (5)

(1) La profundidad máxima del árbol. Si es Ninguno, los nodos se expanden hasta que todas las hojas sean puras o hasta que todas las hojas contengan menos de min_samples_split samples.

(2) Para construir un modelo de bosque aleatorio, debe decidir la cantidad de árboles. Aquí, voy a crear los valores para el parámetro n_estimators. n_estimadores especifican el número de árboles en el bosque. Para este parámetro, estoy acostumbrado al bucle en la lista.

(3) El parámetro min_leaf_size se usa para especificar el número mínimo de muestras en un nodo hoja. Para este parámetro, utilicé de nuevo la lista de loop-in.

(4) Usé dos parámetros para el parámetro de criterio.

(5) Por último, configuro cómo seleccionar las funciones. Tenga en cuenta que un parámetro crítico en la técnica de bosque aleatorio es max_features. Utilice este parámetro cuando busque la mejor división.

Así, especificamos los valores de los parámetros. Para encontrar los mejores parámetros, voy a crear un objeto de GridSearch.

clf = GridSearchCV(rf, parámetros, n_jobs= -1)

A continuación, ajustaré nuestro modelo con el conjunto de entrenamiento.

clf.fit(tren_X, tren_y)

Finalmente, para ver los mejores parámetros, usaré best_params_attribute.

🔥 Recomendado:  La gente también pregunta al SEO: cómo optimizar & Clasificación para consultas relacionadas con PAA

imprimir(clf.best_params_) #Salida:
{‘criterio’: ‘entropía’, ‘max_ depth’: 5, ‘max_features’: ‘log2’, ‘min_samples_leaf’: 3, ‘n_estimators’: 10}

Cuando ejecutamos esta celda, se pueden ver los mejores parámetros.

Evaluación del modelo de bosque aleatorio

Ahora, voy a predecir los valores del conjunto de entrenamiento y prueba. Tenga en cuenta que no necesitamos entrenar nuestro modelo nuevamente. Porque después de encontrar los mejores parámetros, el modelo se entrena con estos parámetros. Entonces puede usar directamente el modelo clf para la predicción. Predigamos los valores con este modelo.

y_tren_pred=clf.predict(X_tren)
y_test_pred=clf.predict(X_test)
rf_tren = precisión_puntuación(y_tren, y_tren_pred)
rf_test = precision_score(y_test, y_test_pred)
print(f’Precisión de prueba/tren de bosque aleatorio: {rf_train: .3f}/{rf_test:.3f}’) #Salida:
Precisión de prueba/tren forestal aleatorio: 0,993/0,965

Las puntuaciones de precisión se imprimieron de acuerdo con los mejores parámetros. El rendimiento del modelo es mejor tanto en el conjunto de entrenamiento como en el de prueba. Observe que la puntuación de nuestro modelo en el conjunto de entrenamiento está cerca de la puntuación en el conjunto de prueba. Además, ambos puntajes de precisión están cerca de 1. Por lo tanto, hemos encontrado los mejores parámetros y predicho los valores del conjunto de entrenamiento y prueba.

Conclusión

En esta publicación, hablé sobre el bosque aleatorio y cómo implementar esta técnica con scikit learn. Un bosque aleatorio consta de múltiples árboles de decisión. Este método promedia los resultados de todos los árboles para generar un modelo. Entonces puede superar el problema de sobreajuste con este enfoque. Puede realizar tareas de clasificación y regresión con este método. Eso es todo. Gracias por leer. Espero que lo disfruten.

Por favor, no olvides seguirnos en YouTube | GitHub | Gorjeo | Kaggle | LinkedIn.

Si esta publicación fue útil, haga clic en aplaudir. botón de abajo un par de veces para mostrarme su apoyo?


Hands-on Random Forest with Python se publicó originalmente en Towards AI en Medium, donde las personas continúan la conversación destacando y respondiendo a esta historia.

Publicado a través de Hacia la IA