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_circlesmake_moons 生成二维二分类数据集,这些数据集对某些算法(例如,基于质心的聚类或线性分类)具有挑战性,并可选择包含高斯噪声。它们有助于可视化。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. 回归生成器#

make_regression 生成回归目标,这些目标是随机特征的可选稀疏随机线性组合,并带有噪声。其信息性特征可能是不相关的,或低秩的(少数特征解释了大部分方差)。

其他回归生成器根据随机特征确定性地生成函数。make_sparse_uncorrelated 生成一个目标,该目标是四个具有固定系数的特征的线性组合。其他则明确编码非线性关系:make_friedman1 通过多项式和正弦变换关联;make_friedman2 包括特征乘法和倒数;而 make_friedman3 类似地,对目标进行反正切变换。

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

生成一个稀疏的对称正定矩阵。