Demonstrando Estratégias de KBinsDiscretizer

Beginner

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

Introdução

Neste laboratório, exploraremos as diferentes estratégias disponíveis na classe KBinsDiscretizer da biblioteca Python scikit-learn. KBinsDiscretizer é uma classe para discretizar características contínuas em características categóricas, agrupando os dados contínuos em intervalos (bins). Visualizaremos as diferentes estratégias aplicando-as a diferentes conjuntos de dados.

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 de carregar. 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

Começaremos importando as bibliotecas necessárias. Usaremos numpy, matplotlib.pyplot, make_blobs e KBinsDiscretizer do módulo sklearn.preprocessing.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.datasets import make_blobs

Criar Conjuntos de Dados

Criaremos três conjuntos de dados para fins de visualização. O primeiro conjunto de dados será um conjunto aleatório de 200 amostras de uma distribuição uniforme entre -3 e 3 em ambas as dimensões. O segundo conjunto de dados será um conjunto de 200 amostras geradas usando a função make_blobs de sklearn.datasets. O terceiro conjunto de dados também será gerado usando a função make_blobs.

n_samples = 200
centers_0 = np.array([[0, 0], [0, 5], [2, 4], [8, 8]])
centers_1 = np.array([[0, 0], [3, 1]])

X_list = [
    np.random.RandomState(42).uniform(-3, 3, size=(n_samples, 2)),
    make_blobs(
        n_samples=[n_samples // 10, n_samples * 4 // 10, n_samples // 10, n_samples * 4 // 10],
        cluster_std=0.5,
        centers=centers_0,
        random_state=42,
    )[0],
    make_blobs(
        n_samples=[n_samples // 5, n_samples * 4 // 5],
        cluster_std=0.5,
        centers=centers_1,
        random_state=42,
    )[0],
]

Aplicar Diferentes Estratégias

Agora, aplicaremos as três estratégias disponíveis em KBinsDiscretizer a cada um dos conjuntos de dados. As estratégias são:

  • 'uniform': A discretização é uniforme em cada característica, o que significa que as larguras dos bins são constantes em cada dimensão.
  • 'quantile': A discretização é feita nos valores quantilados, o que significa que cada bin possui aproximadamente o mesmo número de amostras.
  • 'kmeans': A discretização baseia-se nos centroides de um procedimento de agrupamento KMeans.
strategies = ["uniform", "quantile", "kmeans"]

figure = plt.figure(figsize=(14, 9))
i = 1
for ds_cnt, X in enumerate(X_list):
    ax = plt.subplot(len(X_list), len(strategies) + 1, i)
    ax.scatter(X[:, 0], X[:, 1], edgecolors="k")
    if ds_cnt == 0:
        ax.set_title("Dados de entrada", size=14)

    xx, yy = np.meshgrid(
        np.linspace(X[:, 0].min(), X[:, 0].max(), 300),
        np.linspace(X[:, 1].min(), X[:, 1].max(), 300),
    )
    grid = np.c_[xx.ravel(), yy.ravel()]

    ax.set_xlim(xx.min(), xx.max())
    ax.set_ylim(yy.min(), yy.max())
    ax.set_xticks(())
    ax.set_yticks(())

    i += 1
    ## transformar o conjunto de dados com KBinsDiscretizer
    for strategy in strategies:
        enc = KBinsDiscretizer(n_bins=4, encode="ordinal", strategy=strategy)
        enc.fit(X)
        grid_encoded = enc.transform(grid)

        ax = plt.subplot(len(X_list), len(strategies) + 1, i)

        ## listras horizontais
        horizontal = grid_encoded[:, 0].reshape(xx.shape)
        ax.contourf(xx, yy, horizontal, alpha=0.5)
        ## listras verticais
        vertical = grid_encoded[:, 1].reshape(xx.shape)
        ax.contourf(xx, yy, vertical, alpha=0.5)

        ax.scatter(X[:, 0], X[:, 1], edgecolors="k")
        ax.set_xlim(xx.min(), xx.max())
        ax.set_ylim(yy.min(), yy.max())
        ax.set_xticks(())
        ax.set_yticks(())
        if ds_cnt == 0:
            ax.set_title("estratégia='%s'" % (strategy,), size=14)

        i += 1

plt.tight_layout()
plt.show()

Visualizar Resultados

Agora, visualizaremos os resultados da aplicação das diferentes estratégias aos conjuntos de dados. Os gráficos mostram as regiões onde a codificação discretizada é constante.

Resumo

Neste laboratório, exploramos as diferentes estratégias disponíveis na classe KBinsDiscretizer da biblioteca Python scikit-learn. Criamos três conjuntos de dados e aplicamos as três estratégias diferentes a cada um deles. Em seguida, visualizamos os resultados da discretização.