赞
踩
要使用机器学习,首先得先了解机器学习基本流程,对于机器学习的第一步,很多教材或者帖子都是从收集数据开始。从始机器学习多年了,多行业的机器学习项目也做了很多,机器学习的实际应用中,我认为机器学习的第一步应该是理解业务和定义业务。这里我比较推崇CRISP-DM,全称是Cross-Industry Standard Process For Data Mining,即“跨行业数据挖掘标准流程”。机器学习只是一项技术,应用到实际问题中来必然脱离不了所依托的背景知识或者业务逻辑,比如电信诈骗用户识别、保险产品的智能推荐、机场人脸识别等。脱离了实际业务的机器学习都是耍流氓,况且不同的业务场景对我们使用机器学习的要求也千差万别。
理解实际业务场景问题是机器学习的第一步,通俗的来说就是确定目标。将实际业务抽象为机器学习能处理的数学问题,即能够从现有的数据中学的某种规律,从而解决实际问题。
因为机器学习的特征工程和模型训练通常都是一件非常耗费精力和时间的过程,这就决定了不允许我们有很多次的胡乱测试和不断试错。不然会有很高的时间成本和机会成本。所以为了一开始就能避免走很多弯路,就需要我们对要处理的问题有深入理解。
理解问题,并考虑如何将它们转变为机器学习问题,包括明确可以获得什么样的数据,机器学习的目标是一个分类、回归还是聚类等。具体可以这样定义业务和手头问题:
- 要输入的数据是什么样子?
- 想要预测的是什么?
- 面临的是什么类型的问题,是二分类吗?多分类吗?标量回归问题吗?向量回归问题吗?多分类多标签分类问题吗?还有一些其它的,如积累,泛化或是强化学习?
弄清上述这些问题类型将有助于我们理解数据,并会引导我们选择模型框架,损失函数等等。
这一步很重要,机器学习教计算机执行人和动物与生俱来的活动:从经验中学习。机器学习算法使用计算方法直接从数据中“学习”信息,而不依赖于预定方程模型。有一句话在机器学习业内比较流行: “数据和特征决定了机器学习的上限,而算法只是尽可能的逼近这个上限”,可以看出数据对机器学习的重要作用。另外不同的机器学习算法在应用场景、优势劣势、对数据要求、运行速度上都各有优劣,但有一点不变的是数据贪婪,也就是说对于任何一个算法,当可用于学习的样本数量增加时,这些算法都可以自适应提高性能,意味着可以从更多有价值的数据中发现更多更全的信息和自然模式,帮助我们更好地制定决策和做出预测。因此数据采集对机器学习来说是最基础的,也是非常必要和重要的,有了数据,才有了学习的基础。
采集的数据要具有“代表性”,避免出现过拟合。而对于分类问题,数据偏斜不能过于严重,不同类别的数据数量差距要控制在合理的数量级。另外还要对评估数据(样本数量、特征数量)的量级,估算出其对运算资源的需求程度,判断训练过程中运算资源是否足够。如果运算资源不够,而数据量又太大,就得考虑改进算法、减少训练样本或者降维等,或者考虑上分布式。
就博主而言,接触机器学习之后的这些年,也曾经历过个人笔记本--单台服务器--分布式集群,目前用的比较多的是spark+hadoop。
数据采集几种方式介绍:
- 爬虫:这种通常在公司不具备相关数据资源、没有原始数据或者原始数据不足需要扩展数据情况下使用较多,比如各种网站数据,但进行网络数据爬虫要合规合法,并保持一颗谨慎之心,不然很可能会“爬虫玩的好,牢房进的早。”
- API:现在有很多公开的数据集,一些组织也提供开放的API接口来获取相关数据,比如OpenDota提供Dota2相关数据,好处是通常数据更加规范;
- 数据库:这种算是最常见,也是博主本人本人使用最多的一种方式,最理想的状态,通过公司自身的各种数据库保存的数据,使用起来更加可控,也更加自由灵活;
数据预处理是从数据中检测,纠正或删除损坏、不准确或不适用于模型的数据的过程。当我们将数据采集完,可能面对的数据问题有:
- 数据类型不同:比如有的是文字,有的是数字,有的含时间序列,有的连续,有的间断等
- 数据质量不行:有噪声,有异常,有缺失,数据出错,量纲不一,有重复,数据是偏态,数据量太大或太小等
数据预处理的目的:让数据适应模型,匹配模型的需求。这样的话就得对原始数据进行处理,包括但不仅限于以下几种方式:
数据清洗:缺失数据、重复数据、一致性检验
数据转成数字:经验、一般映射
特征转换:定性特征和定量特征的处理
数据采样:随机采样、系统采样、分层采样、上采样、下采样
特征标准化:均值化、归一化...
这里不做过多阐述,具体的可参考博主早先的一篇博文:机器学习里数据预处理及特征工程总结(超详细)
重要的事情说三遍。“数据和特征决定了机器学习的上限,而算法只是尽可能的逼近这个上限”。
希望每一个从事机器学习的或者想从事机器学习的人,都要牢记这句话。不管是从博主本人以往的工作经历来看,还是目前在Kaggle上看到的各个比赛的情况,基本到最后都是特征工程的处理决定了成败。所以就博主本人来说,我认为特征工程是机器学习中最重要,也是最难的部分,它的难度并不仅是技术上的,最主要还是经验认识上的。深入理解实际业务场景下的问题,丰富的机器学习经验能帮助我们更好的处理特征工程。特征工程做的好能发挥原始数据的最大效力,往往能够使得算法的效果和性能得到显著的提升,有时能使简单的模型的效果表现的比复杂的模型还要好。
特征工程总的目的是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。具体来说有以下几个:
- 降低计算成本:特征越少,构建的模型越简单,大大的降低了模型的复杂度。
- 提升模型上限:特征越好,模型的性能越出色。
- 提高模型灵活性:好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护。
特征工程包括从原始数据中特征构建、特征提取、特征选择。
特征构建是从原始特征中推断或构建额外特征的过程,对于原始的个特征,经过特征构建,我们得到个额外的特征,表示为,所得到的这些特征都是由原始特征定义的,最终得到个特征。
- 特征组合:特征组合的目的通常是为了获得更具有表达力、信息量的新特征,例如组合房产和年收入两个特征,构建是否为高产阶级(房产价值大于1000万,年收入大于100万则为1,其他为0)等
- 特征分割:将业务上复杂的特征拆分开,比如将个人财产,拆分为多个维度的财产特征(比如房产、存款、收入、理财等),特征分割有多个的好处,其一是可以从多个维度表达信息,其二是拆分为多个特征后可以进行更多的组合;
特征提取是自动地构建新的特征,将原始特征通过函数映射转换为一组具有明显物理意义或者统计意义或核的特征的过程,假设有个原始特征(或属性)表示为,通过特征提取我们可以得到另外一组特征,表示为,其中,且是对应的函数映射,需要注意的是,这里我们用特征提取后得到的新特征替代了原始特征,最终得到m个特征。
PCA (主成分分析):无监督降维方法,将原有众多具有一定相关性的指标重新组合成一组少量互相无关的综合指标。对符合高斯分布的样本比较有效。
ICA (独立成分分析):无监督降维方法,将原有众多具有一定相关性的指标重新组合成一组少量互相无关的综合指标。不要求样本呈高斯分布。
LDA(线性判别分析):是有监督,基于最佳分类效果的降维方法。降维后不同类的样本集具有最大的分类间隔。对符合高斯分布的样本比较有效。
做特征选择的原因是因为这些特征对于目标类别的作用并不是相等的,一些无关的数据需要删掉。从原始的个特征中选择个最具统计意义的特征子集的过程,因此特征选择按照某个标准实现了最优简化,即实现了降维,最终得到个特征(注意特征选择相比特征提取的区别是:特征选择后的特征并没有发生变化,只是总的数量减少了)
- filter(过滤式):主要包含方法有相似性度量、相关性比较,方差,它主要侧重于单个特征跟目标变量的相关性。对于相似性度量、相关性来说,思路是如果一个特征与目标的变化是高度一致的,那么它对于预测目标就是具有很大指导意义的;而对于方差过滤法来说,比如有一个性别特征,一共1000个数据,而其中999个是男的,只有1个是女的,这种特征由于自身过于偏斜,因此是无法对结果起到足够的帮助的,就要过滤掉。优点是计算时间上较高效,对于过拟合问题也具有较高的鲁棒性。缺点就是倾向于选择冗余的特征,因为他们不考虑特征之间的相关性,有可能某一个特征的分类能力很差,但是它和某些其它特征组合起来会得到不错的效果。
- wrapper(包装法):实质上是一个分类器,封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准,经过比较选出最好的特征子集。常用方法有逐步回归、向前选择、向后选择,还有完全搜索、启发式搜索、随机搜索。它的优点是考虑了特征与特征之间的关联性,缺点是:当观测数据较少时容易过拟合,而当特征数量较多时,计算时间又会增长。
- Embeded(集成方法):它是学习器自身自主选择特征,如使用Regularization,即正则化做特征选择,或者使用决策树思想。主要方法有正则化(
L1, L_
范数)、决策树、深度学习、回归模型,SVM,随机森林。
数据可视化:表格、条形图、线图、散点图...,这些分析图不仅将有助于我们发现不同变量之间的潜在相关性,而且能帮我们发现是否有数据失衡。
划分数据集:训练集+测试集,第一部分用于训练模型,它们一般将占全部数据中的绝大多数,另一部分则是用于评估模型的判断能力。
模型分为回归模型,分类模型,聚类模型等,在选择模型的时候,具体问题具体分析,将具体的问题划归到实际的模型类别。根据数据类型也可以选择相应的模型。例如,音频数据,图像数据,数值型,文字型数字等等。
现在有很多的机器学习算法的工具包,例如sklearn,spark的MLlib及ML等,使用非常方便,当然也可以自己编程实现机器学习算法。真正考验水平的是对算法的理解和调节(超)参数,如何使模型达到最优。使用机器学习,从原始的30分提升到80分可能是相对比较容易的,如果对算法使用和参数调优比较熟练,多花点时间和精力可能也能从80分提升到90分,但如何百尺竿头再进一步,从90分提升到接近100分,这个就是考验水平的时候了,也是一个分水岭,就需要实施人员对数据、特征、算法及参数的理解和应用等多个环节都有很深的理解和认识才行。
训练模型完成后,由于同一模型在不同参数下的表现依然是天差地别,通常在完成模型训练后就进入到模型评估的步骤。模型的验证和评估有多种方法,对于不同类型的算法模型也有不同评估方法。比如分类模型有精确率、召回率、F-score、AUC/ROC等;回归模型有MSE、RMSE、MAE、R2(决定系数)等,具体可参考博主以前一篇博文:机器学习模型评估及性能评价(超全)
通过测试数据,验证模型的有效性,通过观察误差样本,分析误差产生的原因(是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题 …),往往能使得我们找到提升算法性能的突破点。
根据模型的状态对症下药。过拟合、欠拟合的模型状态判断是模型优化时至关重要的一步。常见的方法如:交叉验证,绘制学习曲线等。
过拟合的基本调优思路:降低模型复杂度。①找更多的数据来学习(最有效最简单的方式);②增大正则化的惩罚系数;③筛选重要有效的特征;④模型融合(增加不同类型模型的融合)
欠拟合的基本调优思路:增加模型复杂度。 ①欠拟合一般是模型的表达能力不够,可以考虑换表达效果更好的模型;②减小正则化系数(一般作用比较小);③增加挖掘数据中更好的更有效的特征;④对于物理意义明显的模型;⑤对其权重尽行分析,细致化做更加多元的特征组合
模型评估之后可能会返回到数据采集、数据处理、特征工程、算法选择以及参数调优等环节进行优化。调优后的新模型会重新训练,训练完成需要重新评估,然后再次优化……,这是一个反复迭代不断逼近的过程,需要不断的尝试,直到模型表现达到预期或者达到在目前数据及特征条件下的最优。
而对于模型的调参,在调参顺序上,一版是先调节重要的影响大的参数,然后再调节没那么重要的,影响小的参数。以作为集成方法中最常用的模型之一的随机森林来说,通常第一个调的是n_estimator即树的个数,其次是学习率,再其次是max_feature,这三个呢都是随机森林自身的参数,再后面可以细调每棵树的参数,比如最小分裂样本数等等。
模型融合就是训练多个模型,然后按照一定的方法集成起来,模型融合的方法容易理解、实现也简单。
工程上,通过大量的模型调参来提升算法准确度的方法虽然也有做但不会很多,往往都是简单的调参,毕竟工程上处理的数据量太大了,训练起来太慢,而且每次调参后的模型效果也难以保证。提升算法准确度的方法主要是靠模型的前端(数据清洗与预处理、采样、特征工程)与后端(模型融合)相结合。因为标准可复制,效果比较稳定。
多模型融合算法可以比单一模型算法往往会有的效果提升。但是怎样进行有效的融合,充分发挥各个算法的长处,也总结有一些常见的融合方法:
线性加权融合法:线性加权是最简单易用的融合算法,工程实现非常方便,只需要汇总单一模型的结果,然后按不同算法赋予不同的权重,将多个推荐算法的结果进行加权,即可得到结果。
交叉融合法(blending):交叉融合的思路是利用不同的训练集,在推荐结果中穿插不同推荐模型的结果,以确保结果的多样性。这种融合方式适用于同时能够展示较多条结果的推荐场景,并且往往用于算法间区别较大,如分别基于用户长期兴趣和短期兴趣计算获得的结果。
瀑布融合法:采用将多个模型串联的方法。每个推荐算法被视为一个过滤器,通过将不同粒度的过滤器前后衔接的方法来进行。
特征融合法:通过使用不同的数据来源,抽取不同的特征,输入到推荐模型中进行训练,然后将结果合并。这种思路能解决现实中经常遇到的数据缺失的问题。
预测融合法:推荐算法也可以被视为一种 “预测算法”,即我们为每个用户来预测他接下来最有可能喜欢的商品。而预测融合法的思想是,我们可以对每个预测算法再进行一次预测,即不同的算法的预测结果,我们可以训练第二层的预测算法去再次进行预测,并生成最终的预测结果。
分类器 Boosting 思想 :用到分类算法中的 Boosting 思想,即将若干个弱分类器,组合成一个强分类器的方法。
通过模型进行融合往往效果较好,但实现代价和计算开销也比较大。这是一个权衡问题。
这一部分内容主要跟工程实现的关系比较大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。不单纯包括模型的准确程度、误差等,更多的是涉及工程上的一些问题,比如运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、并发以及稳定性等。如果只是练习用或者比赛用,不需要工程上落地,可以将模型持久化到磁盘,后续使用、优化时,也不需要从头开始。
上线之后,机器学习的流程还没有结束,后续还要对机器学习的应用进行监控,根据运行过程和反馈持续的跟踪和优化。
参考:
《机器学习》——周志华
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。