Generación de conjuntos de datos de múltiples etiquetas con Scikit-Learn

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 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 laboratorio, aprenderemos a generar un conjunto de datos de múltiples etiquetas utilizando la función make_multilabel_classification de la biblioteca Scikit-Learn. La función genera muestras aleatorias de datos de múltiples etiquetas, donde cada muestra tiene conteos de dos características, que se distribuyen de manera diferente en cada una de dos clases.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/datasets -.-> lab-49255{{"Generación de conjuntos de datos de múltiples etiquetas con Scikit-Learn"}} ml/sklearn -.-> lab-49255{{"Generación de conjuntos de datos de múltiples etiquetas con Scikit-Learn"}} end

Importar las bibliotecas necesarias y definir constantes

Primero, necesitamos importar las bibliotecas necesarias y definir los colores y la constante de semilla aleatoria para generar el conjunto de datos de múltiples etiquetas.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_multilabel_classification as make_ml_clf

COLORS = np.array(
    [
        "!",
        "#FF3333",  ## rojo
        "#0198E1",  ## azul
        "#BF5FFF",  ## púrpura
        "#FCD116",  ## amarillo
        "#FF7216",  ## naranja
        "#4DBD33",  ## verde
        "#87421F",  ## marrón
    ]
)

## Utilizar la misma semilla aleatoria para múltiples llamadas a make_multilabel_classification para
## asegurar las mismas distribuciones
RANDOM_SEED = np.random.randint(2**10)

Definir la función de trazado

A continuación, definimos una función plot_2d que traza el conjunto de datos de múltiples etiquetas generado aleatoriamente. Toma tres argumentos: n_labels, n_classes y length.

def plot_2d(ax, n_labels=1, n_classes=3, length=50):
    X, Y, p_c, p_w_c = make_ml_clf(
        n_samples=150,
        n_features=2,
        n_classes=n_classes,
        n_labels=n_labels,
        length=length,
        allow_unlabeled=False,
        return_distributions=True,
        random_state=RANDOM_SEED,
    )

    ax.scatter(
        X[:, 0], X[:, 1], color=COLORS.take((Y * [1, 2, 4]).sum(axis=1)), marker="."
    )
    ax.scatter(
        p_w_c[0] * length,
        p_w_c[1] * length,
        marker="*",
        linewidth=0.5,
        edgecolor="black",
        s=20 + 1500 * p_c**2,
        color=COLORS.take([1, 2, 4]),
    )
    ax.set_xlabel("Feature 0 count")
    return p_c, p_w_c

Esta función genera el conjunto de datos utilizando la función make_multilabel_classification con los parámetros especificados. Luego, traza el conjunto de datos utilizando la función scatter de la biblioteca Matplotlib. La función devuelve las probabilidades de clase y las probabilidades de características.

Trazar el conjunto de datos

Ahora, trazamos el conjunto de datos de múltiples etiquetas generado aleatoriamente utilizando la función plot_2d. Creamos una figura con dos subtramas y llamamos a la función plot_2d para cada subtrama con valores de parámetro diferentes.

_, (ax1, ax2) = plt.subplots(1, 2, sharex="row", sharey="row", figsize=(8, 4))
plt.subplots_adjust(bottom=0.15)

p_c, p_w_c = plot_2d(ax1, n_labels=1)
ax1.set_title("n_labels=1, length=50")
ax1.set_ylabel("Feature 1 count")

plot_2d(ax2, n_labels=3)
ax2.set_title("n_labels=3, length=50")
ax2.set_xlim(left=0, auto=True)
ax2.set_ylim(bottom=0, auto=True)

plt.show()

Imprimir las probabilidades de clase y de características

Por último, imprimimos las probabilidades de clase y de características para cada clase utilizando las probabilidades de clase y de características devueltas por la función plot_2d.

print("Los datos se generaron a partir de (random_state=%d):" % RANDOM_SEED)
print("Clase", "P(C)", "P(w0|C)", "P(w1|C)", sep="\t")
for k, p, p_w in zip(["rojo", "azul", "amarillo"], p_c, p_w_c.T):
    print("%s\t%0.2f\t%0.2f\t%0.2f" % (k, p, p_w[0], p_w[1]))

Resumen

En este laboratorio, aprendimos cómo generar un conjunto de datos de múltiples etiquetas utilizando la función make_multilabel_classification de la biblioteca Scikit-Learn. También aprendimos cómo trazar el conjunto de datos e imprimir las probabilidades de clase y de características.