Algoritmo de bosque aleatorio con Python y Scikit-Learn

    El bosque aleatorio es un tipo de algoritmo de Machine Learning supervisado basado en aprendizaje conjunto. El aprendizaje conjunto es un tipo de aprendizaje en el que se combinan diferentes tipos de algoritmos o el mismo algoritmo varias veces para formar un modelo de predicci贸n m谩s potente. los Random Forest El algoritmo combina varios algoritmos del mismo tipo, es decir, varios 谩rboles de decisi贸n, lo que da como resultado un bosque de 谩rboles, de ah铆 el nombre “Bosque aleatorio”. El algoritmo de bosque aleatorio se puede utilizar para tareas de regresi贸n y clasificaci贸n.

    C贸mo funciona el algoritmo de bosque aleatorio

    Los siguientes son los pasos b谩sicos involucrados en la realizaci贸n del algoritmo de bosque aleatorio:

    • Elija N registros aleatorios del conjunto de datos.
    • Cree un 谩rbol de decisiones basado en estos N registros.
    • Elija la cantidad de 谩rboles que desee en su algoritmo y repita los pasos 1 y 2.
    • En caso de un problema de regresi贸n, para un nuevo registro, cada 谩rbol del bosque predice un valor para Y (salida). El valor final se puede calcular tomando el promedio de todos los valores predichos por todos los 谩rboles del bosque. O, en caso de un problema de clasificaci贸n, cada 谩rbol del bosque predice la categor铆a a la que pertenece el nuevo registro. Finalmente, el nuevo r茅cord se asigna a la categor铆a que obtiene la mayor铆a de votos.

    Ventajas de usar Random Forest

    Como con cualquier algoritmo, existen ventajas y desventajas al usarlo. En las siguientes dos secciones, veremos los pros y los contras de usar un bosque aleatorio para la clasificaci贸n y regresi贸n.

    • El algoritmo de bosque aleatorio no est谩 sesgado, ya que hay varios 谩rboles y cada 谩rbol se entrena en un subconjunto de datos. B谩sicamente, el algoritmo de bosque aleatorio se basa en el poder de “la multitud”; por lo tanto, se reduce el sesgo general del algoritmo.
    • Este algoritmo es muy estable. Incluso si se introduce un nuevo punto de datos en el conjunto de datos, el algoritmo general no se ve muy afectado, ya que los nuevos datos pueden afectar a un 谩rbol, pero es muy dif铆cil que afecten a todos los 谩rboles.
    • El algoritmo de bosque aleatorio funciona bien cuando tiene caracter铆sticas tanto categ贸ricas como num茅ricas.
    • El algoritmo de bosque aleatorio tambi茅n funciona bien cuando a los datos les faltan valores o no se han escalado bien (aunque hemos realizado el escalado de caracter铆sticas en este art铆culo solo con el prop贸sito de demostraci贸n).

    Desventajas de usar Random Forest

    • Una gran desventaja de los bosques aleatorios radica en su complejidad. Necesitaron muchos m谩s recursos computacionales, debido a la gran cantidad de 谩rboles de decisi贸n unidos.
    • Debido a su complejidad, requieren mucho m谩s tiempo para entrenarse que otros algoritmos comparables.

    A lo largo del resto de este art铆culo, veremos c贸mo Python Biblioteca Scikit-Learn se puede utilizar para implementar el algoritmo de bosque aleatorio para resolver problemas de regresi贸n, as铆 como de clasificaci贸n.

    Parte 1: uso de bosque aleatorio para la regresi贸n

    En esta secci贸n, estudiaremos c贸mo se pueden usar los bosques aleatorios para resolver problemas de regresi贸n usando Scikit-Learn. En la siguiente secci贸n resolveremos el problema de clasificaci贸n a trav茅s de bosques aleatorios.

    Definici贸n del problema

    El problema aqu铆 es predecir el consumo de gas (en millones de galones) en 48 de los estados de EE. UU. Con base en el impuesto a la gasolina (en centavos), el ingreso per c谩pita (d贸lares), las carreteras pavimentadas (en millas) y la proporci贸n de la poblaci贸n con el licencia de conducir.

    Soluci贸n

    Para resolver este problema de regresi贸n usaremos el algoritmo de bosque aleatorio a trav茅s de la biblioteca de Python de Scikit-Learn. Seguiremos el proceso tradicional de Machine Learning para resolver este problema. Sigue estos pasos:

    1. Importar bibliotecas

    Ejecute el siguiente c贸digo para importar las bibliotecas necesarias:

    import pandas as pd
    import numpy as np
    

    2. Importaci贸n de conjunto de datos

    El conjunto de datos de este problema est谩 disponible en:

    https://drive.google.com/file/d/1mVmGNx6cbfvRHC_DvF12ZL3wGLSHD9f_/view

    Por el bien de este tutorial, el conjunto de datos se ha descargado en la carpeta “Conjuntos de datos” de la unidad “D”. Deber谩 cambiar la ruta del archivo seg煤n su propia configuraci贸n.

    Ejecute el siguiente comando para importar el conjunto de datos:

    dataset = pd.read_csv('D:Datasetspetrol_consumption.csv')
    

    Para obtener una vista de alto nivel de c贸mo se ve el conjunto de datos, ejecute el siguiente comando:

    dataset.head()
    

    Gasolina_impuestos Ingresos_medios Autopistas_ pavimentadas Poblaci贸n_Licencia_controlador (%) Consumo_de_ gasolina
    01234

    9.0357119760.525541
    9.0409212500.572524
    9.0386515860.580561
    7.5487023510.529414
    8.043994310.544410

    Podemos ver que los valores en nuestro conjunto de datos no est谩n muy bien escalados. Los reduciremos antes de entrenar el algoritmo.

    3. Preparaci贸n de datos para la formaci贸n

    En esta secci贸n se realizar谩n dos tareas. La primera tarea es dividir los datos en conjuntos de “atributos” y “etiquetas”. Los datos resultantes luego se dividen en conjuntos de entrenamiento y prueba.

    La siguiente secuencia de comandos divide los datos en atributos y etiquetas:

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

    Finalmente, dividamos los datos en conjuntos de entrenamiento y 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.2, random_state=0)
    

    4. Escala de funciones

    Sabemos que nuestro conjunto de datos a煤n no es un valor escalado, por ejemplo, el campo Average_Income tiene valores en el rango de miles, mientras que Petrol_tax tiene valores en el rango de decenas. Por lo tanto, ser铆a beneficioso escalar nuestros datos (aunque, como se mencion贸 anteriormente, este paso no es tan importante para el algoritmo de bosques aleatorios). Para hacerlo, usaremos Scikit-Learn’s StandardScaler clase. Ejecute el siguiente c贸digo para hacerlo:

    # Feature Scaling
    from sklearn.preprocessing import StandardScaler
    
    sc = StandardScaler()
    X_train = sc.fit_transform(X_train)
    X_test = sc.transform(X_test)
    

    5. Entrenamiento del algoritmo

    Ahora que hemos escalado nuestro conjunto de datos, es hora de entrenar nuestro algoritmo de bosque aleatorio para resolver este problema de regresi贸n. Ejecute el siguiente c贸digo:

    from sklearn.ensemble import RandomForestRegressor
    
    regressor = RandomForestRegressor(n_estimators=20, random_state=0)
    regressor.fit(X_train, y_train)
    y_pred = regressor.predict(X_test)
    

    los RandomForestRegressor clase de la sklearn.ensemble La biblioteca se utiliza para resolver problemas de regresi贸n mediante un bosque aleatorio. El par谩metro m谩s importante de la RandomForestRegressor la clase es la n_estimators par谩metro. Este par谩metro define la cantidad de 谩rboles en el bosque aleatorio. Empezaremos con n_estimator=20 para ver c贸mo funciona nuestro algoritmo. Puede encontrar detalles de todos los par谩metros de RandomForestRegressor aqu铆.

    6. Evaluaci贸n del algoritmo

    El 煤ltimo y 煤ltimo paso para resolver un problema de Machine Learning es evaluar el rendimiento del algoritmo. Para problemas de regresi贸n, las m茅tricas que se utilizan para evaluar un algoritmo son el error absoluto medio, el error cuadr谩tico medio y el error cuadr谩tico medio. Ejecute el siguiente c贸digo para encontrar estos valores:

    from sklearn import metrics
    
    print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred))
    print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred))
    print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
    

    La salida se ver谩 as铆:

    Mean Absolute Error: 51.765
    Mean Squared Error: 4216.16675
    Root Mean Squared Error: 64.932016371
    

    Con 20 谩rboles, el error cuadr谩tico medio es 64,93, que es superior al 10 por ciento del consumo medio de gasolina, es decir, 576,77. Esto puede indicar, entre otras cosas, que no hemos utilizado suficientes estimadores (谩rboles).

    Si el n煤mero de estimadores se cambia a 200, los resultados son los siguientes:

    Mean Absolute Error: 47.9825
    Mean Squared Error: 3469.7007375
    Root Mean Squared Error: 58.9041657058
    

    El siguiente gr谩fico muestra la disminuci贸n en el valor de la error cuadr谩tico medio (RMSE) con respecto al n煤mero de estimadores. Aqu铆 el El eje X contiene el n煤mero de estimadores mientras que la El eje Y contiene el valor del error cuadr谩tico medio de la ra铆z.

    Puede ver que los valores de error disminuyen con el aumento en el n煤mero de estimadores. Despu茅s de 200, la tasa de disminuci贸n del error disminuye, por lo que 200 es un buen n煤mero para n_estimators. Puede jugar con la cantidad de 谩rboles y otros par谩metros para ver si puede obtener mejores resultados por su cuenta.

    Parte 2: Uso del bosque aleatorio para la clasificaci贸n

    Definici贸n del problema

    La tarea aqu铆 es predecir si un billete de moneda bancaria es aut茅ntico o no bas谩ndose en cuatro atributos, es decir, la varianza de la imagen transformada en ondas, la asimetr铆a, la entrop铆a y la curtosis de la imagen.

    Soluci贸n

    Este es un problema de clasificaci贸n binaria y usaremos un clasificador de bosque aleatorio para resolver este problema. Los pasos seguidos para resolver este problema ser谩n similares a los pasos realizados para la regresi贸n.

    1. Importar bibliotecas

    import pandas as pd
    import numpy as np
    

    2. Importar conjunto de datos

    El conjunto de datos se puede descargar desde el siguiente enlace:

    https://drive.google.com/file/d/13nw-uRXPY8XIZQxKRNZ3yYlho-CYm_Qt/view

    La informaci贸n detallada sobre los datos est谩 disponible en el siguiente enlace:

    https://archive.ics.uci.edu/ml/datasets/banknote+authentication

    El siguiente c贸digo importa el conjunto de datos:

    dataset = pd.read_csv("D:/Datasets/bill_authentication.csv")
    

    Para obtener una vista de alto nivel del conjunto de datos, ejecute el siguiente comando:

    dataset.head()
    

    Clase de entrop铆a de curtosis de asimetr铆a de varianza
    01234

    3.621608.6661-2,8073-0,446990
    4.545908.1674-2,4586-1.462100
    3.86600-2,63831.92420.106450
    3.456609.5228-4.0112-3.594400
    0.32924-4.45524.5718-0,988800

    Como fue el caso con el conjunto de datos de regresi贸n, los valores en este conjunto de datos no est谩n muy bien escalados. El conjunto de datos se escalar谩 antes de entrenar el algoritmo.

    3. Preparaci贸n de datos para la formaci贸n

    El siguiente c贸digo divide los datos en atributos y etiquetas:

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

    El siguiente c贸digo divide los datos en conjuntos de entrenamiento y 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.2, random_state=0)
    

    4. Escala de funciones

    Como antes, el escalado de caracter铆sticas funciona de la misma manera:

    # Feature Scaling
    from sklearn.preprocessing import StandardScaler
    
    sc = StandardScaler()
    X_train = sc.fit_transform(X_train)
    X_test = sc.transform(X_test)
    

    5. Entrenamiento del algoritmo

    Y nuevamente, ahora que hemos escalado nuestro conjunto de datos, podemos entrenar nuestros bosques aleatorios para resolver este problema de clasificaci贸n. Para hacerlo, ejecute el siguiente c贸digo:

    from sklearn.ensemble import RandomForestRegressor
    
    regressor = RandomForestRegressor(n_estimators=20, random_state=0)
    regressor.fit(X_train, y_train)
    y_pred = regressor.predict(X_test)
    

    En caso de regresi贸n usamos el RandomForestRegressor clase de la biblioteca sklearn.ensemble. Para la clasificaci贸n, haremos RandomForestClassifier clase de la biblioteca sklearn.ensemble. RandomForestClassifier la clase tambi茅n toma n_estimators como par谩metro. Como antes, este par谩metro define la cantidad de 谩rboles en nuestro bosque aleatorio. Empezaremos con 20 谩rboles nuevamente. Puede encontrar detalles de todos los par谩metros de RandomForestClassifier aqu铆.

    6. Evaluaci贸n del algoritmo

    Para los problemas de clasificaci贸n, las m茅tricas que se utilizan para evaluar un algoritmo son la precisi贸n, la matriz de confusi贸n, la recuperaci贸n de precisi贸n y los valores F1. Ejecute la siguiente secuencia de comandos para encontrar estos valores:

    from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
    
    print(confusion_matrix(y_test,y_pred))
    print(classification_report(y_test,y_pred))
    print(accuracy_score(y_test, y_pred))
    

    La salida se ver谩 as铆:

    [[155    2]
        1  117]]
                  precision   recall   f1-score   support
    
               0       0.99     0.99       0.99       157
               1       0.98     0.99       0.99       118
    
     avg / total       0.99     0.99       0.99       275
    
    0.989090909091
    

    La precisi贸n alcanzada por nuestro clasificador de bosques aleatorio con 20 谩rboles es del 98,90%. A diferencia de antes, cambiar el n煤mero de estimadores para este problema no mejor贸 significativamente los resultados, como se muestra en el siguiente cuadro. Aqu铆, el eje X contiene el n煤mero de estimadores, mientras que el eje Y muestra la precisi贸n.

    El 98,90% es una precisi贸n bastante buena, por lo que no tiene mucho sentido aumentar nuestro n煤mero de estimadores de todos modos. Podemos ver que aumentar el n煤mero de estimadores no mejor贸 m谩s la precisi贸n.

    Para mejorar la precisi贸n, le sugiero que juegue con otros par谩metros del RandomForestClassifier clase y vea si puede mejorar nuestros resultados.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *