Algoritmos de clasificación: bosque aleatorio

Introducción

El bosque aleatorio es un algoritmo de aprendizaje supervisado que se utiliza tanto para clasificación como para regresión. Sin embargo, se utiliza principalmente para problemas de clasificación. Como sabemos, un bosque está formado por árboles y más árboles significa un bosque más robusto. De manera similar, el algoritmo de bosque aleatorio crea árboles de decisión sobre muestras de datos y luego obtiene la predicción de cada uno de ellos y finalmente selecciona la mejor solución mediante votación. Es un método de conjunto que es mejor que un árbol de decisión único porque reduce el sobreajuste al promediar el resultado.

Trabajo del algoritmo de bosque aleatorio

Podemos entender el funcionamiento del algoritmo Random Forest con la ayuda de los siguientes pasos:

  • Step 1 - Primero, comience con la selección de muestras aleatorias de un conjunto de datos determinado.

  • Step 2- A continuación, este algoritmo construirá un árbol de decisiones para cada muestra. Entonces obtendrá el resultado de la predicción de cada árbol de decisiones.

  • Step 3 - En este paso, se realizará la votación para cada resultado previsto.

  • Step 4 - Por último, seleccione el resultado de la predicción más votado como resultado final de la predicción.

El siguiente diagrama ilustrará su funcionamiento:

Implementación en Python

Primero, comience con la importación de los paquetes de Python necesarios:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

A continuación, descargue el conjunto de datos de iris de su enlace web de la siguiente manera:

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

A continuación, debemos asignar nombres de columna al conjunto de datos de la siguiente manera:

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

Ahora, necesitamos leer el conjunto de datos en el marco de datos de pandas de la siguiente manera:

dataset = pd.read_csv(path, names=headernames)
dataset.head()
longitud del sépalo ancho del sépalo largo de pétalo ancho de pétalo Clase
0 5.1 3,5 1.4 0,2 Iris-setosa
1 4.9 3,0 1.4 0,2 Iris-setosa
2 4.7 3.2 1.3 0,2 Iris-setosa
3 4.6 3.1 1,5 0,2 Iris-setosa
4 5,0 3.6 1.4 0,2 Iris-setosa

El preprocesamiento de datos se realizará con la ayuda de las siguientes líneas de script:

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

A continuación, dividiremos los datos en tren y prueba. El siguiente código dividirá el conjunto de datos en un 70% de datos de entrenamiento y un 30% de datos de prueba:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)

A continuación, entrene el modelo con la ayuda de la clase RandomForestClassifier de sklearn de la siguiente manera:

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=50)
classifier.fit(X_train, y_train)

Por fin, necesitamos hacer predicciones. Se puede hacer con la ayuda del siguiente script:

y_pred = classifier.predict(X_test)

A continuación, imprima los resultados de la siguiente manera:

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

Salida

Confusion Matrix:
[
   [14 0 0]
   [ 0 18 1]
   [ 0 0 12]
]
Classification Report:
               precision       recall     f1-score       support
Iris-setosa        1.00         1.00        1.00         14
Iris-versicolor    1.00         0.95        0.97         19
Iris-virginica     0.92         1.00        0.96         12
micro avg          0.98         0.98        0.98         45
macro avg          0.97         0.98        0.98         45
weighted avg       0.98         0.98        0.98         45

Accuracy: 0.9777777777777777

Pros y contras de Random Forest

Pros

Las siguientes son las ventajas del algoritmo Random Forest:

  • Supera el problema del sobreajuste al promediar o combinar los resultados de diferentes árboles de decisión.

  • Los bosques aleatorios funcionan bien para una amplia gama de elementos de datos que un solo árbol de decisiones.

  • El bosque aleatorio tiene menos varianza que el árbol de decisión único.

  • Los bosques aleatorios son muy flexibles y poseen una precisión muy alta.

  • El escalado de datos no requiere un algoritmo de bosque aleatorio. Mantiene una buena precisión incluso después de proporcionar datos sin escalar.

  • El escalado de datos no requiere un algoritmo de bosque aleatorio. Mantiene una buena precisión incluso después de proporcionar datos sin escalar.

Contras

Las siguientes son las desventajas del algoritmo Random Forest:

  • La complejidad es la principal desventaja de los algoritmos de bosque aleatorio.

  • La construcción de bosques aleatorios es mucho más difícil y requiere mucho tiempo que los árboles de decisión.

  • Se requieren más recursos computacionales para implementar el algoritmo Random Forest.

  • Es menos intuitivo en el caso de que tengamos una gran colección de árboles de decisión.

  • El proceso de predicción que utiliza bosques aleatorios consume mucho tiempo en comparación con otros algoritmos.