Geração de Conjuntos de Dados Multirótulo com Scikit-Learn

Beginner

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

Introdução

Neste laboratório, aprenderemos a gerar um conjunto de dados multirótulo utilizando a função make_multilabel_classification da biblioteca Scikit-Learn. A função gera amostras aleatórias de dados multirótulo, onde cada amostra possui contagens de duas características, distribuídas de forma diferente em cada uma das duas classes.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar o carregamento. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Importar Bibliotecas Necessárias e Definir Constantes

Primeiro, precisamos importar as bibliotecas necessárias e definir as cores e a constante de semente aleatória para gerar o conjunto de dados multirótulo.

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

COLORS = np.array(
    [
        "!",
        "#FF3333",  ## vermelho
        "#0198E1",  ## azul
        "#BF5FFF",  ## roxo
        "#FCD116",  ## amarelo
        "#FF7216",  ## laranja
        "#4DBD33",  ## verde
        "#87421F",  ## marrom
    ]
)

## Utilize a mesma semente aleatória para múltiplas chamadas a make_multilabel_classification para garantir as mesmas distribuições
RANDOM_SEED = np.random.randint(2**10)

Definir a Função de Plotagem

Em seguida, definimos uma função plot_2d que plota o conjunto de dados multirótulo gerado aleatoriamente. Ela recebe três argumentos: n_labels, n_classes e 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("Contagem da Característica 0")
    return p_c, p_w_c

Esta função gera o conjunto de dados utilizando a função make_multilabel_classification com os parâmetros especificados. Em seguida, plota o conjunto de dados usando a função scatter da biblioteca Matplotlib. A função retorna as probabilidades de classe e as probabilidades de características.

Plotar o Conjunto de Dados

Agora, plotamos o conjunto de dados multirótulo gerado aleatoriamente usando a função plot_2d. Criamos uma figura com dois subplots e chamamos a função plot_2d para cada subplot com diferentes valores de parâmetro.

_, (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("Contagem da Característica 1")

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 as Probabilidades de Classe e de Característica

Finalmente, imprimimos as probabilidades de classe e de característica para cada classe utilizando as probabilidades de classe e de característica retornadas pela função plot_2d.

print("Os dados foram gerados de (random_state=%d):" % RANDOM_SEED)
print("Classe", "P(C)", "P(w0|C)", "P(w1|C)", sep="\t")
for k, p, p_w in zip(["red", "blue", "yellow"], 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]))

Resumo

Neste laboratório, aprendemos a gerar um conjunto de dados multirótulo utilizando a função make_multilabel_classification da biblioteca Scikit-Learn. Também aprendemos a plotar o conjunto de dados e a imprimir as probabilidades de classe e de característica.