前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习基本流程整理 - 这一篇就够啦

机器学习基本流程整理 - 这一篇就够啦

作者头像
HoLoong
发布2020-09-21 18:46:34
2.8K0
发布2020-09-21 18:46:34
举报
文章被收录于专栏:尼莫的AI小站尼莫的AI小站

机器学习基本流程

流程图链接

众所周知,ML是一个流程性很强的工作(所以很多人后面会用PipeLine),数据采集、数据清洗、数据预处理、特征工程、模型调优、模型融合、模型验证、模型持久化;

而在这些基本的步骤内,又存在很多种方式,比如数据采集可以是爬虫,可以是数据库拉取,可以是通过API获取等等,数据清洗要注意缺失值处理,异常值处理,特征工程更是复杂多样,因此根据Kaggle上的一些大佬们的分享,整理了一张基本流程以及对应细分的步骤操作图给大家,算是对各个步骤做了比较详细的分析,应付Kaggle上的入门项目是完全够的了,希望能够对大家有一点帮助;

流程介绍

数据采集

所有的机器学习算法在应用场景、优势劣势、对数据要求、运行速度上都各有优劣,但有一点不变的是都是数据贪婪的,也就是说任何一个算法,都可以通过增加数据来达到更好的结果,因此第一步数据采集也是最基础,最终的一步;

几种方式介绍:

  • 爬虫:这种通常在个人项目、公司资源不足以提供数据、原始数据不足需要扩展数据情况下使用较多,比如根据时间获取天气数据,一般都是通过爬虫爬来的;
  • API:现在有很多公开的数据集,一些组织也提供开放的API接口来获取相关数据,比如OpenDota提供Dota2相关数据,好处是通常数据更加规范;
  • 数据库:这种算是最常见,也最理想的状态,通过公司自身的数据库保存数据,更加可控,也更加自由灵活;

数据清洗

更多是针对类似爬虫这种方式获取的数据,这种数据通常没有一个非常固定规范的格式,数据非常不稳定,因此需要进行前期的清洗工作,工作量巨大。。。。

几种清洗方向:

  • 检查数据合理性:比如爬到的数据是否满足需求;
  • 检查数据有效性:爬到的数据量是否足够大,以及是否都是相关数据;
  • 检查工具:爬虫工具是否有bug;

数据预处理

即便数据都在手上,但是因为人为软件业务导致的异常数据还是比较多的,比如性别数据的缺失、年龄数据的异常(负数或者超大的数),而大多数模型对数据都有基本要求,比如不能缺失,而异常数据对模型是有影响的,因此通常都需要进行预处理;

预处理问题类型:

  • 缺失处理:
    • bug导致缺失:因为程序bug导致缺失,这种缺失通常是少数的,一般都需要进行某种方式的填充;
    • 正常业务情况导致缺失:比如性别字段本身就是可以不填的,那么性别就存在缺失,且这种缺失可能是大量的,这里就要首先评估该字段的重要性以及缺失率,再考虑是填充,还是丢弃;
  • 异常处理:
    • 绝对异常:比如人的年龄200岁,这个数据放到什么场景下都是异常;
    • 统计异常:比如某个用户一分钟内登陆了100次,虽然每一次登陆看着都是正常的,但是统计起来发现是异常的(可能是脚本在自动操作);
    • 上下文异常:比如冬天的北京,晚上温度为30摄氏度,虽然但看数据是正常,但是跟当前的日期、时间一关联,发现是异常;

特征工程

特征工程决定了机器学习的上限,模型只是逼近这个上限;

这绝对不是一句空话,以目前在Kaggle上看到的各个比赛的情况,基本胜负都是出在特征工程上,这一点也是我认为机器学习中最重要,也最难的部分,它难并不是技术上的,而是经验上的,一个经验丰富的Kaggler在看到项目、数据的同时,脑子里已经有了特征工程的雏形,这可以帮助他很快的得到一个不错的分数,而后续的优化上,经验也是最重要的参考;

