教你在Python中用Scikit生成测试数据集(附代码、学习资料)

原文标题:How to Generate Test Datasets in Python with Scikit-learn

作者:Jason Brownlee

翻译:笪洁琼

校对:顾佳妮

本文教大家在测试数据集中发现问题以及在Python中使用scikit学习的方法。

测试数据集是一个小型的人工数据集,它可以让你测试机器学习算法或其它测试工具。

测试数据集的数据具有定义明确的性质,如线性或非线性,这允许您探索特定的算法行为。

scikit-learn Python库提供了一组函数,用于从结构化的测试问题中生成样本,用于进行回归和分类。

在本教程中,您将发现测试问题以及如何在Python中使用scikit学习。

完成本教程后,您将知道:

  • 如何生成多分类预测问题
  • 如何生成二分类预测问题
  • 如何生成线性回归预测测试问题

让我们开始吧

教程概述

本教程分为三个部分,分别是:

  • 测试数据集
  • 分类测试问题
  • 回归测试的问题

测试数据集

开发和实现机器学习算法遇到的问题是,您如何知道是否正确地实现了机器学习算法。

即使存在bug有些算法还是能执行。

测试数据集是一个较小的人为设计问题,它允许您测试和调试算法和测试工具。

它们还能帮助更好地理解算法的行为,以及超参数是如何在相应算法的执行过程进行改变的。

下面是测试数据集的一些理想属性:

它们可以快速且容易地生成。

它们包含“已知”或“理解”的结果与预测相比较。

它们是随机的,每次生成时都允许对同一个问题进行随机变量的变化。

它们很小,可以很容易在两个维度中进行可视化。

它们也可以被简单地放大。

我建议在开始使用新的机器学习算法或开发新的测试工具时使用测试数据集。

scikit-learn是一个用于机器学习的Python库,它提供了生成一系列测试问题的功能。

在本教程中,我们将介绍一些为分类和回归算法生成测试问题的例子。

分类测试问题

分类是把标签分配给观测样本的问题。

在这一节中,我们将讨论三种分类问题:斑点、月亮和圆圈。

  • 斑点分类问题

make_blob()函数可用于生成高斯分布的点。

您可以控制生成多少个斑点,以及生成的样本数量,以及其他一些属性。

如果这些斑点有线性可分的性质,那么这个问题适用于线性分类问题。

下面的例子生成一个带有三类斑点的二维数据集,作为一个多类分类预测问题。

每个观察都有两个输入和0、1或2个类值。

完整代码如下

运行这个示例会生成问题的输入和输出,然后创建一个方便的2D绘图,用不同的颜色显示不同的类。

注意,由于问题生成器的随机特性,您的特定数据集和结果图将会有所不同。

这是一个特性,而不是一个bug。

测试分类问题的散点图

我们将在下面的示例中使用这个相同的示例结构。

  • 卫星分类问题

make_moons()函数是用于二分类问题的的,它将生成像漩涡一样,或者像月亮形状一样的数据集。

你可以控制月亮的形状和产生的样本数量。

这个测试问题适用于能够学习非线性类边界的算法。

下面的例子产生了一个带有中等噪声的月球数据集。

完整的代码如下

运行该示例将生成并绘制用于检查的数据集,再次为其指定的类着色。

卫星测试分类问题散的点图

  • 圈分类问题

make_circles()函数会产生一个二分类问题,这个问题会出现在一个同心圆中。

再一次,就像卫星测试的问题一样,你可以控制形状中噪音的大小。

该测试问题适用于能够学习复杂非线性曲线的算法。

下面的示例生成一个带有一些噪声的圆形数据集。

完整的代码如下

运行该示例将生成并绘制用于检查的数据集。

圆试验分类问题的散点问题

回归测试的问题

回归是预测某个观测量的问题。

make_regression()函数将创建一个带有输入和输出之间线性关系的数据集。

您可以配置示例的数量、输入特性的数量、噪声级别,等等。

这个数据集适用于能够学习线性回归函数的算法。

下面的示例将生成100个示例,其中包含一个输入特性和一个输出特性,它的噪声很低。

完整的代码如下。

运行该示例将生成数据,并绘制X和y关系图,由于该关系是线性的,因此非常无趣。

回归测试问题的散点图

