8.3. Сгенерированные наборы данных#

Кроме того, scikit-learn включает различные генераторы случайных образцов, которые могут использоваться для создания искусственных наборов данных контролируемого размера и сложности.

8.3.1. Генераторы для классификации и кластеризации#

Эти генераторы создают матрицу признаков и соответствующих дискретных целевых переменных.

8.3.1.1. Одиночная метка#

make_blobs Создать ветку релиза

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs

X, y = make_blobs(centers=3, cluster_std=0.5, random_state=0)

plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title("Three normally-distributed clusters")
plt.show()
../_images/sample_generators-1.png

make_classification также создает мультиклассовые наборы данных, но специализируется на внесении шума путем: коррелированных, избыточных и неинформативных признаков; нескольких гауссовых кластеров на класс; и линейных преобразований пространства признаков.

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

fig, axs = plt.subplots(1, 3, figsize=(12, 4), sharey=True, sharex=True)
titles = ["Two classes,\none informative feature,\none cluster per class",
          "Two classes,\ntwo informative features,\ntwo clusters per class",
          "Three classes,\ntwo informative features,\none cluster per class"]
params = [
    {"n_informative": 1, "n_clusters_per_class": 1, "n_classes": 2},
    {"n_informative": 2, "n_clusters_per_class": 2, "n_classes": 2},
    {"n_informative": 2, "n_clusters_per_class": 1, "n_classes": 3}
]

for i, param in enumerate(params):
    X, Y = make_classification(n_features=2, n_redundant=0, random_state=1, **param)
    axs[i].scatter(X[:, 0], X[:, 1], c=Y)
    axs[i].set_title(titles[i])

plt.tight_layout()
plt.show()
../_images/sample_generators-2.png

make_gaussian_quantiles разделяет единый гауссов кластер на классы почти равного размера, разделённые концентрическими гиперсферами.

import matplotlib.pyplot as plt
from sklearn.datasets import make_gaussian_quantiles

X, Y = make_gaussian_quantiles(n_features=2, n_classes=3, random_state=0)
plt.scatter(X[:, 0], X[:, 1], c=Y)
plt.title("Gaussian divided into three quantiles")
plt.show()
../_images/sample_generators-3.png

make_hastie_10_2 генерирует аналогичную бинарную 10-мерную задачу.

make_circles и make_moons генерировать 2D-наборы данных для бинарной классификации, которые являются сложными для определенных алгоритмов (например, кластеризации на основе центроидов или линейной классификации), включая опциональный гауссов шум. Они полезны для визуализации. make_circles генерирует гауссовские данные со сферической границей решений для бинарной классификации, в то время как make_moons создаёт два переплетающихся полукруга.

import matplotlib.pyplot as plt
from sklearn.datasets import make_circles, make_moons

fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(8, 4))

X, Y = make_circles(noise=0.1, factor=0.3, random_state=0)
ax1.scatter(X[:, 0], X[:, 1], c=Y)
ax1.set_title("make_circles")

X, Y = make_moons(noise=0.1, random_state=0)
ax2.scatter(X[:, 0], X[:, 1], c=Y)
ax2.set_title("make_moons")

plt.tight_layout()
plt.show()
../_images/sample_generators-4.png

8.3.1.2. Многометочная#

make_multilabel_classification генерирует случайные выборки с несколькими метками, отражая мешок слов, извлеченный из смеси тем. Количество тем для каждого документа извлекается из распределения Пуассона, а сами темы извлекаются из фиксированного случайного распределения. Аналогично, количество слов извлекается из распределения Пуассона, а слова извлекаются из мультиномиального распределения, где каждая тема определяет распределение вероятностей по словам. Упрощения по сравнению с истинными смесями мешка слов включают:

  • Распределения слов по темам рисуются независимо, хотя в реальности все будут затронуты разреженным базовым распределением и будут коррелированы.

  • Для документа, сгенерированного из нескольких тем, все темы взвешиваются равномерно при создании его мешка слов.

  • Документы без меток слов случайным образом, а не из базового распределения.

../_images/sphx_glr_plot_random_multilabel_dataset_001.png

8.3.1.3. Бикластеризация#

make_biclusters(shape, n_clusters, *[, ...])

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

make_checkerboard(shape, n_clusters, *[, ...])

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

8.3.2. Generators for regression#

make_regression генерирует регрессионные цели как случайную линейную комбинацию случайных признаков, возможно разреженную, с шумом. Его информативные признаки могут быть некоррелированными или иметь низкий ранг (несколько признаков объясняют большую часть дисперсии).

Другие генераторы регрессии генерируют функции детерминированно из рандомизированных признаков. make_sparse_uncorrelated генерирует цель как линейную комбинацию четырех признаков с фиксированными коэффициентами. Другие явно кодируют нелинейные отношения: make_friedman1 связано полиномиальными и синусоидальными преобразованиями; make_friedman2 включает умножение признаков и обращение; и make_friedman3 похож с arctan-преобразованием целевой переменной.

8.3.3. Генераторы для обучения многообразий#

make_s_curve([n_samples, noise, random_state])

Сгенерировать набор данных S-кривой.

make_swiss_roll([n_samples, noise, ...])

Сгенерировать набор данных 'швейцарский рулет'.

8.3.4. Генераторы для декомпозиции#

make_low_rank_matrix([n_samples, ...])

Сгенерировать в основном низкоранговую матрицу с колоколообразными сингулярными значениями.

make_sparse_coded_signal(n_samples, *, ...)

Сгенерировать сигнал как разреженную комбинацию элементов словаря.

make_spd_matrix(n_dim, *[, random_state])

Генерирует случайную симметричную, положительно определённую матрицу.

make_sparse_spd_matrix([n_dim, alpha, ...])

Сгенерировать разреженную симметричную положительно определённую матрицу.