Генерация мультиметкажных датасетов с использованием Scikit-Learn

Beginner

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

Введение

В этом практическом занятии мы научимся генерировать мультиметкажный датасет с использованием функции make_multilabel_classification библиотеки Scikit-Learn. Эта функция генерирует случайные выборки мультиметкажных данных, где каждый образец имеет значения двух признаков, которые распределены по-разному в двух классах.

Советы по работе с ВМ

После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки и определяем константы

Сначала нам нужно импортировать необходимые библиотеки и определить цвета и константу случайного зерна для генерации мультиметкажного датасета.

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

COLORS = np.array(
    [
        "!",
        "#FF3333",  ## красный
        "#0198E1",  ## синий
        "#BF5FFF",  ## фиолетовый
        "#FCD116",  ## желтый
        "#FF7216",  ## оранжевый
        "#4DBD33",  ## зеленый
        "#87421F",  ## коричневый
    ]
)

## Используем одно и то же случайное зерно для нескольких вызовов make_multilabel_classification,
## чтобы гарантировать одинаковые распределения
RANDOM_SEED = np.random.randint(2**10)

Определяем функцию для построения графика

Далее мы определяем функцию plot_2d, которая строит случайно сгенерированный мультиметкажный датасет. Она принимает три аргумента: n_labels, n_classes и 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

Эта функция генерирует датасет с использованием функции make_multilabel_classification с заданными параметрами. Затем она строит датасет с использованием функции scatter библиотеки Matplotlib. Функция возвращает вероятности классов и вероятности признаков.

Строим график датасета

Теперь мы строим случайно сгенерированный мультиметкажный датасет с использованием функции plot_2d. Создаем фигуру с двумя подграфиками и вызываем функцию plot_2d для каждого подграфика с разными значениями параметров.

_, (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()

Выводим вероятности классов и признаков

Наконец, мы выводим вероятности классов и признаков для каждого класса с использованием вероятностей классов и вероятностей признаков, возвращаемых функцией plot_2d.

print("The data was generated from (random_state=%d):" % RANDOM_SEED)
print("Class", "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]))

Резюме

В этом практическом занятии мы узнали, как генерировать мультиметкажный датасет с использованием функции make_multilabel_classification библиотеки Scikit-Learn. Мы также узнали, как построить график датасета и вывести вероятности классов и признаков.