基本步骤:

  • 特征构建:
    • 特征组合:例如组合日期、时间两个特征,构建是否为上班时间(工作日的工作时间为1,其他为0)特征,特征组合的目的通常是为了获得更具有表达力、信息量的新特征;
    • 特征拆分:将业务上复杂的特征拆分开,比如将登陆特征,拆分为多个维度的登陆次数统计特征,拆分为多个的好处一个是从多个维度表达信息,另一个多个特征可以进行更多的组合;
    • 外部关联特征:例如通过时间信息关联到天气信息,这种做法是很有意义的,首先天气数据不是原始数据集的,因此这样想当于丰富了原始数据,通常来讲会得到一个比仅仅使用原始数据更好的结果,不仅仅是天气,很多信息都可以这样关联(比如在一个Kaggle上的房屋预测问题上,可以通过年份关联到当时的一些地方政策、国际大事等等,都是有影响的,比如金融危机);
  • 特征选择:
    • 特征自身的取值分布:主要通过方差过滤法,比如性别特征,1000个数据,999个是男的,1个是女的,这种特征由于自身过于偏斜,因此是无法对结果起到足够的帮助;
    • 特征与目标的相关性:可以通过皮尔逊系数、信息熵增益等来判断,思路是如果一个特征与目标的变化是高度一致的,那么它对于预测目标就是具有很大指导意义的;

模型调优

同一个模型不同参数下的表现依然是天差地别,通常在特征工程部分结束后就进入到模型参数调优的步骤,这一步也是最无聊最耗时间的(反正我家电脑经常跑一晚上),由于Kaggle上个人项目一般都是在家做,因此个人电脑的性能大家都懂的,因此一个好的技巧还是比较实用的;

调参方式与工具:

  • 首先工具选择上一般GridSearch没得跑了,也确实比较方便;
  • 调参顺序上,建议是先重要的影响大的参数,后没那么重要的,影响小的参数;
  • 举例随机森林:作为集成方法中最常用的模型之一,通常第一个调的是n_estimator即树的个数,其次是学习率,再其次是max_feature,会发现这三个都是随机森林自身的参数,后面可以细调每棵树的参数,比如最小分裂样本数等等;

模型融合

一般来讲,任何一个模型在预测上都无法达到一个很好的结果,这是因为通常来说单个模型无法拟合所有数据,及不具备对所有未知数据的泛化能力,因此需要对多个模型进行融合,这一点在Kaggle上体现的也很明显,好的排名中基本都用了模型融合;

融合方式:

  • 简单融合:
    • 分类问题:投票法融合,不考虑单个模型自身的得分;
    • 回归问题:假设每个模型权重一致,计算融合结果;
  • 加权融合:基本同上,区别是考虑每个模型自身得分,得分高的权重大;
  • 使用模型进行融合:即将多个单模型的输出作为输入送入到某个模型中,让模型去做融合,通常可以达到最好的效果,但是由于用到了模型,因此要注意过拟合问题;

模型验证

通过交叉验证对模型性能进行检验,这里通常都是一致的做法,需要注意的是在时间序列数据预测上,不能直接随机的划分数据,而是要考虑时间属性,因为很多特征都依赖于时间的前后关系,利用了趋势;

模型持久化

最后,最好将得到的模型持久化到磁盘,方便后续使用、优化时,不需要从头开始;

流程图

小结

机器学习任务是非常重流程的,一步一步非常严谨和固定,因此可以做一些总结、归纳,提取出适合自己的基本框架,基本可以套用到所有相关项目中,后面会分享一个最简单机器学习入门项目,也展示一个最简单的流程下,机器学习是如何工作,如何达到目的的,大家敬请期待;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 机器学习基本流程
    • 流程介绍
      • 数据采集
      • 数据清洗
      • 数据预处理
      • 特征工程
      • 模型调优
      • 模型融合
      • 模型验证
      • 模型持久化
    • 流程图
      • 小结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档