Clasificación de Iris con SVM

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a clasificar el conjunto de datos de iris utilizando un modelo de Clasificador de Vectores de Soporte (SVC). El conjunto de datos de iris es un conjunto de datos de aprendizaje automático clásico que contiene información sobre diferentes especies de iris, incluyendo su longitud del sépalo, ancho del sépalo, longitud del pétalo y ancho del pétalo.

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo importar las bibliotecas necesarias y cargar el conjunto de datos de iris
  • Cómo dividir el conjunto de datos en conjuntos de entrenamiento y prueba
  • Cómo crear y entrenar un modelo de Clasificador de Vectores de Soporte
  • Cómo hacer predicciones utilizando el modelo entrenado
  • Cómo evaluar el rendimiento del modelo utilizando puntuación de precisión y informe de clasificación

🏆 Logros

Después de completar este proyecto, podrás:

  • Utilizar la biblioteca scikit-learn para trabajar con el conjunto de datos de iris
  • Dividir un conjunto de datos en conjuntos de entrenamiento y prueba
  • Crear y entrenar un modelo de Clasificador de Vectores de Soporte
  • Hacer predicciones utilizando un modelo entrenado
  • Evaluar el rendimiento de un modelo utilizando puntuación de precisión e informe de clasificación

Importar las bibliotecas necesarias y cargar el conjunto de datos

En este paso, aprenderás a importar las bibliotecas necesarias y cargar el conjunto de datos de iris. Siga los pasos siguientes para completar este paso:

En iris_classification_svm.py, importe las bibliotecas necesarias, incluyendo las para cargar el conjunto de datos, dividir los datos, crear el modelo SVM y evaluar su rendimiento.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report

Cargue los datos de iris de sklearn.datasets y divida el conjunto de datos en conjuntos de entrenamiento y prueba. El conjunto de datos se divide utilizando una proporción de 80-20 para el entrenamiento y la prueba, con una semilla aleatoria de 42 para la reproducibilidad.

## Continúe en el mismo archivo
def load_and_split_data() -> tuple:
    """
    Devuelve:
        tuple: [X_train, X_test, y_train, y_test]
    """
    iris = load_iris()
    X, y = iris.data, iris.target
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=42
    )
    return X_train, X_test, y_train, y_test

Este código carga el conjunto de datos de Iris y lo divide en conjuntos de entrenamiento y prueba con fines de aprendizaje automático. Aquí hay una descripción detallada de cada parte:

  1. Importar bibliotecas necesarias:
    • sklearn.datasets se utiliza para cargar conjuntos de datos, incluyendo el conjunto de datos de Iris.
    • sklearn.model_selection proporciona utilidades para dividir conjuntos de datos en conjuntos de entrenamiento y prueba.
    • sklearn.svm contiene clases para Máquinas de Vectores de Soporte (SVM), un tipo de algoritmo de aprendizaje automático.
    • sklearn.metrics incluye herramientas para evaluar el rendimiento de los modelos, como la precisión y los informes de clasificación.
  2. Definición de función: Se define una función llamada load_and_split_data. Esta función realiza las siguientes tareas:
    • Cargar el conjunto de datos de Iris: load_iris() es una función proporcionada por sklearn.datasets que carga el conjunto de datos de flores de Iris, que es un conjunto de datos popular para tareas de clasificación. Contiene mediciones de 150 flores de iris de tres especies diferentes.
    • Separación de datos: El conjunto de datos se separa en características (X) y etiquetas de destino (y). En este caso, X sería las mediciones de 4 dimensiones de las flores de iris, y y sería las etiquetas de especies correspondientes (0, 1 o 2).
    • Dividir los datos: train_test_split de sklearn.model_selection se utiliza para dividir los datos en subconjuntos de entrenamiento y prueba. El parámetro test_size = 0.2 significa que el 20% de los datos se utilizará para la prueba, mientras que el 80% restante se utilizará para el entrenamiento. random_state = 42 asegura la reproducibilidad de la división; utilizar la misma semilla (42 aquí) producirá la misma división cada vez que se ejecute el código.
    • Valores de retorno: La función devuelve una tupla que contiene X_train, X_test, y_train y y_test, que son los conjuntos de características y destino para los datos de entrenamiento y prueba.
✨ Revisar Solución y Practicar

Crear y entrenar el modelo SVM

En este paso, aprenderás a crear un modelo de Clasificador de Vectores de Soporte y entrenarlo con los datos de entrenamiento.

## Continúe en el mismo archivo
def create_and_train_SVM(X_train: list, y_train: list) -> SVC:
    """
    Argumentos:
        X_train: [características para el entrenamiento]
        y_train: [etiquetas para el entrenamiento]

    Devuelve:
        SVC: [Modelo de Clasificador de Vectores de Soporte entrenado]
    """
    svm = SVC()
    svm.fit(X_train, y_train)
    return svm