延伸

本节列出了一些扩展您可能希望探索的教程的想法。

  • 比较算法

选择一个测试问题,并对问题的算法进行比较,并报告性能。

  • 扩大的问题

选择一个测试问题,并探索扩大它的规模,使用改进的方法来可视化结果,或者探索给定的算法的模型技巧和问题深度。

  • 额外的问题

这个库提供了一系列额外的测试问题;

为每个人编写一个代码示例来演示它们是如何工作的。

如果您探究这些扩展的任何一个,我很想知道。

  • 进一步的阅读

如果您希望深入研究,本节将提供更多关于主题的参考资料。

  • 学习用户指南:数据集加载实用程序(http://scikit-learn.org/stable/datasets/index.html)
  • scikit-learn API:sklearn - 数据集(http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets)

总结

在本教程中,您发现了测试问题,以及如何在Python中使用scikit库。

具体来说,你学会了:

  • 如何生成多分类预测问题
  • 如何生成二分类预测问题
  • 如何生成线性回归预测测试问题

原文链接:https://machinelearningmastery.com/generate-test-datasets-python-scikit-learn/

笪洁琼,中南财大MBA在读,目前研究方向:金融大数据。目前正在学习如何将py等其他软件广泛应用于金融实际操作中,例如抓包预测走势(不会预测股票/虚拟币价格)。可能是金融财务中最懂建筑设计(风水方向)的长腿女生。花式调酒机车冲沙。上赛场里跑过步开过车,商院张掖丝路挑战赛3天徒步78公里。大美山水心欲往,凛冽风雨信步行。

原文发布于微信公众号 - 数据派THU(DatapiTHU)

原文发表时间:2018-01-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coding迪斯尼

RNN,具有记忆功能神经网络的理解与实现

我们当前掌握的网络类型,统称为feed forward网络。这种网络的特点是,当我们把很多条数据输入网络进行训练时,网络没有“记忆性”,也就是网络认为前一条输入...

1262
来自专栏人工智能

一步步教你理解LSTM

作者:王千发 编辑:田 旭 什么是LSTM 1 LSTM全名是Long Short-Term Memory,长短时记忆网络,可以用来处理时序数据,在自然语言处理...

4917
来自专栏机器之心

资源 | 一个Python特征选择工具,助力实现高效机器学习

项目地址:https://github.com/WillKoehrsen/feature-selector

1882
来自专栏鸿的学习笔记

写给开发者的机器学习指南(四)

查全率是定义由给定查询和数据语料库的算法检索的相关性的大小。因此,给定一组文档和应该返回这些文档的子集的查询,查全率的值表示实际返回了多少相关文档。 此值计算如...

661
来自专栏marsggbo

Andrew Ng机器学习课程笔记--week2(多元线性回归&正规公式)

对各变量特征缩放后绘制出来的损失函数J(θ)明显收敛更快,这也是为什么需要特征缩放的原因了。

2418
来自专栏机器之心

教程 | 先理解Mask R-CNN的工作原理,然后构建颜色填充器应用

选自matterport 作者:Waleed Abdulla 机器之心编译 参与:刘晓坤 上年 11 月,matterport 开源了 Mask R-CNN 实...

4085
来自专栏CDA数据分析师

资源 | 一个Python特征选择工具,助力实现高效机器学习

项目地址:https://github.com/WillKoehrsen/feature-selector

1660
来自专栏AI研习社

Tensorflow 中 learning rate decay 的奇技淫巧

深度学习中参数更新的方法想必大家都十分清楚了——sgd,adam 等等,孰优孰劣相关的讨论也十分广泛。可是,learning rate 的衰减策略大家有特别关注...

5724
来自专栏人工智能LeadAI

简易的深度学习框架Keras代码解析与应用

总体来讲keras这个深度学习框架真的很“简易”,它体现在可参考的文档写的比较详细,不像caffe,装完以后都得靠技术博客,keras有它自己的官方文档(不过是...

7087
来自专栏张耀琦的专栏

【机器学习入门系列】梯度下降法

什么是梯度下降法?学习速率的引入;如何调整学习速率;Adagrad算法介绍;用泰勒展开式对梯度下降法进行数学理论支持。

1.5K1

扫码关注云+社区

领取腾讯云代金券