scikit-learn

ScikitLearn

Tutorial ScikitLearn: Introducción a la clasificación

Scikit-Learn: Introducción a la clasificación. Aprende qué es la clasificación en aprendizaje automático, las diferencias entre clasificación binaria y multiclase, y cómo evaluar modelos en Python.

Aprende ScikitLearn GRATIS y certifícate

¿Qué es la clasificación?

La clasificación es una tarea de aprendizaje automático supervisado que consiste en predecir la categoría o clase a la que pertenece una nueva observación, basada en un conjunto de datos de entrenamiento compuesto por pares de entradas y salidas conocidas. Es decir, el objetivo es aprender una función que asigne correctamente etiquetas de clase a instancias no vistas previamente.

En términos formales, se busca una función $f$ que, dado un conjunto de características $X$, prediga una etiqueta de clase $y$ perteneciente a un conjunto finito y discreto de clases $Y$. Cada instancia en el conjunto de datos está representada por un vector de características $x ∈ X$ y una etiqueta asociada $y ∈ Y$.

La clasificación es esencial en múltiples aplicaciones prácticas, tales como:

  • Detección de spam en correo electrónico.
  • Reconocimiento de voz y procesamiento del lenguaje natural.
  • Diagnóstico médico para identificar enfermedades.
  • Clasificación de imágenes en visión por computador.

Scikit-Learn ofrece una amplia gama de algoritmos de clasificación que permiten abordar diversos problemas. Algunos de los algoritmos más utilizados incluyen:

  • Regresión logística
  • Máquinas de soporte vectorial (SVC)
  • Árboles de decisión (DecissionTreeClassifier)
  • Bosques aleatorios (RandomForestClassifier)
  • K-Vecinos más cercanos (KNeighborsClassifier)

A continuación, se presenta un ejemplo básico de cómo implementar un modelo de clasificación con Scikit-Learn:

from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Cargar el conjunto de datos
datos = load_wine()
X = datos.data  # Características
y = datos.target  # Etiquetas de clase

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear el clasificador de Bosque Aleatorio
clasificador = RandomForestClassifier(n_estimators=100, random_state=42)

# Entrenar el modelo
clasificador.fit(X_train, y_train)

# Evaluar el modelo en el conjunto de prueba
exactitud = clasificador.score(X_test, y_test)
print(f"Exactitud del modelo: {exactitud:.2f}")

En este ejemplo, se utiliza el conjunto de datos Wine para clasificar tipos de vino en función de sus características químicas. El algoritmo de Bosque Aleatorio construye múltiples árboles de decisión y combina sus resultados para mejorar la precisión y controlar el sobreajuste.

La tarea de clasificación implica también considerar aspectos como:

  • Preprocesamiento de datos: normalización, manejo de valores perdidos y codificación de variables categóricas.
  • Selección de características: identificar las variables más relevantes para mejorar el rendimiento del modelo.
  • Manejo de datos desbalanceados: aplicar técnicas como el sobremuestreo o el submuestreo cuando las clases no están equitativamente representadas.

Es fundamental evaluar el rendimiento del modelo utilizando métricas adecuadas, como la matriz de confusión, el informe de clasificación o el área bajo la curva ROC. Estas métricas proporcionan información detallada sobre la capacidad del modelo para predecir correctamente cada clase.

La clasificación es, por tanto, una herramienta clave en el análisis de datos y la inteligencia artificial, permitiendo transformar datos en conocimiento útil para la toma de decisiones en sectores como la salud, las finanzas, la seguridad y muchos otros.

¿Qué es un valor categórico a predecir con clasificación?

En el aprendizaje automático supervisado, específicamente en la clasificación, el objetivo es predecir un valor categórico que representa la clase o etiqueta a la que pertenece una nueva instancia. Un valor categórico es una variable que puede tomar uno de un conjunto finito de valores discretos, cada uno de los cuales indica una categoría distinta o una clase sin orden inherente.

Las variables categóricas se caracterizan por:

  • Datos discretos: No admiten valores intermedios entre categorías.
  • No cuantitativas: Representan cualidades o atributos, no cantidades numéricas.
  • Categorías mutuamente excluyentes: Cada instancia pertenece únicamente a una categoría.

Por ejemplo, en un problema de clasificación para diagnosticar enfermedades, el valor categórico a predecir podría ser el tipo de enfermedad, como "gripe", "resfriado" o "alergia". En este caso, la variable objetivo es la categoría de la enfermedad, y el modelo intentará asignar correctamente nuevas observaciones a una de estas clases.

