You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/es/4-Classification/3-Classifiers-2
localizeflow[bot] 3e40406952
chore(i18n): sync translations with latest source changes (chunk 1/1, 22 changes)
3 months ago
..
solution
README.md
assignment.md
notebook.ipynb

README.md

Clasificadores de cocina 2

En esta segunda lección de clasificación, explorarás más formas de clasificar datos numéricos. También aprenderás sobre las ramificaciones de elegir un clasificador sobre otro.

Cuestionario previo a la lección

Prerrequisito

Asumimos que has completado las lecciones anteriores y tienes un conjunto de datos limpio en tu carpeta data llamado cleaned_cuisines.csv en la raíz de esta carpeta de 4 lecciones.

Preparación

Hemos cargado tu archivo notebook.ipynb con el conjunto de datos limpio y lo hemos dividido en dataframes X e y, listos para el proceso de construcción del modelo.

Un mapa de clasificación

Anteriormente, aprendiste sobre las distintas opciones que tienes al clasificar datos usando la hoja de referencia rápida de Microsoft. Scikit-learn ofrece una hoja de referencia similar, pero más detallada, que puede ayudarte aún más a delimitar tus estimadores (otro término para clasificadores):

ML Map from Scikit-learn

Consejo: visita este mapa en línea y haz clic a lo largo del camino para leer la documentación.

El plan

Este mapa es muy útil una vez que tienes una comprensión clara de tus datos, ya que puedes 'caminar' a lo largo de sus caminos hacia una decisión:

  • Tenemos >50 muestras
  • Queremos predecir una categoría
  • Tenemos datos etiquetados
  • Tenemos menos de 100K muestras
  • Podemos elegir un Linear SVC
  • Si eso no funciona, dado que tenemos datos numéricos
    • Podemos probar un Clasificador KNeighbors
      • Si eso no funciona, probar SVC y Clasificadores Ensemble

Este es un camino muy útil a seguir.

Ejercicio - dividir los datos

Siguiendo este camino, deberíamos comenzar importando algunas bibliotecas para usar.

  1. Importa las bibliotecas necesarias:

    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.linear_model import LogisticRegression
    from sklearn.svm import SVC
    from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
    from sklearn.model_selection import train_test_split, cross_val_score
    from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
    import numpy as np
    
  2. Divide tus datos en entrenamiento y prueba:

    X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
    

Clasificador Linear SVC

Support-Vector clustering (SVC) es una rama de la familia de técnicas de Máquinas de Vectores de Soporte (aprende más sobre estas más abajo). En este método, puedes elegir un 'kernel' para decidir cómo agrupar las etiquetas. El parámetro 'C' se refiere a la 'regularización' que regula la influencia de los parámetros. El kernel puede ser uno de varios; aquí lo configuramos como 'linear' para garantizar que aprovechemos el Linear SVC. La probabilidad por defecto es 'false'; aquí lo configuramos a 'true' para obtener estimaciones de probabilidad. Establecemos el estado aleatorio a '0' para mezclar los datos y obtener probabilidades.

Ejercicio - aplica un Linear SVC

Comienza creando un array de clasificadores. Los agregarás progresivamente a este array conforme hagamos pruebas.

  1. Comienza con un Linear SVC:

    C = 10
    # Crear diferentes clasificadores.
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
    
  2. Entrena tu modelo usando el Linear SVC e imprime un reporte:

    n_classifiers = len(classifiers)
    
    for index, (name, classifier) in enumerate(classifiers.items()):
        classifier.fit(X_train, np.ravel(y_train))
    
        y_pred = classifier.predict(X_test)
        accuracy = accuracy_score(y_test, y_pred)
        print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100))
        print(classification_report(y_test,y_pred))
    

    El resultado es bastante bueno:

    Accuracy (train) for Linear SVC: 78.6% 
                  precision    recall  f1-score   support
    
         chinese       0.71      0.67      0.69       242
          indian       0.88      0.86      0.87       234
        japanese       0.79      0.74      0.76       254
          korean       0.85      0.81      0.83       242
            thai       0.71      0.86      0.78       227
    
        accuracy                           0.79      1199
       macro avg       0.79      0.79      0.79      1199
    weighted avg       0.79      0.79      0.79      1199
    

Clasificador K-Neighbors

K-Neighbors es parte de la familia de métodos ML "vecinos", que pueden usarse tanto para aprendizaje supervisado como no supervisado. En este método, se crea un número predefinido de puntos y los datos se agrupan alrededor de estos puntos de manera que se puedan predecir etiquetas generalizadas para los datos.

Ejercicio - aplica el clasificador K-Neighbors

