前文:【sklearn】dataset模块(1)—— 玩具数据集、远程数据集 介绍了几种datasets模块自带的数据集,但有些时候我们需要自定义生成服从某些分布某些形状的数据集,这时就可以使用datasets中提供的各种随机样本的生成器,建立可控制的大小和复杂性人工数据集。
全部加载方法
datasets.make_biclusters
datasets.make_blobs
datasets.make_checkerboard
datasets.make_circles
datasets.make_classification
datasets.make_friedman1
datasets.make_friedman2
datasets.make_friedman3
datasets.make_gaussian_quantiles
datasets.make_hastie_10_2
datasets.make_low_rank_matrix
datasets.make_moons
datasets.make_multilabel_classification
datasets.make_regression
datasets.make_s_curve
datasets.make_sparse_coded_signal
datasets.make_sparse_spd_matrix
datasets.make_sparse_uncorrelated
datasets.make_spd_matrix
datasets.make_swiss_roll
常用方法
生成方法 | 介绍 |
---|---|
make_blobs() | 多类单标签数据集,为每个类分配一个或多个正太分布的点集 |
make_classification() | 多类单标签数据集,为每个类分配一个或多个正太分布的点集,提供了为数据添加噪声的方式,包括维度相关性,无效特征以及冗余特征等 |
make_gaussian-quantiles() | 将一个单高斯分布的点集划分为两个数量均等的点集,作为两类 |
make_hastie-10-2() | 产生一个相似的二元分类数据集,有10个维度 |
make_circle 和 make_moom() | 产生二维二元分类数据集来测试某些算法的性能,可以为数据集添加噪声,可以为二元分类器产生一些球形判决界面的数据 |
make_blobs
产生多类单标签数据集,它为每个类分配服从一个或多个(每个维度)正态分布的点集,对于中心和各簇的标准偏差提供了更好的控制,可用于演示聚类。
方法原型
sklearn.datasets.make_blobs(n_samples=100,
n_features=2,
*,
centers=None,
cluster_std=1.0,
center_box=(-10.0, 10.0),
shuffle=True,
random_state=None,
return_centers=False,)
参数表
参数 | 类型 | 默认 | 说明 |
---|---|---|---|
n_samples | int类型 | 可选参数 (default=100) | 总的点数,平均的分到每个clusters中。 |
n_features | int类型 | 可选参数 (default=2) | 每个样本的特征维度。 |
centers | int类型 or 聚类中心坐标元组构成的数组类型 | 可选参数(default=3) | 产生的中心点的数量, or 固定中心点位置。 |
cluster_std | float or floats序列 | 可选参数 (default=1.0) | clusters的标准差。 |
center_box | 一对floats (min, max) | 可选参数 (default=(-10.0, 10.0)) | 随机产生数据的时候,每个cluster中心的边界。 |
shuffle | boolean | 可选参数 (default=True) | 打乱样本。 |
说明:
n_samples
个数据点,每个数据点有n_features
个维度,服从第i
维方差为cluster_std[i]
的n_features
维正态分布,数据点(及其每个维度)分为centers
类。每一类中心点的每一维都处于center_box
给出的数轴边界内。n_features
维超立方体空间中的一个立方体,它的每个维度都服从指定的正态分布示例
import numpy as np
from sklearn import datasets
from matplotlib import pyplot as plt
my_datas = datasets.make_blobs(n_samples=1500,
n_features=5,
centers=3,
center_box = (-10,10),
cluster_std=[1.0,2.0,3.0])
x,y = my_datas
plt.scatter(x[:, 0], x[:, 1], c=y, s=8)
#print(x)
#print(y)
make_classification
产生多类单标签数据集,它为每个类分配服从一个或多个(每个维度)正态分布的点集,提供了为数据添加噪声的方式,包括维度相关性,无效特征(随机噪声)以及冗余特征等。
方法原型
sklearn.datasets.make_classification(n_samples=100,
n_features=20,
*,
n_informative=2,
n_redundant=2,
n_repeated=0,
n_classes=2,
n_clusters_per_class=2,
weights=None,
flip_y=0.01,
class_sep=1.0,
hypercube=True,
shift=0.0,
scale=1.0,
shuffle=True,
random_state=None,)
文档:
文档介绍:
n_informative
维,边长为2*class_sep
的超立方体,首先创建服从关于其顶点的正态分布(标准差std = 1)的点的簇,并为每个类分配相等数量的簇,它引入了这些特征之间的相互依赖性。然后可以为数据进一步添加各种类型的噪声。n_informative
特征n_redundant
n_repeated
重复项,这是从informative和redundant特征中进行替换随机绘制的。X [:,:n_informative + n_redundant + n_repeated]
中。参数表
参数 | 类型 | 默认 | 说明 |
---|---|---|---|
n_samples | int | optional (default=100) | 样本数量. |
n_features | int | optional (default=20) | 总的特征数量, 其中包括信息特征n_informative 个,冗余特征n_redundant 个,重复特征n_repeated 个,其余为随机绘制的无用特征。 |
n_informative | int | optional (default=2) | 信息特征的数量。每个类由多个高斯簇组成,每个高斯簇都位于n_informative维子空间中超立方体的顶点周围。 对于每个簇,信息特征是独立地绘制自正态分布N(0,1),然后随机线性组合各个簇中以增加协方差。簇位于在超立方体的顶点上。 |
n_redundant | int | optional (default=2) | 冗余特征的数量。这些特征是作为信息特征的随机线性组合生成的 |
n_repeated | int | optional (default=0) | 重复特征的数量。这些特征是从信息特征和冗余特征中随机抽取的 |
n_classes | int | optional (default=2) | 分类问题的类(或标签)数。 |
n_clusters_per_class | int | optional (default=2) | 每个类的簇数量。 |
weights | floats列表 or None | (default=None) | 每个类的权重,用于控制分配给每个类别的样本比例。取值为None时均匀分配,否则根据floats列表给出的比例分配(这个列表长n_classes或n_classes-1,后者会自动推断最后一个类别样本比例)。如果比例之和大于1,返回样本数量可能超过n_samples |
flip_y | float | optional (default=0.01) | 随机分配类别的样本所占的比例。 较大的值会在标签中引入噪音,并使分类任务更加困难。 请注意,在某些情况下,默认设置flip_y> 0可能导致y中的类别数少于n_class。 |
class_sep | float | optional (default=1.0) | 超立方体大小的乘数因子。较大的取值分散了簇/类别,使分类任务更加容易。 |
hypercube | boolean | optional (default=True) | 如果为True,则将簇放置在超立方体的顶点上。 如果为False,则将簇放在随机多面体的顶点上。 |
shift | float,array of shape [n_features] or None | optional (default=0.0) | 按指定值移动特征。 如果为None,则将特征移动 [-class_sep,class_sep] 中的随机值。 |
scale | float array of shape [n_features] or None | optional (default=1.0) | 将特征乘以指定值进行缩放。 如果为None,则按[1,100]中随机选取的值缩放特征。 注意特征缩放是在特征移动后发生的。 |
shuffle | boolean | optional (default=True) | 随机排列样本和特征。 |
random_state | int,RandomState instance or None | optional (default=None) | 如果int,random_state是随机数生成器使用的种子;如果是随机状态实例,random_state是随机数生成器;如果为None,则随机数生成器是np.random使用的随机状态实例 |
示例1
import numpy as np
from sklearn import datasets
from matplotlib import pyplot as plt
# datasets.make_classification?
# 要求:n_classes * n_clusters_per_class <= 2^n_informative
data1,target1 = datasets.make_classification(n_samples=100, # 样本总数
n_features=2, # 特征总数 = n_informative + n_redundant + n_repeated + 随机噪声特征
n_informative=1,
n_redundant=0,
n_repeated=0,
n_clusters_per_class=1) # 每个类的簇数量
data2,target2= datasets.make_classification(n_samples=100,
n_features=2,
n_informative=1,
n_redundant=0,
n_repeated=1,
n_clusters_per_class=1)
data3,target3= datasets.make_classification(n_samples=200,
n_features=2,
n_informative=2,
n_redundant=0,
n_repeated=0,
n_clusters_per_class=1)
data4,target4 = datasets.make_classification(n_samples=100, # 样本总数
n_features=2, # 特征总数 = n_informative + n_redundant + n_repeated + 随机噪声特征
n_informative=2,
n_redundant=0,
n_repeated=0,
n_classes=2,
n_clusters_per_class=2) # 每个类的簇数量
fig,axes = plt.subplots(1,4)
axes[0].scatter(data1[:,0],data1[:,1],c=target1)
axes[1].scatter(data2[:,0],data2[:,1],c=target2)
axes[2].scatter(data3[:,0],data3[:,1],c=target3)
axes[3].scatter(data4[:,0],data4[:,1],c=target4)
plt.show()
示例2
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
plt.figure(figsize=(10,10)) # 创建一个10 * 10 英寸的图像
plt.subplots_adjust(bottom=0.05,top=0.9,left=0.05,right=0.95)
plt.subplot(221)
plt.title("One informative feature, one cluster per class",fontsize='small')
X1,Y1= make_classification(n_samples=1000,
n_features=2,
n_informative=1,
n_redundant=0,
n_clusters_per_class=1)
plt.scatter(X1[:,0],X1[:,1],marker='o',c=Y1)
plt.subplot(222)
plt.title("Two informative features, two cluster per class", fontsize='small')
X2,Y2 = make_classification(n_samples=1000,
n_features=2,
n_informative=2,
n_redundant=0,
n_clusters_per_class=2)
plt.scatter(X2[:,0],X2[:,1],marker='o',c=Y2)
plt.subplot(223)
plt.title("Two informative features, two clusters per class", fontsize='small')
X3,Y3 = make_classification(n_samples=1000,
n_features=2,
n_informative=2,
n_redundant=0,
n_clusters_per_class=2)
plt.scatter(X3[:,0],X3[:,1],marker='o',c=Y3)
plt.subplot(224)
plt.title("Multi-class, two informative features, one cluster",fontsize='small')
X4,Y4= make_classification(n_samples=1000,
n_features=2,
n_informative=2,
n_redundant=0,
n_classes=3,
n_clusters_per_class=1)
plt.scatter(X4[:,0],X4[:,1],marker='o',c=Y4)
plt.show()
make_gaussian_quantiles
产生多类单标签数据集。它通过 χ 2 \chi^2 χ2 分布的分位数(quantile)将single Gaussian cluster(单高斯簇)进行近乎相等大小的同心超球面划分,生成各向同性的高斯样本及其标签。简单说,此分类数据集是从一个多维标准正态分布采样得到的,若干嵌套的同心多维球体将采样数据划分为各个类别,这种划分使每个类中的样本数量大致相等
方法原型
datasets.make_gaussian_quantiles(*,
mean=None,
cov=1.0,
n_samples=100,
n_features=2,
n_classes=3,
shuffle=True,
random_state=None,)
参数表
参数 | 类型 | 默认 | 说明 |
---|---|---|---|
mean | array of shape [n_features] | 可选参数 (default=None) | 多维正态分布的均值。如果为None,则使用原点(0,0,…) |
cov | float | 可选参数 (default=1) | 该值乘以单位矩阵得到协方差矩阵。该数据集仅产生对称的正态分布 |
n_samples | int | 可选参数(default=100) | 平均分散在各类别中的数据点总数 |
n_features | int | 可选参数 (default=2) | 每个样本的特征数量 |
n_classes | int | 可选参数 (default=3) | 类别数量 |
shuffle | boolean | 可选参数 (default=True) | 打乱样本 |
random_state | int,RandomState instance or None | optional (default=None) | 如果int,random_state是随机数生成器使用的种子;如果是随机状态实例,random_state是随机数生成器;如果为None,则随机数生成器是np.random使用的随机状态实例 |
示例
import numpy as np
from sklearn import datasets
from matplotlib import pyplot as plt
# datasets.make_gaussian_quantiles?
# 要求:len(mean) == n_features
X,y = datasets.make_gaussian_quantiles(mean=[1,2,3],
cov=2,
n_samples=1000,
n_features=3,
n_classes=3,)
fig = plt.figure(figsize = (12,6))
a0 = fig.add_subplot(1,2,1,label='a0')
a0.scatter(X[:,0],X[:,1],c=y)
a1 = fig.add_subplot(1,2,2,label='a1',projection='3d') #这种方法也可以画多个子图
a1.scatter(X[:,0],X[:,1],X[:,2],alpha=0.5,c=y) # alpha透明度,c颜色序列
#plt.scatter(X[:,0],X[:,1],marker='o',c=y,s=3)
plt.tight_layout()
plt.show()
make_hastie_10_2
产生一个相似的二元分类数据集,每个样本有10个维度,分别服从独立的高斯分布,样本 X[i] 的标签根据以下公式生成
方法原型
datasets.make_hastie_10_2(n_samples=12000,
*,
random_state=None)
示例
import numpy as np
from sklearn import datasets
from matplotlib import pyplot as plt
my_datas = datasets.make_hastie_10_2(n_samples = 10000)
X,y = my_datas
plt.scatter(X[:, 0], X[:, 1], c=y, s=8)
make_circles
产生一个环状二分类单标签数据集。这是一个简单的玩具数据集,生成带有球面决策边界的数据,可以选择性加入高斯噪声,用于可视化聚类和分类算法。
方法原型
datasets.make_circles(n_samples=100,
*,
shuffle=True,
noise=None,
random_state=None,
factor=0.8,)
参数表
参数 | 类型 | 默认 | 说明 |
---|---|---|---|
n_samples | int or two-element tuple | 可选参数 (default=100) | 如果为int,则为生成的总点数(对于奇数,内圆将比外圆多一个点);如果是二元组,则为外圆和内圆中的点数。 |
noise | double or None | 可选参数 (default=None) | 加入的高斯噪声的标准差 |
n_samples | int | 可选参数(default=100) | 平均分散在各类别中的数据点总数 |
factor | 0 < double < 1 | 可选参数 (default=0.8) | 内外圆之间的比例因子 |
shuffle | boolean | 可选参数 (default=True) | 打乱样本 |
random_state | int,RandomState instance or None | optional (default=None) | 如果int,random_state是随机数生成器使用的种子;如果是随机状态实例,random_state是随机数生成器;如果为None,则随机数生成器是np.random使用的随机状态实例 |
示例
import numpy as np
from sklearn import datasets
from matplotlib import pyplot as plt
# datasets.make_circles?
my_datas = datasets.make_circles(n_samples=1000,
noise=0.1,
factor=0.8,)
X,y = my_datas
plt.scatter(X[:, 0], X[:, 1], c=y, s=8)
make_moon
产生一个月牙形单标签数据集。这是一个简单的玩具数据集,生成带有月牙形决策边界的数据,可以选择性加入高斯噪声,用于可视化聚类和分类算法。
方法原型
datasets.make_moons(n_samples=100,
*,
shuffle=True,
noise=None,
random_state=None)
参数表:和make_circles
相比就少一个factor
,其他一样
示例
import numpy as np
from sklearn import datasets
from matplotlib import pyplot as plt
# datasets.make_moons?
my_datas = datasets.make_moons(n_samples=1000,
noise=0.1,)
X,y = my_datas
plt.scatter(X[:, 0], X[:, 1], c=y, s=8)