En Scikit-Learn, la variable objetivo para tareas de clasificación suele representarse mediante etiquetas numéricas. Aunque las categorías son cualitativas, es común mapearlas a números enteros para facilitar el procesamiento. Por ejemplo:

import numpy as np

# Etiquetas categóricas originales
etiquetas = np.array(['gato', 'perro', 'conejo', 'gato', 'conejo'])

# Mapear categorías a valores numéricos
from sklearn.preprocessing import LabelEncoder

encoder = LabelEncoder()
etiquetas_numericas = encoder.fit_transform(etiquetas)

print("Etiquetas numéricas:", etiquetas_numericas)

Este código transformará las etiquetas categóricas gato, perro y conejo en valores numéricos como 0, 1 y 2. Es importante destacar que estos números no implican un orden o jerarquía entre las categorías; simplemente son una representación conveniente para los algoritmos.

Al trabajar con valores categóricos en clasificación, es fundamental:

  • Mantener la correspondencia correcta entre las etiquetas numéricas y las categorías originales.
  • Evitar asignar significado ordinal a categorías sin orden inherente.
  • Asegurar la consistencia en el codificado de las etiquetas durante el entrenamiento y la predicción.

Un ejemplo completo de cómo preparar y utilizar un valor categórico para una tarea de clasificación con Scikit-Learn es el siguiente:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder

# Cargar el conjunto de datos Iris
datos = load_iris()
X = datos.data  # Características
y_categorico = datos.target_names[datos.target]  # Etiquetas categóricas

# Codificar las etiquetas categóricas a valores numéricos
encoder = LabelEncoder()
y = encoder.fit_transform(y_categorico)

# Dividir los datos en conjuntos de entrenamiento y prueba
X_entreno, X_prueba, y_entreno, y_prueba = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear y entrenar el modelo de clasificación
modelo = RandomForestClassifier(n_estimators=100, random_state=42)
modelo.fit(X_entreno, y_entreno)

# Evaluar el modelo en el conjunto de prueba
exactitud = modelo.score(X_prueba, y_prueba)
print(f"Exactitud del modelo: {exactitud:.2f}")

# Predecir la clase de una nueva observación
nueva_observacion = [[5.1, 3.5, 1.4, 0.2]]
clase_predicha = modelo.predict(nueva_observacion)
clase_predicha_nombre = encoder.inverse_transform(clase_predicha)
print("La nueva observación se clasifica como:", clase_predicha_nombre[0])

En este ejemplo:

  • Se utiliza el conjunto de datos Iris, donde la variable objetivo es la especie de la flor: setosa, versicolor o virginica.
  • Las etiquetas categóricas se codifican a valores numéricos mediante LabelEncoder, manteniendo la integridad de las clases.
  • Se entrena un modelo de Bosque Aleatorio para predecir la especie en función de las características de la flor.
  • Se demuestra cómo invertir la codificación para interpretar la clase predicha en términos de la categoría original.

Es esencial comprender que el valor categórico a predecir en clasificación es la representación de la clase objetivo, y su correcta gestión es crucial para el rendimiento y la interpretabilidad del modelo. Al etiquetar y codificar adecuadamente las categorías, se garantiza que los algoritmos de Scikit-Learn funcionen de manera eficaz y que los resultados sean coherentes con el problema real.

¿Qué son y qué diferencias hay entre clasificación binaria y multiclase?

La clasificación binaria y la clasificación multiclase son dos tipos fundamentales de problemas en el aprendizaje automático supervisado. En ambos casos, el objetivo es asignar una etiqueta de clase a instancias desconocidas basándose en patrones aprendidos durante el entrenamiento.

  • En la clasificación binaria, el modelo distingue entre dos clases posibles. Por ejemplo, identificar si un correo electrónico es spam o no spam, o determinar si una transacción es fraudulenta o legítima. Este tipo de clasificación es esencial cuando se requiere una decisión dicotómica.
  • Por otro lado, la clasificación multiclase se refiere a problemas donde existen más de dos clases posibles. Un ejemplo clásico es el conjunto de datos Iris, donde las muestras deben ser clasificadas en tres especies distintas: Iris setosa, Iris versicolor e Iris virginica. En este caso, el modelo debe aprender a distinguir entre múltiples categorías.

