教程 | 手把手教你可视化交叉验证代码,提高模型预测能力
选自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
本文为机器之心编译,转载请联系本公众号获得授权。
✄------------------------------------------------
加入机器之心(全职记者/实习生):hr@jiqizhixin.com
投稿或寻求报道:content@jiqizhixin.com
广告&商务合作:bd@jiqizhixin.com
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 准确把握守正创新的辩证关系 7915877
- 2 中国黄金原董事长家搜出大量黄金 7984330
- 3 空调英文不会男生盯着考场空调看 7853283
- 4 消费品以旧换新“加速度” 7717766
- 5 被铁路售票员的手速惊到了 7669363
- 6 网红赤木刚宪爆改赵露思 7571110
- 7 县委原书记大搞“刷白墙”被通报 7490991
- 8 山姆代购在厕所分装蛋糕 7396995
- 9 马龙刘诗雯穿正装打混双 7203816
- 10 刘强东提前发年终奖 7175496