教程 | 手把手教你可视化交叉验证代码,提高模型预测能力

选自KDNuggets

机器之心编译

参与:刘晓坤、路雪

本文介绍了如何使用K折交叉验证提高模型预测能力,并对代码进行了可视化。

我们试着利用代码可视化来提高模型预测能力。

比如说,你正在编写一个漂亮清晰的机器学习代码(例如线性回归)。你的代码还不错,首先按照往常一样用 train_test_split 这样的函数将数据集分成「训练集和测试集」两个部分,并加入一些随机因素。你的预测可能稍微欠拟合或过拟合,如下图所示。

图:欠拟合和过拟合情况下的预测结果

这些结果没有变化。这个时候我们能做什么呢?

正如题目所建议的,在学习了线性回归之后,下一件有趣的事情就是交叉验证了,因为它可以使用 K 折策略(K-Fold strategy)提高模型的预测能力。那 K 折究竟是什么呢?下面我们将用代码对此进行解释。

完整的代码如下:

图:交叉验证的可视化

代码解析:

以上代码可分为 4 个步骤。

1. 加载并分割目标数据集。

图:加载数据集

将该数据集中的目标复制到 y 变量中。如果想看到数据集,请将 print 行的注释符「#」删除。

2. 模型选择

图:模型选择(LinearRegression())

为简化过程,我们将选择使用线性回归。如果想了解更多,请查看文章《Linear Regression: The Easier Way》。

3. 交叉验证

图:在 sklearn 中进行交叉验证

这是 sklearn 中的流程,也是一个函数:

cross_val_predict(model, data, target, cv)

其中,

  • model 是我们选来要进行交叉验证的模型。
  • data 是数据。
  • target 是数据的目标值。
  • cv(可选项)是数据折叠的总次数(K 折)。

在这个流程中,我们不像往常一样将数据集分成训练集和测试集两部分,如下图所示。

图:训练集(蓝色)和测试集(红色)

我们将数据集平均分成 K 个部分(K 折或者 cv)。为了提高预测精度并实现更好地泛化,我们会在较大的数据集中进行模型训练,在较小的数据集上测试。这里,我们把 cv 设置成 6。

图:6 个相同的部分

现在,模型分割的第一次迭代如下图所示,其中红色的是测试集,蓝色的是训练集。

图:交叉验证的第一次迭代

第二次迭代如下图所示:

图:交叉验证的第二次迭代

以此类推,直到最后一次迭代,如下图所示:

图:交叉验证的第六次迭代

4. 使用 Matplotlib 进行数据可视化

图:使用 Matplotlib 进行可视化

为了将结果可视化,我们导入了 matplotlib 库,然后创建一个 subplot(子图)。

创建采用黑色(即 (0,0,0))边框的散点。

使用 ax.plot 计算两个轴的最大最小值,k-- 代表线型,lw=4 代表宽度。然后,给 x 轴和 y 轴加上标签。最后,用 plt.show() 展示图像。

结果如下:

图:预测结果

这张图展示了使用线性回归模型对 Boston 数据集进行 K 折交叉验证的结果。

我知道其实还有很多种交叉验证方法,但 K 折交叉验证是一个很好、很简单的起点。

完整代码地址:https://github.com/Sagarsharma4244/Cross-Validation

本文为机器之心编译,转载请联系本公众号获得授权。

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2017-10-16

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DT乱“码”

TensorFlow实现卷积神经网络

1.卷积神经网络简介 卷积神经网络(convolutional neural network, CNN),最早是19世纪60年代,生物学家对猫视觉皮层研究发...

31890
来自专栏机器学习之旅

R开发:协调过滤推荐

对于realRatingMatrix有六种方法:IBCF(基于物品的推荐)、UBCF(基于用户的推荐)、PCA(主成分分析)、RANDOM(随机推荐)、SVD(...

10520
来自专栏数据科学学习手札

(数据科学学习手札36)tensorflow实现MLP

  我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除...

47440
来自专栏LhWorld哥陪你聊算法

【神经网络篇】--基于数据集cifa10的经典模型实例

最终,在cifar-10数据集上,通过一个短时间小迭代的训练,可以达到大致73%的准确率,持续增加max_steps,可以期望准确率逐渐增加 如果max_ste...

27510
来自专栏AI研习社

基于 Keras 对深度学习模型进行微调的全面指南 Part 2

本部分属该两部系列中的第二部分,该系列涵盖了基于 Keras 对深度学习模型的微调。第一部分阐述微调背后的动机和原理,并简要介绍常用的做法和技巧。本部分将详细地...

15130
来自专栏MixLab科技+设计实验室

深度学习生成舞蹈影片02之MDN代码练习

本文接上一期,补充一些MDN的代码练习。本教程开发环境是python+jupyter,引用了一个用keras写的mdn包,目标是拟合反正弦函数曲线:

20530
来自专栏郭耀华‘s Blog

MaxPooling的作用

maxpooling主要有两大作用 1. invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺...

30170
来自专栏瓜大三哥

图像分割(三) 之基于FPGA的局部自适应分割

图像分割(三) 之基于FPGA的局部自适应分割 在前面讲的自适应分割的原理如下: ? 由公式可以看出,窗口的分割值是对图像进行开窗,并计算窗口内的像素均值和标准...

26970
来自专栏ATYUN订阅号

神经网络太臃肿?教你如何将神经网络减小四分之一

想要让深度神经网络更快,更节能一般有两种方法。一种方法是提出更好的神经网络设计。例如,MobileNet比VGG16小32倍,快10倍,但结果相同。另一种方法是...

38670
来自专栏机器之心

教程 | 无需反向传播的深度学习:DeepMind的合成梯度

选自GitHub 作者:iamtrask 机器之心编译 参与:王宇欣、Ellen Han 在这篇博文中,我们将从起点(从零开始)学习 DeepMind 最近提...

365100

扫码关注云+社区

领取腾讯云代金券