7.3. 生成数据集#
此外,scikit-learn 包含各种随机样本生成器,可用于构建受控大小和复杂度的人工数据集。
7.3.1. 用于分类和聚类的生成器#
这些生成器生成特征矩阵和相应的离散目标。
7.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()
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()
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()
make_hastie_10_2
生成类似的二元 10 维问题。
make_circles
和 make_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()
7.3.1.2. 多标签#
make_multilabel_classification
生成具有多个标签的随机样本,反映从主题混合中提取的词袋。每个文档的主题数量是从泊松分布中提取的,主题本身是从固定的随机分布中提取的。类似地,单词数量是从泊松分布中提取的,单词是从多项式分布中提取的,其中每个主题都定义了单词的概率分布。相对于真实的词袋混合,简化包括
每个主题的词分布是独立绘制的,而在现实中,所有分布都会受到稀疏基分布的影响,并且会相关。
对于从多个主题生成的文档,所有主题在生成其词袋时权重相等。
文档随机地没有标签词,而不是来自基分布。
7.3.1.3. 双聚类#
|
为双聚类生成一个常数块对角结构数组。 |
|
生成一个具有块状棋盘结构的数组,用于双聚类。 |
7.3.2. 回归生成器#
make_regression
生成回归目标,作为随机特征的可选稀疏随机线性组合,并带有噪声。其信息特征可能不相关,或者低秩(少数特征解释了大部分方差)。
其他回归生成器根据随机特征确定性地生成函数。make_sparse_uncorrelated
生成一个目标,作为四个具有固定系数的特征的线性组合。其他生成器则显式地编码非线性关系:make_friedman1
通过多项式和正弦变换相关;make_friedman2
包括特征相乘和倒数;make_friedman3
类似,但对目标应用了反正切变换。
7.3.3. 流形学习生成器#
|
生成一个S曲线数据集。 |
|
生成一个瑞士卷数据集。 |
7.3.4. 分解生成器#
|
生成一个主要为低秩的矩阵,其奇异值呈钟形分布。 |
|
将信号生成字典元素的稀疏组合。 |
|
生成一个随机的对称正定矩阵。 |
|
生成一个稀疏对称正定矩阵。 |