Las diferencias clave entre la clasificación binaria y multiclase radican en el número de clases y en las estrategias utilizadas para abordar el problema. Mientras que en la clasificación binaria se optimizan funciones y métricas específicas para dos clases, en la multiclase es necesario adaptar los algoritmos para manejar múltiples etiquetas.

En Scikit-Learn, muchos algoritmos están diseñados para soportar tanto clasificación binaria como multiclase. Por ejemplo, el Árbol de Decisión y el K-Vecinos Más Cercanos son naturalmente aptos para clasificaciones con múltiples clases. Sin embargo, algunos algoritmos, como las Máquinas de Soporte Vectorial (SVM), fueron originalmente concebidos para problemas binarios y requieren estrategias adicionales para extenderse al caso multiclase.

Una estrategia común para adaptar algoritmos binarios a problemas multiclase es el enfoque uno contra el resto (One-vs-Rest). En este método, se entrena un clasificador binario para cada clase, considerando dicha clase como positiva y el resto como negativas. Durante la predicción, se asigna a la instancia la clase cuyo clasificador produce la mayor confianza.

Otra estrategia es el enfoque uno contra uno (One-vs-One), donde se construye un clasificador binario para cada par posible de clases. Si hay n clases, se entrenan n(n-1)/2 clasificadores. La predicción final se determina mediante una votación entre todos los clasificadores.

Es importante tener en cuenta que algunas métricas de evaluación funcionan de manera diferente en problemas binarios y multiclase. Por ejemplo, en clasificación binaria es común utilizar la curva ROC y el área bajo la curva (AUC), mientras que en problemas multiclase se emplean métricas como la exactitud, la matriz de confusión y el índice de kappa.

A continuación, se presenta un ejemplo práctico de clasificación binaria utilizando Scikit-Learn y el algoritmo LogisticRegression:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Cargar el conjunto de datos
datos = load_breast_cancer()
X = datos.data  # Características
y = datos.target  # Etiquetas de clase

# Dividir en conjuntos de entrenamiento y prueba
X_entreno, X_prueba, y_entreno, y_prueba = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Crear y entrenar el modelo
modelo = LogisticRegression(max_iter=1000, random_state=42)
modelo.fit(X_entreno, y_entreno)

# Evaluar el modelo
exactitud = modelo.score(X_prueba, y_prueba)
print(f"Exactitud del modelo: {exactitud:.2f}")

En este ejemplo, se utiliza el conjunto de datos breast_cancer para predecir si un tumor es maligno o benigno, un problema típico de clasificación binaria. El modelo de Regresión Logística es apropiado para este tipo de tareas y proporciona probabilidades para cada clase.

Para ilustrar una clasificación multiclase, podemos utilizar el conjunto de datos digits, que consiste en imágenes de dígitos escritos a mano que deben ser clasificados del 0 al 9. A continuación se muestra cómo implementar esto usando un SVC con estrategia multiclase:

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

# Cargar el conjunto de datos
datos = load_digits()
X = datos.data  # Características
y = datos.target  # Etiquetas de clase

# Dividir en conjuntos de entrenamiento y prueba
X_entreno, X_prueba, y_entreno, y_prueba = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Crear y entrenar el modelo
modelo = SVC(kernel='linear', decision_function_shape='ovr', random_state=42)
modelo.fit(X_entreno, y_entreno)

# Evaluar el modelo
exactitud = modelo.score(X_prueba, y_prueba)
print(f"Exactitud del modelo: {exactitud:.2f}")

En este caso, el SVC utiliza el parámetro decision_function_shape='ovr' para implementar la estrategia uno contra el resto, permitiendo manejar la clasificación multiclase. El modelo es capaz de distinguir entre los diez dígitos con una alta precisión.

Al abordar problemas de clasificación, es fundamental identificar si se trata de una tarea binaria o multiclase. Esto influye en la elección del algoritmo, las estrategias de entrenamiento y las métricas de evaluación adecuadas. La correcta identificación del tipo de clasificación permite aplicar técnicas específicas para obtener los mejores resultados.

¿En qué casos se aplica clasificación?

La clasificación es una técnica esencial en el aprendizaje automático que se emplea cuando es necesario asignar una etiqueta o categoría a nuevas observaciones, basándose en datos previamente etiquetados. Se aplica en situaciones donde la variable objetivo es categórica, es decir, cuando las salidas posibles son clases discretas y definidas.

