机器学习三人行(系列一)----机器学习花样入门
写在前面
深度学习如火如荼,作为一个IT技术人员,不搞一下深度学习,总有一种活在上个世纪的感觉,因此笔者准备认认真真的搞一下深度学习,努力跟上时代的步伐。话说基础不牢,地动山摇,如果没有机器学习的基础知识,要想学好深度学习,还是有一定的挑战的。所以接下来的一段时间,笔者会每周在微信公众号“智能算法”更新一篇深度学习相关文章。该系列大致分两部分:机器学习的基础和神经网络深度学习。总体来讲,笔者的初衷是通过这个系列文章,使自己和大家能基本了解以及能够应用相关知识在自己的领域中能解决一定的实际问题。如果感兴趣,欢迎大家关注微信公众号“智能算法”,来和笔者一起学习,共同进步。
言归正传,步入正题!既然是机器学习入门,那么问题来了,什么是机器学习?
1. 什么是机器学习?
举个栗子,现在我们邮箱的一个垃圾邮件过滤系统就是一个机器学习系统,首先我们给出数据(垃圾邮件,正常邮件),然后根据这些数据,算法自动找出某种规律,最后按照这种规律,对我们收到的邮件进行一个判断过滤。这就是我们用到的一个机器学习例子。
传统的计算机编程方式是人类自己总结经验,归纳成严谨的逻辑公式,然后用编程语言描述出来,编译成机器码交给计算机去执行。然而机器学习是一种新的编程方式,它不需要人类来总结经验、输入逻辑,人类只需要把大量数据输入给计算机,然后计算机就可以自己总结经验归纳逻辑,然后用自己总结的经验模型去对未知数据进行预测或分类,这就是一般意义上的机器学习。
一种经常引用的英文定义是:A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
2. 为什么要用机器学习?
根据上面的定义,假如要用传统的方法写一个垃圾邮件过滤系统的话,基本首先需要研究问题来知道垃圾邮件有什么共性,比方说都包含一些词 “4U”,“信用卡”,“办证”,“发票”,“免费”,“惊喜”等词语,接着需要根据上面的共性写一系列规则作为检测算法,当新邮件符合你认为的垃圾邮件的共性的时候,将新邮件标记为垃圾邮件,最后还需要测试一下你的程序,并且根据测试结果来重复上面两步以调整你的程序。像这种邮件过滤系统,如果用传统方法写出来,程序将会包含一系列复杂的规则,难以维护,并且一旦关键词发生变化,比方说信用卡变成credit card,这时候需要添加新的规则。相反,用机器学习的方法来进行自动学习哪些词或主题能够代表垃圾邮件的共性,能够很快适应新的数据,这样我们的程序就会很简短,易维护,并且一般情况下精确度还很高。
还有一些比较复杂的领域,传统的方法基本上是束手无策的。比方说,语音识别,比方说我们发“一”的音,是第一声,发“二”的音是第二声,这种识别是很难用一个特定规则来进行识别出我们到底发什么音,数以万计的词语以及不同人的不同口音,想用一个特定的规则来搞定语音识别,难以上青天。这时候就需要一种算法来进行自动学习不同的语音,那么机器学习在这些领域就能大放光彩。
当然,有时候机器学习,还能够帮助人们学习,比方说垃圾邮件过滤,当算法学习完我们给出的一堆正常邮件和垃圾邮件后,可以很方便的显示出哪一些词能很好的反应垃圾邮件的共性等。
总的来说,机器学习能够避免传统方法的一系列复杂的规则,能够很好的适应新的数据,并且在传统方法难以处理的领域能够大放异彩,还能够帮助人们更好的分析数据。既然机器学习有这么大的用处,那么常见的机器学习系统都有哪些呢?
3. 机器学习系统的类型
3.1 根据训练过程是否为有监督,一般分为监督学习,半监督学习,无监督学习和增强学习。
a. 监督学习,监督学习是指给算法提供的数据中包括数据的标签。比方说,垃圾邮件过滤系统,当我们的数据样本包括该样本包含该样本的标签的时候,我们就称改算法是监督学习算法,因为它需要我们认为的给定数据的标签,如下图所示:
有监督学习的两个典型的任务就是分类和回归,比方说上面的垃圾邮件分类就是一个分类系统, 对未知样本的分类。还有一种典型的任务就是预测数值,比方说给出一辆汽车的各种参数(品牌,油耗等),来预测该车的价格。这类任务就称为回归。如下图所示,给出一个新的样本,根据模型预测出数值:
一些常见的监督学习算法包括KNN,Logistic回归,线性回归,支持向量机,决策树,随机森林,神经网络等。
b. 无监督学习,跟监督学习相对应,无监督学习不提供训练样本标签,系统在该情况下自动学习。一些常见的无监督学习算法主要包括聚类算法如K均值,HCA,EM算法等,可视化和降维算法如PCA, LLE, t-SNE等,规则关联算法如Apriori, Eclat等。
以聚类算法为例,比方说我们的朋友圈的访问者,我们可以用一个聚类算法把访问者归类,并不需要给算法指定标签。例如,归类后,我们可以看出有60%的好友会选择晚上刷朋友圈,20%的好友喜欢晒自拍等等。如下图,在我们不提供标签的情况下,自己归类。
c. 半监督学习,有一些算法可以允许算法的训练样本集中同时存在有标签数据和无标签数据,此类算法一般称为半监督学习算法,如下图:
这种训练集通常是一小部分有标签的数据 和大部分无标签的数据。大多数半监督学习算法都是监督学习和无监督学习的结合体,比方说深度置信网络(DBNs),本身是基于无监督学习算法受限玻尔兹曼机(RBMs)上构建的,然而整个系统又是基于监督学习的技术之上。
d. 增强学习,增强学习是机器学习中一个非常活跃且有趣的领域,相比其他学习方法,增强学习更接近生物学习的本质,该算法通过不断的探索和试错学习,由于没有直接的指导信息,智能体要以不断与环境进行交互,通过试错的方式来获得最佳策略。如下图所示:
比方说上面的那个救火机器人,就是在不断探索和试错中进行寻找最佳策略。
3.2 另一个分类标准,根据机器学习系统是否能够根据在线的不断增加的数据流进行学习,可以分为在线学习算法和离线学习算法。
a. 离线学习算法,在离线学习算法中,我们会有一个训练集,这个训练集包含多个训练实例。每个训练实例都认为是以某个概率分布从实例空间中独立同分布地抽取。我们的目标是根据这个训练样本构造一个分类器,使得其真正训练错误最小。一般离线学习算法,必须需要大量的离线数据,消耗大量的时间和计算资源来获取分类器,一般先通过离线数据进行训练一个模型,然后将模型加载到产品中进行应用,比方说我们用支持向量机进行分类,我们需要先收集一些训练数据,然后训练一个分类模型,最后将该分类模型加载到产品中进行在线分类。
b. 在线学习算法,在在线学习算法中,我们不假设训练数据来自于某个概率分布或者随机过程。当有个训练实例x过来时,我们利用分类器对其进行分类。假设分类器输出的类别标签为l。那么当l不是实例x真正的类别标签,也即分类出错时,会产生一个罚值。分类器根据实例x的真正的类别标签以及罚值对分类器参数进行相应地调整,以更好地预测新的实例。我们的目标是,在整个预测过程中,实例的罚值和尽可能小。流程如下图:
从上图中我们可以看出,在线学习一般也需要先离线学习一个算法,然后再对数据流进行处理以及二次学习。
在线算法对数据的要求更加宽松,因此它是更实用的算法。同时,它也是更实用的训练算法。例如,当我们区分一个邮件是否是紧急邮件时,在线算法显得更加合适。因为我们不能假设邮件是以某一分布独立同分布地生成的。可能一个人向我们发了一封邮件紧急邮件,我们已经做出了回复。那么当这个人再发来一封邮件时,它就显得不那么紧急了。也就是说,邮件之间存在很大的相关性。这时候,用在线算法会更加合适。
3.3 机器学习还可以根据其应用方式进行分类,比如说即时性算法和模型性算法,比方说即时性算法,其实严格的来说并没有一个训练的过程,而是直接对新来的数据进行一个相似度计算,直接将其归结为和相似度一样样本的属性。常见的算法有KNN,K均值算法等,如下图:
在上图中,在最近的三个样本中,该新样本被分为有三角形一类,只是一个相似度的计算,并没有去训练一个分类模型。
基于模型的分类算法,我们已经很清楚了,比如常见的支持向量机算法,就是由训练集训练处一个模型,新的数据根据该模型进行分类。
既然有这么多优秀的算法,那么算法是否已经很完美了呢?答案是否定的,那么现在机器学习算法主要面临的挑战是什么呢?
4. 机器学习面临的挑战
a. 训练数据的不足,机器学习算法都需要一个训练集,用这个训练集去学习算法,一般情况下一个小的问题的数据集也需要上千条样本,而复杂的问题比如语音识别方面的,甚至需要上百万的数据样本。下面是一个研究自然语言识别的一篇论文中的截图,该截图说明了数据量的重要性,随着数据量的增加,识别准确率也逐渐上升。所以机器学习面临的第一个挑战就是数据量的不足。
b. 数据不具有代表性
当选择的训练集数据不具备代表性的时候,可能我们训练出的模型只适合当前数据集,而对于未知数据的预测或分类效果很不理想。比方说我们根据国家的GDP数据来预测国民的幸福指数,如下图:
用一个线性回归能够很好的适应上面的数据集,我们理所当然的认为国民的幸福指数是符合该线性模型的,然而由于该训练数据不具有代表性,真正的最佳模型事实并非如此。如下图:
图中虚线是上面用一部分数据集进行训练的模型,而实现是用全部数据集进行训练的模型,从整体数据来看,用部分不具有代表性的数据集进行训练的模型也不靠谱。所以我们在选择训练数据集的时候,数据的代表性也是一个需要注意的地方。
c. 低质量的数据,很明显,如果我们训练集的数据中,有很多离群值,错误值,噪声等,那么我们训练出的模型就是不堪入目。那么我们就需要花大量的时间去清理这些离群值,填补错误值或者平滑噪声等一系列工作。
d. 无关的特征,当我们选择提取的特征很差劲的话,那么理所当然,我们得到的模型也是很差劲的。所以特征的选择提取也是机器学习面临的一个问题。
e. 过拟合,当我们对数据集进行模型训练的时候,有时候会陷入过拟合的境地,比方说,我们还利用上面GDP的数据进行一个二项式拟合,拟合结果如下图:
很明显,上面的模型毫无价值,所以在对训练集建立模型的时候,防止过拟合也是机器学习的一个关键点。
5. 小结
本文从什么是机器学习,为什么要用机器学习,机器学习的常见分类以及机器学习所面临的挑战几个方面对机器学习做了一个简单的介绍,由于水平有限,欢迎大家留言批评指正。
(如需更好的了解相关知识,欢迎加入智能算法QQ讨论群:319571120,或者在“智能算法”公众号发送“QQ群”,自动加入)