El clasificador previo fue bueno y funcionó bien con los datos, pero tal vez podamos obtener mejor precisión. Prueba un clasificador K-Neighbors.

  1. Agrega una línea a tu array de clasificadores (agrega una coma después del elemento Linear SVC):

    'KNN classifier': KNeighborsClassifier(C),
    

    El resultado es un poco peor:

    Accuracy (train) for KNN classifier: 73.8% 
                  precision    recall  f1-score   support
    
         chinese       0.64      0.67      0.66       242
          indian       0.86      0.78      0.82       234
        japanese       0.66      0.83      0.74       254
          korean       0.94      0.58      0.72       242
            thai       0.71      0.82      0.76       227
    
        accuracy                           0.74      1199
       macro avg       0.76      0.74      0.74      1199
    weighted avg       0.76      0.74      0.74      1199
    

    Aprende sobre K-Neighbors

Clasificador Support Vector

Los clasificadores Support-Vector son parte de la familia de métodos de Máquinas de Vectores de Soporte que se usan para tareas de clasificación y regresión. Las SVM "mapean ejemplos de entrenamiento a puntos en el espacio" para maximizar la distancia entre dos categorías. Los datos posteriores se mapean en este espacio para que su categoría pueda ser predicha.

Ejercicio - aplica un Clasificador Support Vector

Intentemos obtener un poco mejor precisión con un clasificador Support Vector.

  1. Agrega una coma después del elemento K-Neighbors, y luego añade esta línea:

    'SVC': SVC(),
    

    ¡El resultado es bastante bueno!

    Accuracy (train) for SVC: 83.2% 
                  precision    recall  f1-score   support
    
         chinese       0.79      0.74      0.76       242
          indian       0.88      0.90      0.89       234
        japanese       0.87      0.81      0.84       254
          korean       0.91      0.82      0.86       242
            thai       0.74      0.90      0.81       227
    
        accuracy                           0.83      1199
       macro avg       0.84      0.83      0.83      1199
    weighted avg       0.84      0.83      0.83      1199
    

    Aprende sobre Support-Vectors

Clasificadores Ensemble

Sigamos el camino hasta el final, aunque la prueba previa fue bastante buena. Probemos algunos 'Clasificadores Ensemble', específicamente Random Forest y AdaBoost:

  'RFST': RandomForestClassifier(n_estimators=100),
  'ADA': AdaBoostClassifier(n_estimators=100)

El resultado es muy bueno, especialmente para Random Forest:

Accuracy (train) for RFST: 84.5% 
              precision    recall  f1-score   support

     chinese       0.80      0.77      0.78       242
      indian       0.89      0.92      0.90       234
    japanese       0.86      0.84      0.85       254
      korean       0.88      0.83      0.85       242
        thai       0.80      0.87      0.83       227

    accuracy                           0.84      1199
   macro avg       0.85      0.85      0.84      1199
weighted avg       0.85      0.84      0.84      1199

Accuracy (train) for ADA: 72.4% 
              precision    recall  f1-score   support

     chinese       0.64      0.49      0.56       242
      indian       0.91      0.83      0.87       234
    japanese       0.68      0.69      0.69       254
      korean       0.73      0.79      0.76       242
        thai       0.67      0.83      0.74       227

    accuracy                           0.72      1199
   macro avg       0.73      0.73      0.72      1199
weighted avg       0.73      0.72      0.72      1199

Aprende sobre Clasificadores Ensemble

Este método de Aprendizaje Automático "combina las predicciones de varios estimadores base" para mejorar la calidad del modelo. En nuestro ejemplo, usamos Random Trees y AdaBoost.

  • Random Forest, un método de promediado, construye un "bosque" de "árboles de decisión" infundidos con aleatoriedad para evitar sobreajuste. El parámetro n_estimators se ajusta al número de árboles.

  • AdaBoost ajusta un clasificador a un conjunto de datos y luego ajusta copias de ese clasificador al mismo conjunto. Se enfoca en los pesos de los ítems mal clasificados y ajusta el ajuste para el siguiente clasificador para corregir.


🚀Desafío

Cada una de estas técnicas tiene un gran número de parámetros que puedes modificar. Investiga los parámetros por defecto de cada uno y piensa qué significaría modificar estos parámetros para la calidad del modelo.

Cuestionario posterior a la lección

Repaso y autoestudio

Hay mucha jerga en estas lecciones, así que tómate un minuto para repasar esta lista de terminología útil.

Tarea

Jugar con parámetros


Descargo de responsabilidad: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional por humanos. No nos responsabilizamos por malentendidos o interpretaciones erróneas derivadas del uso de esta traducción.