Los casos en los que se utiliza la clasificación son variados y abarcan múltiples campos. Por ejemplo, en el sector de la salud, se emplea para diagnosticar enfermedades a partir de síntomas o resultados de pruebas médicas, determinando si un paciente padece una condición específica. En el ámbito de la seguridad informática, ayuda a detectar actividades fraudulentas o legítimas, como en la identificación de transacciones bancarias sospechosas.

En el área de las comunicaciones, la clasificación permite filtrar correos electrónicos, identificando mensajes de spam y evitando que lleguen a la bandeja de entrada principal. También se aplica en sistemas de reconocimiento de voz, donde se clasifica el habla en comandos o instrucciones específicas para interactuar con dispositivos electrónicos.

La industria del marketing utiliza la clasificación para segmentar clientes en categorías como clientes frecuentes, nuevos usuarios o clientes inactivos, permitiendo diseñar estrategias personalizadas de venta y publicidad. En las redes sociales, se clasifica el contenido para recomendar publicaciones, anuncios o conexiones relevantes a cada usuario.

En el ámbito de la visión por computador, la clasificación es fundamental para el reconocimiento de objetos en imágenes y vídeos. Por ejemplo, clasificar fotografías que contienen vehículos, peatones o señales de tráfico es crucial en el desarrollo de vehículos autónomos y sistemas de asistencia al conductor.

La clasificación también se aplica en el procesamiento del lenguaje natural, donde es necesario categorizar textos según su tema, determinar el sentimiento expresado en opiniones o identificar entidades como nombres de personas, lugares u organizaciones en un texto.

En el contexto de Scikit-Learn, existen numerosos algoritmos de clasificación que pueden aplicarse a estos problemas. Por ejemplo, los árboles de decisión permiten crear modelos interpretables que clasifican datos basándose en reglas simples. Los algoritmos de conjunto, como Random Forest o Gradient Boosting, combinan múltiples modelos para mejorar la precisión.

A continuación, se presenta un ejemplo práctico de cómo utilizar la clasificación para predecir si un pasajero sobrevivió al hundimiento del Titanic, basándose en características como su edad, sexo y clase en el barco:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

# Cargar el conjunto de datos del Titanic
datos = pd.read_csv('titanic.csv')

# Seleccionar características relevantes y la variable objetivo
características = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
X = datos[características]
y = datos['Survived']

# Preprocesamiento: manejar valores faltantes y codificar variables categóricas
X['Age'].fillna(X['Age'].median(), inplace=True)
X['Embarked'].fillna('S', inplace=True)
X = pd.get_dummies(X, columns=['Sex', 'Embarked'], drop_first=True)

# Dividir los datos en conjuntos de entrenamiento y prueba
X_entreno, X_prueba, y_entreno, y_prueba = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Crear y entrenar el modelo
modelo = RandomForestClassifier(n_estimators=100, random_state=42)
modelo.fit(X_entreno, y_entreno)

# Evaluar el modelo
exactitud = modelo.score(X_prueba, y_prueba)
print(f"Exactitud del modelo: {exactitud:.2f}")

En este ejemplo, se utiliza el conjunto de datos del Titanic para predecir la supervivencia de los pasajeros, un caso de clasificación binaria donde las clases posibles son sobrevivió o no sobrevivió. El modelo entrenado puede ayudar a entender qué factores influyeron en la supervivencia y predecir el desenlace de pasajeros no incluidos en el conjunto de datos original.

La clasificación se aplica siempre que se requiere una decisión categórica basada en los datos disponibles. Su versatilidad y eficacia la convierten en una herramienta esencial en el análisis de datos y el desarrollo de soluciones inteligentes en diversas industrias.

Métricas de evaluación de clasificación

Para garantizar el rendimiento y la eficacia de un modelo de clasificación, es fundamental utilizar métricas de evaluación adecuadas. Estas métricas permiten comprender cómo de bien está funcionando el modelo en la predicción de las clases y ayudan a identificar áreas de mejora.

Una de las métricas más básicas es la exactitud (accuracy), que mide la proporción de predicciones correctas sobre el total de casos evaluados. Sin embargo, la exactitud por sí sola puede ser engañosa, especialmente en conjuntos de datos desbalanceados, donde las clases no están igualmente representadas.

