Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.

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

В этом примере показан генератор набора данных make_multilabel_classification. Каждый образец состоит из количества значений двух признаков (до 50 в сумме), распределённых по-разному для каждого из двух классов.

Точки помечены следующим образом, где Y означает, что класс присутствует:

1

2

3

Цвет

Y

N

N

Красный

N

Y

N

Синий

N

N

Y

Жёлтый

Y

Y

N

Фиолетовый

Y

N

Y

Оранжевый

Y

Y

N

Зелёный

Y

Y

Y

Коричневый

Звёздочкой отмечен ожидаемый образец для каждого класса; её размер отражает вероятность выбора метки этого класса.

Примеры слева и справа демонстрируют параметр n_labels: у большего числа образцов на правом графике есть 2 или 3 метки.

Обратите внимание, что этот двумерный пример очень вырожденный: обычно число признаков намного больше «длины документа», тогда как здесь документы гораздо длиннее словаря. Аналогично, при n_classes > n_features вероятность того, что признак позволяет отличить конкретный класс, значительно ниже.

n_labels=1, length=50, n_labels=3, length=50
The data was generated from (random_state=431):
Class   P(C)    P(w0|C) P(w1|C)
red     0.39    0.96    0.04
blue    0.20    0.17    0.83
yellow  0.41    0.71    0.29
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

import matplotlib.pyplot as plt
import numpy as np

from sklearn.datasets import make_multilabel_classification as make_ml_clf

COLORS = np.array(
    [
        "!",
        "#FF3333",  # red
        "#0198E1",  # blue
        "#BF5FFF",  # purple
        "#FCD116",  # yellow
        "#FF7216",  # orange
        "#4DBD33",  # green
        "#87421F",  # brown
    ]
)

# Use same random seed for multiple calls to make_multilabel_classification to
# ensure same distributions
RANDOM_SEED = np.random.randint(2**10)


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


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

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]))

Общее время выполнения скрипта: (0 минут 0.111 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_random_multilabel_dataset.ipynb

Download Python source code: plot_random_multilabel_dataset.py

Download zipped: plot_random_multilabel_dataset.zip

Связанные примеры

Классификация с несколькими метками

Дискретизация непрерывных признаков с помощью KBinsDiscretizer

Влияние изменения порога на самообучение

Анализ типа априорного распределения концентрации для вариационной гауссовой смеси Байеса

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/datasets/plot_random_multilabel_dataset.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API