Esta función, create_and_train_SVM, está diseñada para instanciar un modelo de Clasificador de Vectores de Soporte (SVM) utilizando la clase sklearn.svm.SVC y luego entrenarlo con los datos de entrenamiento proporcionados. Aquí hay una explicación detallada:

  • Firma de la función: La función toma dos argumentos:
    • X_train: Un objeto similar a una lista o matriz que contiene las características (variables de entrada) para el conjunto de datos de entrenamiento.
    • y_train: Un objeto similar a una lista o matriz que contiene las etiquetas correspondientes (variables de salida) para el conjunto de datos de entrenamiento.
  • Instanciar un modelo SVM: Dentro de la función, SVC() se llama sin ningún parámetro. Esto crea un modelo de Clasificador de Vectores de Soporte predeterminado. La clase SVC en scikit-learn ofrece varios parámetros para personalizar el modelo, como el tipo de kernel, regularización, etc., pero en este ejemplo básico, se utilizan los valores predeterminados.
  • Entrenar el modelo: El método fit del objeto svm se llama con X_train y y_train. Aquí es donde ocurre el entrenamiento real: el modelo aprende patrones de las características (X_train) asociadas con sus respectivas etiquetas de clase (y_train).
  • Devolver el modelo entrenado: Después del entrenamiento, la función devuelve el modelo SVC entrenado. Este modelo luego se puede utilizar para hacer predicciones en nuevos datos no vistos o para evaluar su rendimiento utilizando un conjunto de datos de prueba.
✨ Revisar Solución y Practicar

Hacer predicciones

En este paso, aprenderás a hacer predicciones utilizando el modelo SVM entrenado.

## Continúe en el mismo archivo
def make_predictions(model: SVC, X_test: list) -> list:
    """
    Argumentos:
        model: [Modelo de Clasificador de Vectores de Soporte entrenado]
        X_test: [características para la prueba]

    Devuelve:
        list: [Predicciones]
    """
    predictions = model.predict(X_test)
    return predictions

La función make_predictions toma un modelo SVM entrenado y un conjunto de características de prueba como entradas, y devuelve una lista de etiquetas predichas para los datos de prueba. Aquí está la descripción detallada:

  • Argumentos de la función:
    • model: Este es una instancia de la clase SVC (Clasificador de Vectores de Soporte) que ya ha sido entrenado en un conjunto de datos. Se asume que el modelo sabe cómo clasificar nuevas instancias basado en los patrones que aprendió durante la fase de entrenamiento.
    • X_test: Un objeto similar a una lista o matriz que contiene las características (variables de entrada) para el conjunto de datos de prueba. Estos son los ejemplos no vistos para los cuales el modelo predecirá las etiquetas.
  • Hacer predicciones: Dentro de la función, el método predict del model se invoca con X_test como argumento. El método predict aplica el modelo aprendido a cada instancia en el conjunto de prueba para estimar sus etiquetas de clase. No requiere las etiquetas reales (y_test), solo las características de entrada.
  • Devolver predicciones: Luego, la función devuelve estas etiquetas estimadas como una lista. Cada elemento en la lista devuelta corresponde a la etiqueta de clase predicha de la instancia respectiva en el conjunto de datos X_test.
✨ Revisar Solución y Practicar

Evaluar el modelo

Evalúe el modelo calculando la puntuación de precisión y mostrando el informe de clasificación.

## Continúe en el mismo archivo
if __name__ == "__main__":
    ## Cargar y dividir los datos
    X_train, X_test, y_train, y_test = load_and_split_data()

    ## Crear y entrenar el modelo SVM
    svm_model = create_and_train_SVM(X_train, y_train)

    ## Hacer predicciones
    predictions = make_predictions(svm_model, X_test)

    ## Evaluar el modelo
    accuracy = accuracy_score(y_test, predictions)
    print(f"Precisión: {accuracy:.2f}")

    ## Mostrar informe de clasificación
    print("Informe de clasificación:")
    print(classification_report(y_test, predictions))

Ahora, ejecute el script desde la terminal:

python iris_classification_svm.py

La salida debe ser:

Precisión: 1.00
Informe de clasificación:
              precisión    recall  f1-score   support

           0       1.00      1.00      1.00        10
           1       1.00      1.00      1.00         9
           2       1.00      1.00      1.00        11

    precisión                           1.00        30
   macro avg       1.00      1.00      1.00        30
weighted avg       1.00      1.00      1.00        30

Siguiendo estos pasos, has completado el proyecto de clasificación del conjunto de datos de iris utilizando un modelo de Clasificador de Vectores de Soporte (SVC).

✨ Revisar Solución y Practicar

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.