初识机器学习
这是生涯第一篇正式博客,渣硕自毕业后从事Java开发工作,至今两年有余。由于自己对机器学习比较感兴趣,所有有意转行,于是欲通过撰写博客的方式来记录学习过程,同时也希望能帮助那些志同道合的有志之士,如果觉得内容有误的地方欢迎各位批评指正,与大家共同成长。废话不多说了,说干就干吧,下面将从机器学习的基础开始,逐步深入。
1 初识机器学习
在人工智能化信息时代的今天,数据无处不在,如何能从海量数据中提取出有用的价值,这对我们的工作和生活将带来极大的便利。机器学习的目的就是,让计算机能拥有像人类一样的思考方式,从现有的数据中学习,能对未来进行预测。可能这样不是很明白,下面通过数学来进行描述:例如,在于二维平面( x x x, f ( x ) f(x) f(x))中有下面的样本点(0,1)、(1,2)、(2,3)、(3,4), x x x与 f ( x ) f(x) f(x)之间的关系为 f ( x ) = x + 1 f(x) = x+1 f(x)=x+1 ,所以在机器学习中 f ( x ) = x + 1 f(x) = x+1 f(x)=x+1这个关系就是需要学习的模型,就可以以此来估计带预测的样本,当 x = 10 x=10 x=10时, f ( 10 ) = 11 f(10)=11 f(10)=11。这样理解更简单,只不过在真正的机器学习过程中,数据量较大,数据的特征多样性,因此学习的模型结构 f f f较为复杂,其基本思想都是为了获得更好的 f f f,以准确的预测未来。
2 机器学习的分类
目前机器学习主流分为:监督学习,无监督学习,强化学习
2.1 监督学习
监督学习可分为“回归”和“分类”问题。
在回归问题中,主要是预测一个连续函数值。也就是说试图将输入变量和输出用一个连续函数对应起来。例如,房价预测,股价预测等。
在分类问题中,主要是预测一个离散值,也就是说试图将输入变量与类别标签对应起来。例如,带有标签的图片分类等。
2.2 无监督学习
在无监督学习中,我们基本上不知道结果会是什么样子,但我们可以通过聚类的方式从数据中提取一个特殊的结构,以此模型结构来进行预测。
在无监督学习中给定的数据是和监督学习中给定的数据是不一样的。数据点没有相关的标签。相反,无监督学习算法的目标是以某种方式组织数据,然后找出数据中存在的内在结构。这包括将数据进行聚类,或者找到更简单的方式处理复杂数据,使复杂数据看起来更简单。例如,对无标签的文章进行分类等。
2.3 强化学习
强化学习是一种学习模型,它并不会直接给你解决方案,而是你要通过试错去找到解决方案。Alphago用的就是强化学习。强化学习不需要标签,你选择的行动(move)越好,得到的反馈越多,所以你能通过执行这些行动看是输是赢来学习下围棋,不需要有人告诉你什么是好的行动什么是坏的行动。
AI的重量级人物Michael I. Jordan讲的,有一段视频是一个模拟的人,利用强化学习的算法,从站不起来到最后能够正常跑步的过程,而且真正实现的代码连100行都不到,一页ppt而已。
3 谈谈一个完整机器学习项目的流程
3.1 抽象成数学问题
明确问题是机器学习的第一步,机器学习中特征工程和模型训练都是非常费时的,深入理解要处理的问题,能避免走很多弯路。理解问题,包括明确可以获得的数据(训练和测试数据),机器学习的目标是分类、回归还是聚类。如果都不是的话,考虑将它们转变为机器学习问题。参考机器学习分类能帮助从问题提炼出一个合适的机器学习方法。
3.2 获取数据
获取数据包括:获取原始数据,从原始数据中经特征工程后提取出的训练、测试数据。在机器学习比赛中原始数据都是主办方直接提供的,但是在实际问题中需要自己获得原始数据。“数据决定机器学习结果的上限,而算法只是尽可能的逼近这个上限”,可见数据在机器学习中的作用。总的来说数据要有具有“代表性”,对于分类问题,数据偏斜不能过于严重,不同类别的数据数量不要有多个数量级的差距。不仅如此,还要评估数据的量级,样本数量、特征数量,估算训练模型对内存的消耗。如果数据量太大可以考虑减少训练样本、降维或者使用分布式机器学习系统。
3.3 特征工程
这是机器学习最重要的步骤之一,也是体现一个机器学习者的功底的。特征工程包括从原始数据中特征构建、特征提取、特征选择,非常有讲究。深入理解实际业务场景下的问题,丰富的机器学习经验能帮助我们更好的处理特征工程。特征工程做的好能发挥原始数据的最大效力,往往能够使得算法的效果和性能得到显著的提升,有时能使简单的模型的效果比复杂的模型效果好。数据挖掘的大部分时间就花在特征工程上面,是机器学习非常基础而又必备的步骤。数据预处理、数据清洗、筛选显著特征、摒弃非显著特征等等都非常重要,往往能够使得算法的效果和性能得到显著提高,建议深入学习。需要运用特征有效性分析的相关技术,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法。
3.4 训练模型与调优
这一步才用到我们上面说的算法进行训练。现在很多算法都能够封装成黑盒供人使用。但是真正考验水平的是调整这些算法的(超)参数,使得结果变得更加优良。当然,能够根据业务场景修改算法的结构或自己实现算法,达到业务预期效果,这才是最牛的。这些需要我们对算法的原理有深入的理解。理解越深入,就越能发现问题的症结,提出良好的调优方案。
3.5 模型诊断、误差分析
如何确定模型调优的方向与思路呢?这就需要对模型进行诊断的技术。过拟合、欠拟合 判断是模型诊断中至关重要的一步。常见的方法如交叉验证,绘制学习曲线等。过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。误差分析也是机器学习至关重要的步骤。通过观察误差样本,全面分析误差产生误差的原因(是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题等),诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断,这是一个反复迭代不断逼近的过程,需要不断地尝试, 进而达到最优状态。
3.6 模型融合
模型融合:把独立的学习器组合起来的结果。一般来说,模型融合后都能使得效果有一定提升。而且效果很好。工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理,不同的采样模式)与后端(模型融合)上下功夫。因为他们比较标准可复制,效果比较稳定。而直接调参的工作不会很多,毕竟大量数据训练起来太慢了,而且效果难以保证。在机器学习比赛中模型融合非常常见,基本都能使得效果有一定的提升。模型融合的方法主要包括一人一票的统一融合,线性融合和堆融合。
3.7 上线运行
这一部分内容主要跟工程实现的相关性比较大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。 不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。
只有自己多实践,多积累项目经验,才会有更深刻的认识。