La matriz de confusión es una herramienta esencial que proporciona una visión detallada de las predicciones del modelo. Esta matriz muestra el número de aciertos y errores de clasificación, desglosados por cada clase. En una clasificación binaria, la matriz de confusión contiene:

  • Verdaderos Positivos (VP): instancias correctamente clasificadas como positivas.
  • Falsos Positivos (FP): instancias negativas clasificadas incorrectamente como positivas.
  • Verdaderos Negativos (VN): instancias correctamente clasificadas como negativas.
  • Falsos Negativos (FN): instancias positivas clasificadas incorrectamente como negativas.

A partir de la matriz de confusión, se pueden calcular métricas más informativas como:

1.   Precisión (Precision): mide la proporción de verdaderos positivos sobre el total de predicciones positivas realizadas.

$$
\text{Precisión} = \frac{VP}{VP + FP}
$$

2.   Recuperación (Recall) o Sensibilidad: estima la proporción de verdaderos positivos detectados sobre el total de positivos reales.

$$
\text{Recuperación} = \frac{VP}{VP + FN}
$$

3.   Puntaje F1 (F1-Score): es la media armónica entre la precisión y la recuperación, proporcionando un equilibrio entre ambas métricas.

$$
F1 = 2 \times \frac{\text{Precisión} \times \text{Recuperación}}{\text{Precisión} + \text{Recuperación}}
$$

Estas métricas son especialmente útiles cuando hay un desbalance entre clases, ya que ofrecen información más detallada que la exactitud.

En Scikit-Learn, es sencillo calcular estas métricas utilizando funciones específicas. A continuación, se presenta un ejemplo práctico con el conjunto de datos Breast Cancer:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import (
    accuracy_score,
    precision_score,
    recall_score,
    f1_score,
    confusion_matrix,
    classification_report,
)

# Cargar el conjunto de datos
datos = load_breast_cancer()
X = datos.data  # Características
y = datos.target  # Etiquetas de clase

# Dividir en conjuntos de entrenamiento y prueba
X_entreno, X_prueba, y_entreno, y_prueba = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Crear y entrenar el modelo
modelo = RandomForestClassifier(n_estimators=100, random_state=42)
modelo.fit(X_entreno, y_entreno)

# Realizar predicciones en el conjunto de prueba
y_pred = modelo.predict(X_prueba)

# Calcular métricas de evaluación
exactitud = accuracy_score(y_prueba, y_pred)
prec = precision_score(y_prueba, y_pred)
rec = recall_score(y_prueba, y_pred)
f1 = f1_score(y_prueba, y_pred)
matriz_conf = confusion_matrix(y_prueba, y_pred)

print(f"Exactitud: {exactitud:.2f}")
print(f"Precisión: {prec:.2f}")
print(f"Recuperación: {rec:.2f}")
print(f"Puntaje F1: {f1:.2f}")
print("Matriz de Confusión:")
print(matriz_conf)

Este código entrenará un modelo de Bosque Aleatorio para clasificar tumores como malignos o benignos. Luego, se calculan y muestran las métricas clave, proporcionando una visión detallada del rendimiento del modelo.

La función classification_report de Scikit-Learn genera un informe completo de las métricas mencionadas:

# Generar informe detallado
informe = classification_report(y_prueba, y_pred, target_names=datos.target_names)
print(informe)

El informe incluye la precisión, la recuperación, el F1-Score y el soporte (número de ocurrencias de cada clase) para cada categoría, facilitando la interpretación del modelo.

Para problemas de clasificación multiclase, las métricas se extienden para manejar múltiples etiquetas. Scikit-Learn permite especificar cómo se promedian las métricas con el parámetro average. Los tipos de promedio más comunes son:

  • Macro: calcula la métrica de forma independiente para cada clase y luego computa la media no ponderada.
  • Micro: acumula las contribuciones de todos los clases para calcular la métrica global.
  • Ponderado: como el macro, pero las métricas de cada clase se ponderan por el número de instancias de esa clase.

Un ejemplo con clasificación multiclase utilizando el conjunto de datos Digits es el siguiente:

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score, classification_report

# Cargar el conjunto de datos
digits = load_digits()
X = digits.data
y = digits.target

# Dividir en conjuntos de entrenamiento y prueba
X_entreno, X_prueba, y_entreno, y_prueba = train_test_split(
    X, y, test_size=0.3, random_state=42
)

