【机器学习+python(7)】手动获取随机数据

欢迎关注哈希大数据微信公众号【哈希大数据】


生成特定分布的随机数据

本期导读:

机器学习中,模型的训练和构建是一个算法的核心所在。但是当我们手边没有合适的数据时该如何进行算法的设计呢?因此本节将为大家介绍:

  • 随机数据的获取方式

  • 生成特定分布的数据

  • 存储生成的随机数据

本文是机器学习系列的第7篇干货,约1396字,预计阅读时间约5分钟。

1使用numpy生成数据

numpy适合用来生产一些简单的抽样数据。需要使用的模块为Random

  • 生成[0,1]之间的多维数组:

示例表示生成2组3行两列的数据,而且每个值要求在0-1之间。

print(np.random.rand(2,3,2))
  • 生成服从(0,1)正态分布的标准数组:

示例同上,只是数值服从正态分布。

print(np.random.randn(2,3,2))
  • 生成服从N(μ,σ2)正态分布的数组:

示例是服从均值为1,方差为4的数组。

print(2*np.random.randn(2,3,2) + 1)
  • 生成整数形式的数组:

示例是表示生成1,4之间的3行2列的数组。如果只写一个数字n表示从0开始到n(n取不到)的数组。random_integers,表示最大值2可以取到。

print(np.random.randint(1, 5, size=[3,2]))
print(np.random.random_integers(2, size=[2,2,4])
  • 生成浮点数形式的随机数

示例是表示生成2,6之间的4个浮点数组。

print((6-2)*np.random.random_sample(4)+2)

2使用sklearn生成特定分布的数据

scikit-learn生成随机数据的API都在datasets类中,和numpy比起来,可以用来生成回归、分类、聚类等机器学习相关模型的数据。需要使用的模块为:

#生成回归模型数据from sklearn.datasets.samples_generator import make_regression#生成分类模型数据from sklearn.datasets import make_classificationfrom sklearn.datasets import make_hastie_10_2#生成聚类模型数据from sklearn.datasets import make_blobs#生成正态分布模型数据from sklearn.datasets import make_gaussian_quantiles1请输入标题

接下来我们将借助数据分布图展示生成的数据:

  • 首先,生成一个画布分为3行2列,可以画6个小图,并指定大小和位置。
plt.figure(figsize=(8, 8))plt.subplots_adjust(bottom=.05, top=.9, left=.05, right=.95)
  • 生成回归数据样本
plt.subplot(321)plt.title("生成回归数据样本", fontsize='small')# 生成500个样本数据,其中X表示样本特征,每个样本有一个特征,y表示样本取值, coef为样本回归系数,X0, Y0, coef = make_regression(n_samples=500, n_features=1 ,noise=30, coef=True)plt.scatter(X0, Y0,  color='purple',marker='*')plt.plot(X0, X0*coef, color='yellow',linewidth=3, label='回归模型')
  • 生成多分类数据样本
plt.subplot(322)plt.title("生成多分类数据样本", fontsize='small')# # X1为样本特征,Y1为样本类别输出, 共500个样本,每个样本3个有效特征2个冗余特征1个重复特征,输出有3个类别X1, Y1 = make_classification(n_samples=500 , n_features=6, n_redundant=2, n_informative=3,n_clusters_per_class=1,n_repeated=1,n_classes=3)plt.scatter(X1[:, 0], X1[:, 1], marker='*', c=Y1)
  • 生成2分类数据样本
plt.subplot(323)plt.title("hastie生成2分类数据样本",fontsize='small')X2, Y2 = make_hastie_10_2(n_samples=500)plt.scatter(X2[:, 0], X2[:, 1], marker='+', c=Y2)
  • 生成聚类数据样本
plt.subplot(324)plt.title("生成聚类数据样本", fontsize='small')# X3为样本特征,Y3为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,并依次给出簇位置和方差X3, Y3 = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [1,1], [2,2],[3,3]], cluster_std=[0.2, 0.7, 0.5,0.3],)plt.scatter(X3[:, 0], X3[:, 1], marker='+', c=Y3)
  • 生成单分类数据样本
plt.subplot(325)plt.title("生成单分类数据样本", fontsize='small')# # X1为样本特征,Y1为样本类别输出, 共500个样本,每个样本2个特征,输出有3个类别,没有冗余特征,每个类别一个簇X4, Y4 = make_classification(n_samples=500 , n_features=2, n_redundant=0, n_informative=1,n_clusters_per_class=1,n_repeated=0,n_classes=1)plt.scatter(X4[:, 0],X4[:, 1], marker='*', c=Y4)
  • 生成高斯正态分布数据样本
plt.subplot(326)plt.title("正态分布数据样本", fontsize='small')#生成2维正态分布,生成的数据按分位数分成3组,1000个样本,2个样本特征均值为1和2,协方差系数为2X5, Y5 = make_gaussian_quantiles(n_samples=1000, n_features=2, n_classes=3, mean=[1,2],cov=2)plt.scatter(X5[:, 0], X5[:, 1], marker='*', c=Y5)

结果展示:


【机器学习+python(7)】手动获取随机数据_第1张图片
image.png

3 保存获取的数据

以多分类数据为例,我们将得到的分类数据结果及其属性存入csv文件。

plt.subplot(322)plt.title("生成多分类数据样本", fontsize='small')# # X1为样本特征,Y1为样本类别输出, 共500个样本,每个样本3个有效特征2个冗余特征1个重复特征,输出有3个类别X1, Y1 = make_classification(n_samples=500 , n_features=6, n_redundant=2, n_informative=3,n_clusters_per_class=1,n_repeated=1,n_classes=3)plt.scatter(X1[:, 0], X1[:, 1], marker='*', c=Y1)csv_records = pd.DataFrame(X1,Y1)csv_records.to_csv('../data/classes_data.csv',header=False)

存入结果:可得到500条分类数据,第一列0,1,2表示三个类别,其他类为属性(其中有冗余属性和重复属性,按照所需生成的。)

【机器学习+python(7)】手动获取随机数据_第2张图片
image

你可能感兴趣的:(【机器学习+python(7)】手动获取随机数据)