机器学习:sklearn样本生成器,make_blob(), make_classification()

scikit-learn 包括各种随机样本的生成器,可以用来建立可控制的大小和复杂性人工数据集。

一、分类和聚类样本生成器

1.make_blob()

对于中心和各簇的标准偏差提供了更好的控制,可用于演示聚类。

sklearn.datasets.make_blobs(n_samples=100n_features=2centers=Nonecluster_std=1.0center_box(-10.010.0)

shuffle=Truerandom_state=None)

参数

n_samples       int或类数组,可选(默认值为100)。

如果是数组,则序列的每个元素表示每个聚簇的样本数量。

n_features        int,可选(默认=2)

每个示例的特征数量。

centers              int或shape数组[n_centers, n_features],可选(默认=无)

有两种情况,一种是int决定生成的中心数量,一种是array决定固定的中心位置。

如果n_samples是int,而centers为None,则生成3个中心。

如果n_samples是数组,则centers必须是None或长度等于n_samples长度的数组。

cluster_std        float或浮点序列,可选(默认值为1.0)

聚簇的标准差。

center_box      浮点数对 (min, max), 可选(默认值=(-10.0,10.0))

当随机生成中心时,每个聚簇中心的边界框。

shuffle              bool类型,可选(默认=True)

是否洗牌样本。

random_state   int、RandomState实例或None(默认值)

相当于随机数种子,决定数据集创建的随机数生成。

返回值

X    array of shape [n_samples, n_features]

生成的样本

y    array of shape [n_samples]

标签,标示样本属于那个聚簇,用整数表示

from sklearn.datasets import make_blobs
(X, y) = make_blobs(n_samples=1000, n_features=2, centers=2,
                    cluster_std=1.5, random_state=1)
plt.style.use("ggplot")
plt.figure()
plt.title("Data")
plt.scatter(X[:, 0], X[:,1], marker="o", c=np.squeeze(y), s=30)

  上面第二行就是代表生成数量各为500的两个聚簇,centers=2就是代表生成两个聚簇(centers默认值为3),真正各聚簇的中心随机而定,结果如下:

(X, y) = make_blobs(n_samples=[100,300,250,400], n_features=2,
                    centers=[[100,150],[250,400], [600,100],[300,500]],
                    cluster_std=50, random_state=1)
plt.style.use("ggplot")
plt.figure()
plt.title("Data")
plt.scatter(X[:, 0], X[:,1], marker="o", c=np.squeeze(y), s=30)

  这次代表生成四个聚簇,每个聚簇的数量分别为:100,300,250,400,因为已经决定了聚簇的数量,所以centers可以缺省,但如果要赋值的话,必须是包含四个中心位置坐标(也就是各个feature的取值)的数据。所以赋值数据大小是[n_samles数组长度,n_feature]

2.make_classification()

make_blob()对于中心和偏差的控制比较方便,而make_classification()则是专门通过引入相关的,冗余的和未知的噪音特征;将高斯集群的每个类复杂化。

sklearn.datasets.make_classification(n_samples=100n_features=20n_informative=2n_redundant=2n_repeated=0n_classes=2n_clusters_per_class=2weights=Noneflip_y=0.01class_sep=1.0hypercube=Trueshift=0.0scale=1.0shuffle=Truerandom_state=None)

参数

n_classes,类的数量

n_features,  总的特征数

n_informative  强指示性,提供功能性信息的特征数

n_redundant    冗余的特征个数

n_repeated     重复的特征个数

weight:各个类的占比

flip_y:    y噪声值的比重

class_sep:  类与类之间区分清楚的程度

hypercube: 如果为True,则将簇放置在超立方体的顶点上。 如果为False,则将簇放置在随机多面体的顶点上。

shift : 将各个特征的值移动,即加上或减去某个值

scale:  将各个特征的值乘上某个数,放大或缩小

返回值

X[n_samplles, n_informative + n_redundant + n_repeated]

y

3.多标签生成器

1和2都是单标签生成器,即每个sample对应一个y,多标签就是对应多个y

sklearn.datasets.make_multilabel_classification(n_samples=100n_features=20n_classes=5n_labels=2length=50allow_unlabeled=Truesparse=Falsereturn_indicator='dense'return_distributions=Falserandom_state=None)

二、回归生成器

make_regression()产生的回归目标作为一个可选择的稀疏线性组合的具有噪声的随机的特征。它的信息特征可能是不相关的或低秩(少数特征占大多数的方差),也即用于回归任务测试的样本生成器。

sklearn.datasets.make_regression(n_samples=100n_features=100n_informative=10n_targets=1bias=0.0effective_rank=Nonetail_strength=0.5noise=0.0shuffle=Truecoef=Falserandom_state=None)

更多的生成器可以参考官方文档

https://sklearn.apachecn.org/docs/master/47.html

原创文章 26 获赞 33 访问量 1916

猜你喜欢

转载自blog.csdn.net/qq_40765537/article/details/105315391