# Crear y entrenar el modelo
modelo = GradientBoostingClassifier(random_state=42)
modelo.fit(X_entreno, y_entreno)

# Realizar predicciones
y_pred = modelo.predict(X_prueba)

# Calcular y mostrar la exactitud
exactitud = accuracy_score(y_prueba, y_pred)
print(f"Exactitud: {exactitud:.2f}")

# Generar informe detallado
informe = classification_report(y_prueba, y_pred)
print(informe)

Este código entrena un modelo de Gradient Boosting para reconocer dígitos escritos a mano. El informe generado muestra las métricas para cada una de las diez clases.

Otra métrica relevante es la Curva ROC (Receiver Operating Characteristic) y el Área Bajo la Curva (AUC), que evalúan la capacidad del modelo para discriminar entre clases. La curva ROC es especialmente útil en clasificación binaria, ilustrando la relación entre la tasa de verdaderos positivos y la tasa de falsos positivos a diferentes umbrales.

Para calcular y visualizar la curva ROC en Scikit-Learn:

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, roc_auc_score

# Obtener las probabilidades de predicción
y_prob = modelo.predict_proba(X_prueba)[:, 1]

# Calcular la curva ROC y AUC
fpr, tpr, thresholds = roc_curve(y_prueba, y_prob, pos_label=1)
auc = roc_auc_score(y_prueba, y_prob)

# Graficar la curva ROC
plt.figure()
plt.plot(fpr, tpr, label=f'Curva ROC (AUC = {auc:.2f})', color='darkorange')
plt.plot([0, 1], [0, 1], linestyle='--', color='navy')
plt.xlabel('Tasa de Falsos Positivos')
plt.ylabel('Tasa de Verdaderos Positivos')
plt.title('Curva ROC')
plt.legend(loc='lower right')
plt.show()

En este ejemplo, se asume un modelo de clasificación binaria donde pos_label=1 indica la clase positiva. La curva ROC generada permite visualizar la eficacia del modelo para distintos umbrales, y el AUC resume esta eficacia en un solo valor.

Para problemas multiclase, la extensión de la curva ROC es más compleja, pero Scikit-Learn ofrece métodos para calcular el AUC en estos casos utilizando estrategias de binarización de etiquetas.

Además, la Curva Precision-Recall es útil cuando la clase positiva es rara o en casos de datos desbalanceados. Muestra la relación entre la precisión y la recuperación para diferentes umbrales, ayudando a encontrar el equilibrio óptimo.

Ejemplo de cálculo y visualización de la curva Precision-Recall:

from sklearn.metrics import precision_recall_curve, average_precision_score

# Calcular la curva Precision-Recall
precisiones, recuperaciones, thresholds = precision_recall_curve(y_prueba, y_prob)
ap = average_precision_score(y_prueba, y_prob)

# Graficar la curva Precision-Recall
plt.figure()
plt.step(recuperaciones, precisiones, where='post', color='b', alpha=0.7, label=f'AP = {ap:.2f}')
plt.xlabel('Recuperación')
plt.ylabel('Precisión')
plt.title('Curva Precision-Recall')
plt.legend(loc='upper right')
plt.show()

La métrica Average Precision (AP) resume el área bajo la curva Precision-Recall, proporcionando una medida única de rendimiento.

Es crucial seleccionar las métricas de evaluación adecuadas según el contexto y las características del problema. En situaciones donde las clases están desbalanceadas, confiar únicamente en la exactitud puede conducir a interpretaciones erróneas. Por ello, es recomendable utilizar una combinación de métricas para obtener una evaluación completa del modelo.

En resumen, las métricas de evaluación de clasificación son herramientas indispensables para medir y mejorar la calidad de los modelos predictivos. Scikit-Learn proporciona una amplia gama de funciones para calcular estas métricas de manera sencilla y eficiente, facilitando el desarrollo de modelos robustos y fiables.

Comparativa de modelos de clasificación

La propia documentación oficial de Scikit Learn ofrece una comparativa visual de cada uno de los algoritmos de clasificación que vamos a explorar en posteriores lecciones:

Aprende ScikitLearn GRATIS online

Ejercicios de esta lección Introducción a la clasificación

Evalúa tus conocimientos de esta lección Introducción a la clasificación con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de ScikitLearn

Accede a todas las lecciones de ScikitLearn y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Aprendizaje Automático

scikit-learn

Introducción Y Entorno

Introducción E Instalación

