TensorFlow系列专题(一):机器学习基础
一.人工智能发展
1956年的8月,美国达特茅斯学院(Dartmouth College)举行了一次研讨会,这次会议由约翰[图片上传失败…(image-7b7957-1540453423508)] 麦卡锡等人发起,会议上约翰[图片上传失败…(image-c2eb84-1540453423508)] 麦卡锡首次提出了“人工智能”这个概念,这次会议也被公认为是人工智能诞生的标志。在这六十多年的时间里,人工智能的发展起起伏伏、忽“冷”忽“热”。而2016年AlphaGo与李世石的那场“世纪大战”则彻底点燃了大众的热情。当前人工智能成了一个“香饽饽”,很多国家都在积极争夺人工智能领域的话语权,各大公司也都不断加大在人工智能领域的投入。对于想要转行人工智能领域或者正在从事人工智能领域的从业者来说,当前是一个不折不扣的黄金时代。
机器学习和深度学习作为解决人工智能问题的工具,目前正被广泛的学习和使用。本书以Google的深度学习框架TensorFlow为载体,希望帮助读者快速的掌握这一深度学习的“利器”,同时让读者对深度学习的算法有一个初步的了解,并能够利用这套工具和算法解决自己所面临的深度学习的问题。
二.人工智能面临的挑战
从Google推出无人驾驶汽车,到AlphaGo战胜人类顶级围棋高手李世石,再到阿里巴巴宣布成立人工智能研究院——达摩院,最近几年关于人工智能的话题一直霸占着各大媒体的头条。随着国务院于2017年7月8日印发《新一代人工智能发展规划》,人工智能也已经上升到了国家发展的战略高度。
什么是人工智能(Artificial Intelligence)?目前关于人工智能还没有一个统一和明确的定义,我们可以简单地认为:人工智能旨在研究如何让计算机拥有(或部分拥有)人类的智力,从而去解决现实中只有依靠人的智力才能解决的问题。
目前,人工智能的应用已经非常广泛,涵盖了金融、电商、医疗、制造业、教育等多个领域,诸如科大讯飞的语音识别、谷歌的翻译系统、电子商城的推荐系统、美图软件的图片处理功能以及今日头条的个性化新闻推荐等,这些具体的应用场景和我们的生活息息相关。而在未来,人工智能将会覆盖到更多的领域,这不仅是一场科技的革命,更是时代的大势所趋。人工智能的浪潮必然会让我们的生活发生翻天覆地的变化,也将全方位推动人类社会迈向更高的文明。
对于人工智能的讨论,有两个极端的现象,一种是过分的夸大人工智能的能力,另一种则是过于贬低人工智能的潜在价值。人工智能还处在一个“幼小”的年龄段,过分的吹嘘人工智能的能力,甚至于炒作所谓的“人工智能威胁论”都不利于人工智能的发展。虽然人工智能并没有那么强,但是在很多的现实问题中,人工智能的确已经可以做的很好了,所以我们也应该重视人工智能未来的发展潜力。这一次浪潮过后,不知道人工智能的发展又会面临什么样的境地,作者撰写本书的目的之一就是希望能让更多的人快速的加入这个浪潮之中,能让更多的项目可以落地。只有大家正视人工智能,让它保持一个健康的发展环境,才能依靠它创造出最大的价值。
三.机器学习简介
机器学习(Machine Learning)是让计算机能够自动地从某些数据中总结出规律,并得出某种预测模型,进而利用该模型对未知数据进行预测的一种方法。它是一种实现人工智能的方式,是一门综合了统计学、概率论、逼近论、凸分析、计算复杂性理论等的交叉学科。
目前对于机器学习的研究和使用大概集中于下图所示的一些领域:
事实上,无论是模式识别问题还是数据挖掘问题,它们所涉及到的机器学习的问题在很多地方都是相通的,只是在方法和侧重点上有所区别。模式识别是机器学习中通过数学方法来研究模式处理的一类问题;数据挖掘是从数据库管理、数据分析、算法的角度探索机器学习问题;而统计学习则是站在统计学的视角来研究机器学习问题。
计算机视觉、语音识别以及自然语言处理(这里特指文本处理)目前是机器学习领域最常见的几类应用领域。计算机视觉是一门研究如何让机器能够替代人的眼睛,把看到的图片进行分析、处理的一门科学。在图像分类、人脸识别、车牌识别、自动驾驶中的街景识别等场景均有十分广泛的应用。语音识别是把语音处理、语义理解等技术和机器学习结合起来。常见的应用有:siri、小冰等语音助手。此外,语音识别经常还会和自然语言处理技术中的机器翻译、语音合成等技术构建出更加复杂的应用,如:语音翻译器。自然语言处理旨在使用自然语言处理技术使计算机能够“读懂”人类的语言。具体的应用有:谷歌翻译、垃圾邮件的识别、知识图谱等。
目前,机器学习大致可以分为以下几类:
(1)有监督学习(Supervised learning):我们已经知道一些数据和正确的输出结果(训练集),然后通过这些数据训练出一个模型,再利用这个模型去预测新数据的输出结果。监督学习可分为回归问题和分类问题两大类。回归问题中,我们预测的结果是连续值;而分类问题中,我们预测的结果是离散值。常见的有监督学习算法有:线性回归、逻辑回归、K-近邻、朴素贝叶斯、决策树、随机森林、支持向量机等。
(2)无监督学习(Unsupervised learning):无监督学习中没有给定类标的训练样本,这就需要我们对给定的数据直接进行建模。和监督学习最大的不同在于无监督学习我们事先并不知道数据的类标。常见的无监督学习算法有:聚类、EM算法等。
(3)半监督学习(Semi-supervised learning)):给定的数据集中既包括有类标的数据,也包括没有类标的数据。是一种介于有监督学习和无监督学习之间的方法,它在工作量(例如数据的打标)和模型的准确率之间取了一个平衡点。
(4)强化学习(Reinforcement learning):计算机从什么都不懂,到通过不断学习、总结规律,最终学会的过程便是强化学习。强化学习很依赖于学习的“周围环境”,强调如何基于“周围环境”而作出相应的动作。
四.解决机器学习问题的一般流程
当我们拿到一个机器学习问题时,解决问题的一般流程大致可以分为以下几个步骤,如图1-3所示:
(1)数据收集
业界有一句非常流行的话:“数据和特征决定了机器学习的上界,而模型和算法只是去逼近这个上界”,由此可见,数据对于整个机器学习项目来说至关重要。当我们面临一个实际的问题时,有时候只是有一个关于该问题的大致想法,以及一些相关的有用或无用的数据。数据收集就是要根据我们的需求从这些数据中找出我们真正需要的数据。还有一些时候,我们只是有一个想法,根本就没有数据,这就需要我们自己去搜寻、整理数据。对于一个学习者或研究者来说,当我们有了一个相关的问题之后,一个较好的收集数据的方式是去网上找一些质量较高、使用较多的公开数据集。
(2)数据预处理
无论是我们自己的数据还是公开的数据集,通常都会存在各种各样的问题,例如数据不完整、格式不一致、存在异常数据以及正负样本数量不均衡等。因此,需要对数据进行一系列的处理之后才能拿来使用,这个过程称为数据预处理。
(3)特征工程
目前在机器学习或深度学习相关的书籍中,很少会有专门把特征工程拿出来单独介绍的(在一些数据分析或数据挖掘相关的书籍中可能会介绍的多一些)。的确,对于整个机器学习的项目来说,特征工程只是里面很小的一部分工作,但是千万不能忽略这“一小部分”工作的重要性。一个机器学习任务的成功与否往往很大程度上取决于特征工程。简单来说,特征工程的任务是从原始数据中抽出最具有代表性的特征,从而让模型能够更有效地学习这些数据。通常我们可以使用sklearn这个库来处理数据和提取特征,sklearn是机器学习中使用非常广泛的一个第三方模块,它本身封装了很多常用的机器学习算法,同时它还有很多数据处理和特征提取相关的方法,详细使用说明可以参阅sklearn的官方文档:http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing。
(4)模型的选择
当我们处理好数据之后,就可以选择合适的机器学习模型进行数据的训练了。常见的机器学习模型我们在上一小节已经简单介绍过,每种模型详细的介绍和用法,同样可以参阅sklearn官方手册:http://scikit-learn.org。可以看到可供选择的机器学习模型有很多,每个模型都有自己的适用场景,那么如何选择合适的模型呢?
我们需要先对处理好的数据进行分析,一般的,首先判断数据是否有类标,若是有类标则应该考虑使用有监督学习的相关模型,否则可以划分为无监督学习问题。其次分析问题的类型是属于分类问题还是回归问题,当我们确定好问题的类型之后再去选择具体的模型。在模型的实际选择时,通常会考虑使用多个不同的模型,或者相同的模型使用不同的参数对数据进行训练,然后比较模型的效果,选择最佳的那个,这需要用到接下来要介绍的模型评估的方法。此外,我们还会考虑到数据集的大小,若是数据集样本较少,训练的时间较短,通常考虑朴素贝叶斯等一些轻量级的算法,否则的话就要考虑SVM等一些重量级算法,甚至考虑使用深度学习的模型。
(5)模型的评估
在选择和优化模型阶段,我们都需要对模型进行评估。常用的评估方法有留出法、交叉验证法以及自助法等,相关的评价指标有:
正确率和错误率
正确率(accuracy)和错误率(error rate)是最常用也是最简单的模型评价指标。错误率是指在测试集(或验证集)中分类错误的样本数占总测试集(或验证集)样本数的比例,正确率是指在测试集(或验证集)中分类正确的样本数占总测试集(或验证集)样本数的比例,即:正确率=1-错误率。
查准率、查全率和F1-score
有些时候,我们并不仅仅关心错误率和精度,我们可能还想知道,在所有的正例样本中有多少被正确分类,或者又有多少负例样本被错分为正例。这种情况下,我们就可以使用查准率(precision)、查全率(recall,又称为“召回率”)和F1-score作为度量标准。
ROC和AUC
ROC(Receiver Operating Characteristic)和AUC(Area Under Curve)是从一个更泛化的角度来评估模型的性能,ROC和AUC的计算依赖于查准率和查全率。目前,在作者平时的工作中以及从身边同事和朋友的反馈来看,主要还是以查准率、查全率以及F1-score作为主要的模型性能评价指标。本书中将不会展开介绍ROC和AUC。
到这里我们已经知道了解决机器学习问题的大致流程和相关方法,接下来的内容里,我们会将其中两个最重要的环节“特征工程”和“模型的选择与评估”单独拿出来,做进一步的介绍。
原创文章,作者:磐石,如若转载,请注明出处:https://panchuang.net/2018/10/29/tensorflow%e7%b3%bb%e5%88%97%e4%b8%93%e9%a2%98%ef%bc%88%e4%b8%80%ef%bc%89%ef%bc%9a%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e5%9f%ba%e7%a1%80/