没有数据就自己造数据

2019-06-18 20:56:30 浏览数 (1)

学习了一段时间的机器学习发现除了各种算法原理的公式推导比较麻烦之外,没有数据也是很痛苦,在训练各种算法模型的时候,一个良好的数据集就已经成功一大半了,那么剩下的就是调参优化。那么问题来了,不是任何时候我们都有一个现成的数据集可用,公共的数据集毕竟有限,如果自己去采集数据那么同样很烦,这是我们就要考虑自动生成数据集了。除了随机生成数据这种简单的方法之外,目前机器学习算法领域有各种函数库可以让我们调用,编程的难度不大,所以今天给大家介绍几个自动生成数据的Python库。

Scikit-Learning生成数据

Scikit-learn是一个用于机器学习任务的神奇Python库, 大家都熟悉的是其能够简单快速的实现ML算法,但同时它也可以帮你自动生成数据。下面列出几种数据的生成函数:

一、回归数据生成 :Scikit-learn的dataset.make_regression 函数可以创建随机回归数据,该数据可以具有任意多的输入和输出,同时还可以设置数据的混乱程度。

二、分类数据生成 :与回归类似, dataset.make_classification函数可以生成随机多分类数据集, 同时还可以随机交换输出符号的百分比以创建更难的分类数据集。

三、聚类数据生成 :有很多函数可用于生成聚类数据。 最直接的是datasets.make_blobs ,它生成具有可控距离参数的任意数量的聚类数据。

四、各向异性聚类数据生成 :通过使用矩阵乘法的简单转换,可以生成沿某个轴对齐或各向异性分布的聚类。

五、同心环簇数据生成 :为了高斯混合模型在特殊形状分布的聚类数据是有用的。 我们可以使用datasets.make_circles函数来实现这一点。

当然,我们可以在数据中加入一点噪音来测试聚类算法的稳定性,

六、月形群集数据生成 :我们可以使用datasets.make_moons函数生成用于测试算法的月形群集数据,同样可以设置噪声值来控制数据混乱程度。

根据表达式生成数据

虽然sklearn中提供了多种数据的生成方式,但是有时候我们需要根据我们的表达式来生成数据时就不能实现了。例如,我们想要评估SVM分类器的各种核函数对线性和非线性数据集的精准度,或者想要证明由函数生成的回归数据集的线性模型的限制等问题。 使用scikit-learn的这些函数很难做到这一点。因此为了解决这个问题,我们可以使用SymPy库来生成符合我们目标表达式的数据。例如,我们可以将符号表达式作为平方项( x² )和sin ( x )之类的正弦项的乘积,并创建一个随机化的回归数据集。

或者,可以生成用于测试神经网络算法的基于非线性椭圆分类边界的数据集。在下图中是根据表达式m='x1**2-x2**2'并生成的数据集。

Pydbgen生成分类数据

pydbgen是一个轻量级的python库,用于生成随机有用的条目(例如姓名,地址,信用卡号,日期,时间,公司名称,职位,车牌号等),并将它们保存在Pandas数据框对象中,或作为数据库文件或MS Excel文件中的SQLite表。在这里,我将展示几个带截图的简单数据生成示例,

一、随机生成姓名

二、生成一些国际电话号码

三、生成包括名称,地址,SSN等随机条目的完整数据

合成数据集在这方面可以提供极大的帮助,并且有一些现成的功能可用于尝试这种方法。 这些库基本能够满足我们日常的需要,但是当我们需要一个更复杂的数据集时,我们可能就需要自己编写程序或者实际采集了。

0 人点赞