scikit-learn

Introducción Y Entorno

Introducción Al Preprocesamiento De Datos

scikit-learn

Preprocesamiento De Datos

Identificación Y Tratamiento De Valores Faltantes

scikit-learn

Preprocesamiento De Datos

Escalado De Datos

scikit-learn

Preprocesamiento De Datos

Normalización De Datos

scikit-learn

Preprocesamiento De Datos

Codificación De Variables Categóricas

scikit-learn

Preprocesamiento De Datos

Ingeniería De Características

scikit-learn

Preprocesamiento De Datos

Selección De Características

scikit-learn

Preprocesamiento De Datos

Extracción De Características

scikit-learn

Preprocesamiento De Datos

Particionamiento De Datos

scikit-learn

Preprocesamiento De Datos

Preprocesamiento De Datos Desbalanceados

scikit-learn

Preprocesamiento De Datos

Introducción A La Regresión

scikit-learn

Regresión

Regresión Lineal

scikit-learn

Regresión

Regresión Knn Kneighborsregressor

scikit-learn

Regresión

Regresión Svm Con Svr

scikit-learn

Regresión

Regresión Con Árboles Decisiontreeregressor

scikit-learn

Regresión

Regresión Con Algoritmos De Conjunto

scikit-learn

Regresión

Introducción A La Clasificación

scikit-learn

Clasificación

Clasificación Con Regresión Logística

scikit-learn

Clasificación

Clasificación Knn Kneighborsclassifier

scikit-learn

Clasificación

Clasificación Svm Con Svc

scikit-learn

Clasificación

Clasificación Con Árboles Decisiontreeclassifier

scikit-learn

Clasificación

Clasificación Con Algoritmos De Conjunto

scikit-learn

Clasificación

Reducción De La Dimensionalidad Con Pca

scikit-learn

Aprendizaje No Supervisado

Clustering Con Kmeans

scikit-learn

Aprendizaje No Supervisado

Clustering Jerárquico

scikit-learn

Aprendizaje No Supervisado

Clustering De Densidad Con Dbscan

scikit-learn

Aprendizaje No Supervisado

Preprocesamiento De Textos Para Nlp

scikit-learn

Nlp

Representación De Texto Y Extracción De Características

scikit-learn

Nlp

Clasificación De Texto Con Scikit Learn

scikit-learn

Nlp

Análisis De Sentimiento

scikit-learn

Nlp

Técnicas Avanzadas De Extracción De Características

scikit-learn

Nlp

Introducción Al Análisis De Series Temporales

scikit-learn

Series Temporales

Preprocesamiento De Datos De Series Temporales

scikit-learn

Series Temporales

Ingeniería De Características Para Series Temporales

scikit-learn

Series Temporales

Transformación Y Escalado De Series Temporales

scikit-learn

Series Temporales

Validación Y Evaluación De Modelos En Series Temporales

scikit-learn

Series Temporales

Validación Y Evaluación De Modelos

scikit-learn

Validación De Modelos

Técnicas De Validación Cruzada

scikit-learn

Validación De Modelos

Métricas De Regresión

scikit-learn

Validación De Modelos

Métricas De Clasificación

scikit-learn

Validación De Modelos

Ajuste De Hiperparámetros

scikit-learn

Validación De Modelos

Introducción A Pipelines

scikit-learn

Pipelines Y Despliegue

Creación De Pipelines Básicos

scikit-learn

Pipelines Y Despliegue

Preprocesamiento De Datos Con Pipelines

scikit-learn

Pipelines Y Despliegue

Pipelines Y Validación Cruzada

scikit-learn

Pipelines Y Despliegue

Pipelines Con Columntransformer

scikit-learn

Pipelines Y Despliegue

Exportar E Importar Pipelines

scikit-learn

Pipelines Y Despliegue

Accede GRATIS a ScikitLearn y certifícate

Objetivos de aprendizaje de esta lección

  • Comprender el concepto de clasificación en aprendizaje automático.
  • Diferenciar entre clasificación binaria y multiclase.
  • Identificar casos prácticos en los que se aplica la clasificación.
  • Conocer los algoritmos de clasificación disponibles en Scikit-Learn.
  • Implementar modelos de clasificación utilizando Scikit-Learn.
  • Aplicar técnicas de preprocesamiento y codificación de variables categóricas.
  • Evaluar modelos de clasificación empleando métricas adecuadas.