无中生有——利用sklearn.datasets生成数据

我们做模型练习时候经常会苦恼没有数据集,正所谓巧妇难为无米之炊,但是有了sklearn.datasets,这都不是事儿!

代码如下:

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.datasets import make_blobs
from sklearn.datasets import make_gaussian_quantiles
from sklearn.datasets import make_hastie_10_2

%matplotlib inline
plt.figure(figsize=(10,10))
plt.subplots_adjust(bottom=.05, top=.9, left=.05, right=.95)

#分类模型随机数生成方法
#n_samples:生成样本数
#n_features:样本特征数,特征个数= n_informative() + n_redundant + n_repeated
#n_informative:多信息特征的个数
#n_repeated :重复信息,随机提取n_informative和n_redundant 特征
#n_classes:生成类别数
#n_redundant:样本冗余特征数,informative特征的随机线性组合
#random_state:随机种子,使得随机状可重

plt.subplot(421)
plt.title("One informative feature, one cluster per class", fontsize='small')
X1, Y1 = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=1, n_clusters_per_class=1)
plt.scatter(X1[:,0], X1[:,1], marker='o', c=Y1)

plt.subplot(422)
plt.title("Two informative features, One cluster per class", fontsize='small')
X2, Y2 = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2, n_clusters_per_class=1)
plt.scatter(X2[:,0], X2[:,1], marker='o', c=Y2)

plt.subplot(423)
plt.title("Two informative features, Two clusters per class", fontsize='small')
X3, Y3 = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2, n_clusters_per_class=2)
plt.scatter(X3[:,0], X3[:,1], marker='o', c=Y3)

plt.subplot(424)
plt.title("Multi-class, Two informative features, One cluster", fontsize='small')
X4, Y4 = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2, n_clusters_per_class=1, n_classes=3)
plt.scatter(X4[:,0], X4[:,1], marker='o', c=Y4)

#make_blobs聚类模型随机数据生成
#n_samples(生成样本数)
#n_features(样本特征数)
#centers(簇中心的个数或者自定义的簇中心,可以输入int数字,代表有几个中心,也可以输入几个坐标(fixed center locations))
#cluster_std(簇数据方差,代表簇的聚合程度)
plt.subplot(425)
plt.title("Three blobs", fontsize='small')
X5, Y5 = make_blobs(n_samples=1000, n_features=2, centers=3)
plt.scatter(X5[:,0], X5[:,1], marker='o', c=Y5)

#make_gaussian_quantiles生成分组多维正态分布的数据
#n_samples(生成样本数)
#n_features(正态分布的维数)
#mean(特征均值)
#cov(样本协方差的系数) 
#n_classes(数据在正态分布中按分位数分配的组数)
#shuffle(布尔变量 可选 默认为True,是否打乱样本)
#random_state(整数 RandomState instance or None,确定数据集变换和噪声的随机数生成)
#sklearn.datasets.make_gaussian_quantiles(mean=None, cov=1.0, n_samples=100, n_features=2, n_classes=3, shuffle=True, random_state=None)
#make_gaussian_quantiles 将single Gaussian cluster(单高斯簇)分成近乎相等大小的同心超球面分离。
plt.subplot(426)
plt.title("Gaussian divided into four quantiles", fontsize='small')
X6, Y6 = make_gaussian_quantiles(n_samples=1000, n_features=2, n_classes=4)
plt.scatter(X6[:,0], X6[:,1], marker='o', c=Y6)

#利用Hastie算法来生成二分类数据,产生与make_gaussian_quantiles类似的二分类、10维数据集
plt.subplot(427)
plt.title("hastie data", fontsize='small')
X7, Y7 = make_hastie_10_2(n_samples=1000);
plt.scatter(X7[:,8], X7[:,2], marker='o', c=Y7)     #此处数据集为10维,所以可以取X7[:,0]、X7[:,1]、、、X7[:,9]中任两个
plt.show()

生成图片:

from sklearn.datasets import make_circles
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

#生成环形数据
#sklearn.datasets.make_circles(n_samples=100, shuffle=True, noise=None, random_state=None, factor=0.8)
#n_samples:整数 可选 默认为100,生成的总点数。
#shuffle:布尔变量 可选 默认为True,是否打乱样本。当shuffle为True时,内外圆的数据是交叉出现,当shuffle为False时,内外圆的数据没有出现交叉
#noise:double 或None  默认为None,将高斯噪声的标准差加入到数据中,当noise参数比较小时,取样点比较集中,当noise参数比较大时,取样点比较分散
#random_state:整数 RandomState instance or None,确定数据集变换和噪声的随机数生成。
#factor:0 < double < 1 默认值0.8,内外圆之间的比例因子
fig = plt.figure(1)
x1, y1 = make_circles(n_samples=1000, factor=.5, noise=.1)
plt.subplot(121)
plt.title("make_circles function example")
plt.scatter(x1[:,0], x1[:,1], marker='o', c=y1)

#生成半环形数据
#sklearn.datasets.make_moons(n_samples=100, shuffle=True, noise=None, random_state=None)
plt.subplot(122)
x2, y2 = make_moons(n_samples=1000, noise=.1)
plt.title("make_moons function example")
plt.scatter(x2[:,0], x2[:,1], marker='o', c=y2)
plt.show()
 

生成图片:

猜你喜欢

转载自blog.csdn.net/weixin_44530236/article/details/87828387
今日推荐