精华内容
下载资源
问答
  • 机器学习实战》学习笔记(一):机器学习基础

    万次阅读 多人点赞 2019-08-19 17:01:32
    专栏【机器学习】 【机器学习】《机器学习实战》读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details/99701256 ————————————————————————————————————...

    欢迎关注WX公众号:【程序员管小亮】

    【机器学习】《机器学习实战》读书笔记及代码 总目录

    GitHub代码地址:

    ——————————————————————————————————————————————————————

    本章内容

    • 机器学习的简单概述
    • 机器学习的主要任务
    • 学习机器学习的原因
    • Python语言的优势

    1、何谓机器学习

    什么是机器学习?书中举了一个很有意思的例子,我们来听一下,就当开胃菜了。

    最近我和一对夫妇共进晚餐,他们问我从事什么职业,我回应道:“机器学习。”妻子回头问丈夫:“亲爱的,什么是机器学习?”她的丈夫答道:“T-800型终结者。”在《终结者》系列电影中,T-800是人工智能技术的反面样板工程。
    在这里插入图片描述

    哈哈,承包了我一天的笑点,极其学习的概念到底是什么,这个我们在很多博客中都又提到过。

    如果你还是不清楚的话,实在是很过分了 😐,在深度学习大火的如今,机器学习也正是出现在人们视野中,现今,机器学习已应用于多个领域,远超出大多数人的想象,比如NLP,再比如推荐系统。
    在这里插入图片描述

    机器学习在日常生活中的应用,从左上角按照顺时针方向依次使用到的机器学习技术分别为:人脸识别、手写数字识别、垃圾邮件过滤和亚马逊公司的产品推荐。

    在本书中,给出的定义是:【简单地说,机器学习就是把无序的数据转换成有用的信息。】

    1. 传感器和海量数据

    虽然已从互联网上获取了大量的人为数据,但最近却涌现了更多的非人为数据。传感器技术并不时髦,已经发展了好多年的传统行业,但是如何将它们接入互联网这确实是新的挑战。地震预测是一个很好的例子,传感器手机了海量的数据,但是如何从这些数据中抽取出有价值的信息是一个非常值得研究的课题。

    1. 机器学习非常重要

    在过去的半个世纪里,发达国家的多数工作岗位都已从体力劳动转化为脑力劳动。过去的工作基本上都有明确的定义,类似于把物品从A处搬到B处,或者在这里打个洞,但是现在这类工作都在逐步消失。现今的情况具有很大的二义性,类似于“最大化利润”,“最小化风险”、“找到最好的市场策略”……诸如此类的任务要求都已成为常态。虽然可从互联网上获取到海量数据,但这并没有简化知识工人的工作难度。针对具体任务搞懂所有相关数据的意义所在,这正成为基本的技能要求。

    2、关键术语

    通过构建下面的鸟类分类系统,来对机器学习领域的常用术语进行一个总结。
    在这里插入图片描述
    机器学习的主要任务就是 分类。如何判断飞入进食器的鸟是不是象牙喙啄木鸟呢?(任何发现活的象牙喙啄木鸟的人都可以得到5万美元的奖励。)这个任务就是 分类,有很多机器学习算法非常善于 分类。本例中的类别就是鸟的物种,更具体地说,就是区分是否为象牙喙啄木鸟。

    我们决定使用某个机器学习算法进行 分类,首先需要做的是算法训练,即学习如何 分类。通常我们为算法输入大量已分类数据作为算法的 训练集训练集 是用于训练机器学习算法的数据样本集合,表1-1是包含六个训练样本的训练集,每个训练样本有4种 特征(体重、翼展、脚蹼和后背颜色)、一个 目标变量(种属),目标变量 是机器学习算法的预测结果,在 分类 算法中目标变量的类型通常是标称型的,而在 回归 算法中通常是连续型的。训练样本集必须确定知道 目标变量 的值,以便机器学习算法可以发现 特征目标变量 之间的关系。正如前文所述,这里的目标变量 是种属,也可以简化为标称型的数值。我们通常将分类问题中的目标变量称为 类别,并假定分类问题只存在有限个数的 类别

    为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据测试数据。当机器学习程序开始运行时,使用 训练样本集 作为算法的输入,训练完成之后输入 测试样本。输入 测试样本 时并不提供 测试样本目标变量,由程序决定样本属于哪个类别。比较 测试样本 预测的 目标变量 值与 实际样本类别 之间的差别,就可以得出算法的实际精确度。

    假定这个鸟类分类程序,经过测试满足精确度要求,是否我们就可以看到机器已经学会了如何区分不同的鸟类了呢?这部分工作称之为 知识表示,某些算法可以产生很容易理解的知识表示,而某些算法的知识表示也许只能为计算机所理解。知识表示 可以采用规则集的形式,也可以采用概率分布的形式,甚至可以是训练样本集中的一个实例。在某些场合中,人们可能并不想建立一个专家系统,而仅仅对机器学习算法获取的信息感兴趣。此时,采用何种方式 表示知识 就显得非常重要了。

    3、机器学习的主要任务

    分类问题的主要任务是将实例数据划分到合适的分类中;回归问题的主要任务是预测数值型数据。分类和回归属于监督学习,之所以称之为 监督学习,是因为这类算法必须知道预测什么,即 目标变量的分类信息,也就是label。

    监督学习 相对应的是 无监督学习,此时数据没有 类别信息,也不会给定 目标值。在 无监督学习 中,将数据集合分成由类似的对象组成的多个类的过程被称为 聚类;将寻找描述数据统计值的过程称之为 密度估计。此外,无监督学习 还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。

    在这里插入图片描述

    4、如何选择合适的算法

    从上面的表格中可以看出,如果我们能确定算法的目的,想要算法完成何种任务,再加上确定需要分析或手机的数据是什么,就能大概确定哪一个算法更适合了。

    首先考虑使用机器学习算法的目的。

    • 如果想要预测目标变量的值,则可以选择监督学习算法
      • 如果目标变量是离散型,则可以选择分类器算法
      • 如果目标变量是连续型的数值,则需要选择回归算法
    • 如果不想预测目标变量的值,则可以选择无监督学习算法
      • 进一步分析是否需要将数据划分为离散的组。如果这是唯一的需求,则使用聚类算法;
      • 如果还需要估计数据与每个分组的相似程度,则需要使用密度估计算法。

    其次需要考虑的是数据问题。主要应该了解数据的以下特性:特征值是离散型变量还是连续型变量,特征值中是否存在缺失的值,何种原因造成缺失值,数据中是否存在异常值,某个特征发生的频率如何(是否罕见得如同海底捞针),等等。

    一般说来发现最好算法的关键环节是反复试错的迭代过程。

    5、开发机器学习应用程序的步骤

    机器学习算法开发应用程序通常遵循以下的步骤。
    (1) 收集数据
    (2) 准备输入数据
    (3) 分析输入数据
    (4) 训练算法
    (5) 测试算法
    (6) 使用算法

    6、Python 语言的优势

    选择Python作为实现机器学习算法的编程语言的原因:
    (1) Python的语法清晰;
    (2) 易于操作纯文本文件;
    (3) 使用广泛,存在大量的开发文档。

    7、NumPy 函数库基础

    机器学习算法涉及很多线性代数知识,因此在使用Python语言构造机器学习应用时,会经常使用NumPy函数库。如果不熟悉线性代数也不用着急,这里用到线性代数只是为了简化不同的数据点上执行的相同数学运算。将数据表示为矩阵形式,只需要执行简单的矩阵运算而不需要复杂的循环操作。

    8、总结

    尽管现在引起很多人的注意,但是机器学习算法其实还是一个专业的学科,很多人都是道听途说,仍然有很长的路要走。随着每天我们需要处理的数据在不断地增加,能够深入理解数据背后的真实含义,是数据驱动产业必须具备的基本技能。如果你想走这个方向,就要下定决心,走到黑,加油,共勉。

    下一章我们将介绍第一个分类算法——k-近邻算法。

    参考文章

    • 《机器学习实战》
    展开全文
  • 机器学习实践应用

    万次阅读 多人点赞 2018-04-12 10:04:41
    本书通过对机器学习的背景知识、算法流程、相关工具、实践案例以及知识图谱等内容的讲解,全面介绍了机器学习的理论基础和实践应用。书中涉及机器学习领域的多个典型算法,并详细给出了机器学习的算法流程。 本书...

    内容简介

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度等多门学科,专门研究计算机怎样模拟或实现人类的学习行为。机器学习是人工智能的核心,是使计算机具有 智能的根本途径。

    本书通过对机器学习的背景知识、算法流程、相关工具、实践案例以及知识图谱等内容的讲解,全面介绍了机器学习的理论基础和实践应用。书中涉及机器学习领域的多个典型算法,并详细给出了机器学习的算法流程。

    本书适合任何有一定数据功底和编程基础的读者阅读。通过阅读本书,读者不仅可以了解机器学习的理论基础,也可以参照一些典型的应用案例拓展自己的专业技能。同时,本书也适合计算机相关专业的学生以及对人工智能和机器学习感兴趣的读者阅读。

    通过阅读本书,你将了解到:

    • 机器学习全流程的串联方式,包括数据预处理、特征工程、算法、模型评估等;
    • 最常用的机器学习算法,包括逻辑回归、随机森林、支持向量机、KMEANS、DBSCAN、K 近邻、马尔科夫决策、LDA、标签传播等;
    • 机器学习算法在实际业务中的应用,涉及金融、医疗、新闻、电商等诸多领域;
    • 机器学习的常用工具:R、Spark-MLib、TensorFlow、PAI 等;
    • 时下最热门的技术领域:深度学习、知识图谱等。

    作者简介

    李博,花名“傲海”。目前任阿里云数据产品经理,主要负责机器学习平台的产品化建设以及对外业务应用。本科、硕士毕业于北京邮电大学,曾就职于索尼和华为(实习),从事数据相关产品的开发。作为 CSDN 博客专家、云栖社区博客专家,长期分享 IT 技术相关文章,内容涉及机器学习算法、Android 应用及源码开发等领域。一直活跃于开发者社区,主导开发了多个 GitHub 百星开源项目,还开发并上线了多款手机 App。

    本书内容

    推荐序

    近年来,在 IT 圈大家谈论最多的就是人工智能。AlphaGo 与围棋选手的人机大战更是让我们领略到人工智能技术巨大潜力的同时,又将人工智能推向了一个新的制高点。

    人工智能的发展得益于云计算和大数据技术的成熟与普及。和人工智能相关的还有两个核心词汇——机器学习和深度学习。这三者有着什么样的关系?所谓人工智能,通俗地讲是指由人工制造出来的系统所表现出来的智能。人工智能研究的核心问题包括推理、知识、交流、感知、移动和操作物体的能力。而机器学习是人工智能的一个分支,很多时候机器学习几乎成为人工智能的代名词。机器学习简单来讲就是通过算法,使机器能从大量历史数据中学习规律,从而对新的样本做出智能识别或对未来做预测。深度学习是机器学习的一个新领域。之所以称为“深度”,是因为前面说的机器学习是浅层的学习,主要基于概率统计、矩阵或图模型而得出的分析结论。深度学习的概念源于人工神经网络的研究,它基于神经网络框架,通过模拟人脑学习的方式来处理数据。在人工智能实践中,数据是载体和基础,智能是追求的目标,而机器学习则是从数据通往智能的技术桥梁。因此,在人工智能领域,机器学习才是核心,是现代人工智能的本质。

    人工智能的火热使市场上对机器学习人才的需求不断提高,很多从事软件开发的程序员纷纷转行投向机器学习领域。但机器学习对人才的技术和理论水平要求都非常高,除了要掌握统计学中各种复杂的机器学习算法的理论推导外,还要懂计算机算法的实现逻辑以及分布式、并行化等架构理论。

    本书是以应用场景为导向,以代码实现为样例贯穿始终,并融入了通俗易懂的理论知识。对于机器学习爱好者和想进入相关领域的从业者来说,是一本值得推荐的好书。

    从2015年开始,我有幸与作者在同一个团队工作,一起设计并研发阿里云的机器学习平台——PAI。作者对机器学习的理解以及产品上的设计思想都在本书中完美地呈现,值得准备进入机器学习领域的爱好者和从业者好好品读。

    感谢作者让我在新书出版之前先睹为快。

    ——刘吉哲
    阿里云高级专家

    致谢

    感谢我的父母这些年对我的鼓励,感谢我的女朋友,家人的支持永远是我的源动力,让你们生活得幸福是我奋斗的目标。感谢我的大学同学,特别是本科宿舍的室友,你们是我心中的一股清流。最后我要特别感谢我的同事,感谢楚巍、不老、吉哲、云郎、贾总、品道等人以及 UED 小团队,感谢你们对我工作上的支持和帮助。在阿里云大家庭中,我工作得很快乐,个人成长也非常迅速。同时,我也非常感谢出版社的编辑胡俊英在本书写作期间为我提供建议和帮助。

    最后对自己这段时间的写作过程做一个总结,最大的感触是,在这样快速紧张的生活和工作节奏下,连续8个月坚持做一件事情是非常需要毅力的。每天下班之后坚持学习和写作2小时,常常熬到凌晨才关灯睡觉,但是这份坚持换来了将近500小时的时间用来“充电”。在这段时间中,写作已经成为我的一种生活方式,在飞机上、在高铁上、在出租车上、在厕所中……很多地方都留下了思考和回忆。无论最终能做到什么程度,都希望自己可以继续把这样的激情保持下去。最后感谢所有在工作和学习中给过我帮助的人,也感谢所有拒绝我、批评过我的人,因为有你们才有了这本书。

    前言

    人工智能是近年来非常火的话题,人们似乎看到了在某些领域内机器智能取代人力的可能性。之所以人们可以得到这样的判断,主要是基于以下几方面原因:随着互联网的发展,人类社会积累了大量的数据可供分析;机器学习的算法不断迭代,特别是近年来随着深度学习的发展,人们从理论层面取得了实质性突破;随着分布式计算的成熟,云计算让计算资源不再成为瓶颈。我们可以把人工智能看作一个数据挖掘体系,在这个体系当中,机器学习的作用主要是学习历史数据中的经验,把这些经验构建成数学模型。人类利用机器学习算法生成的模型,就可以解决日常的一些问题,如商品推荐和对股票涨跌的预测等。

    以上谈到了机器学习的主要作用,我们再来了解机器学习在业务中的应用,其实机器学习算法正在逐步向“平民化”演变。早些时候,只有一些规模比较大的公司会投入资源在智能算法的研究上,因为这些算法需要大量的数据积累以及计算资源,而且整个业务框架跟算法的结合也需要耗费很大人力,所以只有少数数据业务量达到一定规模的公司会在这方面投入。但是随着各种开源算法框架的发展以及计算资源的价格走低,机器学习不再是“奢侈品”,很多规模不大的公司也开始尝试用机器学习算法生成的模型来指导自身业务,用数据来解决业务问题是代价最小的方式,而且效果会随着数据量的积累变得越来越明显。机器学习算法正在帮助越来越多的企业实现转型,从传统的商业智能(Business Intelligence,BI)驱动到人工智能(Artificial Intelligence,AI)驱动。通过平日里与客户打交道,我们可以了解到,现在不只是互联网公司,更多传统行业,如教育、地产和医疗等,也在尝试把自己的业务数据上传到云,通过机器学习算法来提升自己的业务竞争力。

    综上所述,业务与机器学习算法的结合很有可能是下一阶段行业变革的驱动力,如果固守原来的传统技术,不尝试提升业务的数据驱动力,企业很有可能在这一波新的浪潮中被淘汰。本书尝试将算法与实际的业务实战相结合,将对机器学习的全链路逐一进行介绍。在描述算法理论的时候,本书尽可能用更直白易懂的语句和图示来替代公式。另外,为了帮助读者更有成效地理解机器学习算法的使用逻辑,书中不单介绍了算法,还对整个数据挖掘的全流程,包括数据预处理、特征工程、训练以及预测、评估进行了介绍。而且本书还通过真实案例的数据,在各种不同业务场景下对整个数据挖掘流程进行了详细介绍。此外,书中还简单地介绍了深度学习和知识图谱这两个未来可能被更多关注的领域。总之,本书不是一本理论教程,而是一本推动算法与业务实践相结合的指南。

    写作本书的目的

    我从研究生阶段开始接触机器学习算法,在硕士研究生期间主要从事算法的理论研究和代码实现,当时参与了一些开源算法库的开发和算法大赛,那时对机器学习的理解更多的是停留在数学公式推导层面。那时候理解的机器学习就是一门统计科学,需要把公式研究透彻。直到入职阿里云,从事了机器学习平台相关的工作,我对机器学习的看法发生了很大改变。根据平日里与客户的沟通,我认识到,对绝大部分中小企业用户而言,机器学习算法只是帮助大家提升业务成效的工具,很多用户对机器学习的理解还处于比较初级的阶段,与这种现状相矛盾的是目前市面上部分机器学习相关的图书都更偏向于理论研究,而比较缺乏实际应用的场景。

    写这本书的目的就是希望可以提供这样一本素材,能够让渴望了解机器学习的人快速了解整个数据挖掘体系的轮廓,可以用最小的成本帮助用户把算法迁移到机器学习云服务上去。至于算法的精密度和深度的探索,那是数学家需要考虑的事情,对绝大部分的机器学习算法用户而言,这样一本能帮助大家快速理解算法并能够将其在业务上实践的教程可能会更加有效。

    对我而言,本书也是我对自己学习成果的总结。从 2013年起,我陆陆续续在 CSDN、GitHub 和云栖社区上分享过一些自己在 IT 领域的学习笔记和代码,收到了很多朋友的反馈,也有一些出版社的朋友找到我希望可以把这些内容整理成书,但是一直没有特别笃定的想法——什么样的书是有价值的。通过近一年来的机器学习平台产品建设以及与客户的不断接触,我心中的想法逐渐清晰,很多机器学习爱好者最关心的是如何使用算法而不是这些算法背后的推理,于是本书就应运而生了。虽然我才疏学浅,书中内容未免有描述不足之处,但是我真心希望这本书可以在读者探索机器学习的道路上为其提供助力。

    读者对象

    本书的读者对象如下:

    • 有一定数学基础,希望了解机器学习算法的人;
    • 有编程基础,希望自己搭建机器学习服务解决业务场景的工程师;
    • 数据仓库工程师;
    • 与数据挖掘相关的高校学生;
    • 寻求数据驱动业务的企业决策者。

    如何阅读本书

    本书的结构是按照读者对机器学习的认知过程和数据挖掘的算法流程来组织的,一共分为5个部分,共9章内容。

    第1部分是机器学习的背景知识介绍,包括第1章。这一部分主要介绍机器学习的发展历史以及现状,另外,也介绍了机器学习的一些基本概念,为接下来的内容做准备。

    第2部分介绍机器学习的算法流程,包括第2~6章,分别介绍了场景解析、数据预处理、特征工程、机器学习常规算法和深度学习算法。在第5章的算法部分,对常见的分类算法、聚类算法、回归算法、文本分析算法、推荐算法和关系图算法都进行了介绍,从这一章可以了解到不同业务场景下不同算法的区别和用法。第6章对深度学习相关内容进行了讲解,包括常用的3种模型 DNN、CNN 和 RNN 的介绍。

    第3部分介绍机器学习的相关工具,包括第7章的内容。这里的工具是一个广泛的概念,包括了 SPSS 和 R 语言这样的单机统计分析环境,也包括了分布式的算法框架Spark MLib和TensorFlow,还有企业级的云算法服务 AWS ML 和阿里云 PAI。通过阅读这一章,读者可以根据自身的业务特点,选择适合自己的算法工具。

    第4部分介绍机器学习算法的实践案例,包括第8章,帮助读者理解整个数据挖掘流程。这一章针对不同行业和不同场景搭建了实验,分别介绍了如何通过机器学习算法应对心脏病预测、商品推荐、金融风控、新闻分类、贷款预测、雾霾天气预报和图片识别等业务场景,因此也是本书的核心章节。

    第5部分主要针对知识图谱这个热点话题进行介绍,包括第9章,知识图谱的介绍主要是从图谱的概念以及实现的角度来说明。

    尽管读者可以根据自己的侧重点来选择阅读顺序,但我强烈建议读者按照顺序来阅读,这样对理解书中的概念并能够循序渐进地掌握相关知识更有帮助。

    勘误和服务

    虽然花了很多时间去反复检查和核实书中的文字、图片和代码,但是因为认知能力有限,书中难免会有一些纰漏,如果大家发现书中的不足之处,恳请反馈给我,我一定会努力修正问题,我的个人邮箱是 garvin.libo@gmail.com。如果大家在阅读本书的时候遇到什么问题,也欢迎通过各种方式与我取得联系。

    个人网站

    博客地址

    读者也可以到异步社区的页面内提交勘误。因为工作繁忙,可能来不及一一回复,但是我会尽力与读者保持沟通,谢谢大家的支持。

    第01章:机器学习概述(上)

    在本章中,笔者会以对于人工智能发展历史的回顾作为开篇,进而介绍一些人工智能的发展现状,还会引出对于机器学习的基本概念的一些讲解。这一章作为全书的开篇,希望给各位读者一个宏观的概念——什么是机器学习?它会给我们的生活带来哪些改变?

    1.1 背景

    正如爱因斯坦所说:“从希腊哲学到现代物理学的整个科学史中,不断有人试图把表面上极为复杂的自然现象归结为几个简单的基本概念和关系,这就是整个自然哲学的基本原理。”人类进化的发展史,从某种意义上来讲就是不断归纳经验进而演绎的过程。从刀耕火种的新石器时代到近代的工业革命以及现代科技的发展,人类已经积累了大量的经验。这些经验既是“种瓜得瓜,种豆得豆”这样的常识,也是例如相对论这样的定理公式。人类文明正沿着时间这条坐标轴不断前进,如何利用过往的经验来推动人类社会的再一次飞跃,人工智能或许是我们需要的答案。

    人工智能的起源应该可以追溯到17世纪甚至更早,当时人们对于人工智能的定义是基于推理的。人们畅想着如果两个哲学家或者历史学家的观点出现矛盾,两个人不必再进行无休止的争吵,世界上的所有理论会抽象成类似于数学符号的语言,人们只需要拿出笔来计算就可以解决矛盾。这种抽象逻辑给了后人引导,如今,机器学习在行业上的应用也是将业务逻辑抽象成数字来进行计算,从而解决业务问题。但是在远古时代,这些逻辑还只是科学家脑中的想法。实际上,直到有机器的出现,人工智能才真正作为一门学科而受到广泛关注。

    谈到近代人工智能的起源就不得不提到一个名字——图灵(见图1-1)。

    enter image description here

    图1-1 阿兰 · 图灵

    随着第二次世界大战的爆发,越来越多的机械开始替代手工,人们开始幻想什么时候机器能代替人类来进行思考。在20世纪40年代,关于人工智能的讨论开始兴起。但是,机器做到什么程度才算人工智能,这需要一个标准来判定。图灵用了最直白的话语描述了人工智能,这就是图灵测试(见图1-2)。

    enter image description here

    图1-2 图灵测试

    1950年,计算机科学和密码学的先驱阿兰 · 麦席森 · 图灵发表了一篇名为《计算机器与智能》的论文,文中定义了人工智能测试的方法,让被测试人和一个声称自己有人类智力的机器在一起做一个实验。测试时,测试人与被测试人是分开的,测试人只有通过一些装置(如键盘)向被测试人问一些问题,随便是什么问题都可以。问过一些问题后,如果测试人能够正确地分出谁是人、谁是机器,那机器就没有通过图灵测试,如果测试人没有分出谁是机器、谁是人,那这个机器就是有人类智能的。

    人工智能的另一个重要标志是人工智能这一学科的诞生,故事发生在1956年达特茅斯会议。会议上提出了这样的理论:“学习或者智能的任何其他特性都能被精确地描述,使得机器可以对其进行模拟。”这个论调很像机器学习算法在今日的应用,我们需要提取可以表示业务的特征,然后通过算法来训练模型,用这些模型对于未知结果的预测集进行预测。这次会议对于人工智能在更广阔的领域发展起到了推动作用。在之后的20年里,人类在人工智能,特别是相关的一些统计学算法的研究上取得了突破进展,比较有代表性的如神经网络算法,就是在这个时期诞生的。有了这些智能算法作支撑,更多的真实场景才可以在数学层面进行模拟,人类慢慢学会通过数据和算法的结合来进行预测,从而实现某种程度上的智能化应用。

    人工智能在发展过程中也遇到过非常多的挑战。20世纪70年代,随着理论算法的逐步成熟,人工智能的发展遇到了计算资源上的瓶颈。随着计算复杂度的指数性增长,20世纪70年代的大型机器无法负担这一切。同时,当时的互联网还处于发展初期,在数据积累方面也才刚刚起步。科学家往往没有足够的数据去训练模型,以图像印刷文字识别(Optical Character Recognition,OCR)为例。如果想针对某一场景训练一套精度较高的 OCR 模型,需要千万级的数据样本,这样的数据无论从数据获取、存储和计算成本来看,在当时都是不可能实现的。所以人工智能在之后很长的一段时间内都受限于计算能力以及数据量的不足。

    虽然经历了近20年的消沉时期,但是数据科学家对于人工智能的探索从未停止过。在 21 世纪,随着互联网的井喷式发展,越来越多的图像和文本数据被分享到网页上,停留在互联网巨头的服务器中,随之而来的是用户在网上的浏览记录和购物记录的收集。互联网已经变成了一个大数据仓库,许多网络大咖们纷纷将注意力投向数据挖掘领域,数据库成为了一座座金矿,数据科学家们开始用一行行公式和代码挖掘数据背后的价值,越来越多的公司做起了数据买卖。这些代码和公式就是本书的主角——机器学习算法。马云先生在很多年前的公开演讲上就已经明确表示过“阿里巴巴是一家数据公司”。数据的积累就像是一块块肥沃的土地,需要机器学习算法来在上面耕种,云计算就是挥舞在土地上的“锄头”。PB 级数据的积累使得人们不得不将单机计算迁移到多机,并行计算理论开始得到了广泛的应用,这就催生了云计算的概念。云计算,就是分布式计算,简单来讲就是将一个很复杂的任务进行拆解,由成百上千的机器各自执行任务的一个小模块,然后将结果汇总。

    以 Hadoop 为代表的开源分布式计算架构为更多的企业提供了分布式计算的技术支持。随着 Caffe 和 Tensorflow 等高效率的深度学习架构被开源,许多小型企业也具备了自主研发改进算法模型的能力。人工智能的应用开始普及,并且逐渐融入我们的生活当中。人们开始习惯了在 Google 上输入一个词条马上就能返回上千万条信息,通过刷脸或者指纹识别来进行支付,在淘宝购物时获得智能商品推荐。图像识别、文本识别和语音识别的发展给我们的生活带来了颠覆式的影响。2016年,Google关于人工智能的一场秀将人工智能产业带到了一个新高度。机器智能战胜人类围棋选手一直以来被认为是不可能实现的任务,但是 AlphaGo 成功地实现了这一点。AlphaGo 的成功不仅仅验证了深度学习和蒙特卡洛搜索算法的实践性,更加再一次印证了这样的事实,即人类不再是产生智能的唯一载体。任何机器,只要能够进行信息的接收、存储和分析,都是可以产生智能的。而这里面的关键因素是信息的量级以及算法的深度。

    人工智能的发展史,就是对于过往经验的收集和分析方法不断演绎的历史。在机器出现之前,人类只能通过别人的分享和自己的实践在很小的信息量级上来对事物进行判断,这种对于外界事物的认知受限于人的脑力和知识量。不同于人类的脑力,抽象意义上的机器可以被当成一个信息黑洞,吸收所有的信息,而且可以不分昼夜地对这些数据进行大维度的分析、归纳以及演绎,如果人类将这些机器学习后得到的认知进行分享,就形成了人工智能。于是,随着人类社会的发展,数据的积累以及算法的迭代将进一步推动整个人工智能的发展。

    正如前面所提到的,人工智能的发展体现在机器带动人类进行经验归纳以及思考,那么人工智能背后的引擎就是本书要介绍的重点——机器学习算法。机器学习是一种多学科交织的研究型学科,涉及生物学、统计和计算机等多个学科。机器学习算法发展到目前阶段,做的事情主要是将生活中的场景抽象成为数学公式,并且依靠机器的超强计算能力,通过迭代和演绎生成模型,对于新的社会问题进行预测或者分类操作。人工智能的发展史其实伴随着机器学习算法的进化史,正是随着机器学习算法的不断发展以及计算能力的提升,人工智能产业才得到了发展,进而达到了目前这种火热的局面。下面将对于机器学习算法在目前阶段所取得的一些成就进行一个介绍,方便大家了解机器学习算法的用途。

    1.2 发展现状

    上一节中回顾了人工智能的发展历程,不考虑计算能力等硬件条件的限制,当今世界的人工智能可以总结为数据和智能算法的结合。通过对过往经验的分析得到实验模型,并且利用这种模型指导实际的业务。把人工智能看作一个人类大脑的话,里面的血液就是数据,而大脑里面的血管承载着数据的流转,可以看作是相关的机器学习算法。所以在介绍机器学习算法之前,大家不得不先了解一下大数据时代的特性,然后再针对当前数据爆炸的这种情况介绍机器学习算法的一些用途。

    1.2.1 数据现状

    21世纪注定是属于互联网的,在这个数字时代产生了很多新名词,这里边有云计算、电子商务和有共享经济。大数据也是互联网时代的产物,出现在报纸中、电视上、网页里。“大数据”已经成为信息时代的代名词,乃至于好多人还来不及认识它,就已经开始被它支配。什么是数据?客观世界存在的那一刻开始,数据就已经出现了,从宇宙中天体运动的速度、角度及天体的质量,到人类文明的产生、更迭和演进。数据无处不在,但是数据的价值在于如何采集和利用。

    正是受到互联网的驱动,人类开始采集和利用数据。对于大数据时代,我最深切的感触是大数据未来的版图清晰又模糊。清晰的是人们已经开始意识到数据是有价值的,并且已经开始采集数据,看看人们都做了什么?根据存储市场调研的最新报告,目前世界全年的数据保存量约合 50EB,这些数据来源于互联网、医疗健康、通信、公共安全以及军工等行业。接下来,我们来看看这些数据是如何产生的。

    以全球最大的 SNS 服务商 Facebook 为例。Facebook 现在的用户数达到9.5亿,这些用户的每一个行为,包括每一次通知、页面访问、查看朋友的页面,都会被Facebook 的服务器追踪,并且产生历史行为数据。而全世界9.5亿用户平均每个月在 Facebook 上花费的时间超过6.5个小时,产生的数据量大小超出人们的想象。Facebook 上每天可以产生 500TB 左右的数据量,我们来看看这些数据具体包括什么。人们每天分享 25 亿个内容条目,包括状态更新、墙上的帖子、图片、视频和评论,每天有 27 亿个“ like”操作,人们每天上传 3 亿张图片。

    虽然诸如 Facebook、Google 和 Alibaba 这样的国际互联网巨头已经开始积累数据,并且将数据进行分析来反哺业务。但是截止到今天,全世界每年保存下来的数据只占到数据产生总量的百分之一不到,其中可以被标记并且分析的数据更是连百分之十都不到。这种现状造成了两方面的瓶颈,一方面是数据产生和数据收集的瓶颈,另一方面是采集到的数据和能被分析的数据之间的瓶颈。

    针对数据产生和数据采集的瓶颈,其原因一方面是硬件存储成本的限制,但是随着硬盘技术的发展和产能的提升,这方面的缺陷正逐渐弱化。笔者认为,造成目前数据采集与数据生成失衡的主要原因是数据的采集缺乏标准。虽然,互联网公司对数据采集和标准制定方面已经形成了一套成熟的体系,如网站的点击行为、日志的收集等。但是对于更多行业,特别是传统行业来说,数据的采集方式还处于摸索当中,而且从目前来看,这样的摸索还将持续相当长的时间。尽管现在提倡互联网思维以及世界万物联网的思想,但是互联网对于采集数据的经验恐怕很难复制到传统行业。因为互联网行业对于数据采集存在天然的优势,互联网的数据都是托管在数据库里,以二进制的方式记录在硬盘中,只要稍作处理就可以形成一份质量较高的结构化数据。但是在传统行业,以建筑行业为例,数据产生于工地上一砖一瓦的堆砌,产生于工地的施工建设,这样的数据如何转成二进制来存储需要由新的标准来指定,而这种标准更多地受限于技术手段。如果我们的图像识别做得足够智能,拍一张照片就可以将工地的数据量化,这样可能就可以解决这种问题。对于传统行业的数据智能化进程可能还需要耐心的等待。

    数据采集方面还需要制定更多的标准以及技术的支持,但是数据的应用方面也存在不小的缺陷。如果目前世界上采集到的数据能被充分利用是足够颠覆生活的,可惜的是目前可以供分析的数据还只占很小的比例。造成这样的困境主要有两方面因素,一个是目前比较主流的机器学习算法都是监督学习算法,监督学习需要的数据源是打标过的数据,打标数据很多时候是依赖于人工标记。比如我们需要一份数据来训练模型进行电影推荐,除了已知的电影的特征数据以外,还需要一份打标的数据来表示电影的好看程度,有点像豆瓣的电影分数,这种数据很难通过计算机的计算直接生成,需要依赖于人工打标。人工打标的影响就是,一方面很难生成大量的标本(上千万样本的数据),设想一下1000万人坐到一个地方一起看一部电影再进行评分是多么浩大的一项工程。另一方面,人工打标的成本太高,目前有很多负责打标的第三方公司,打标服务往往在市场上可以卖到很高的价格。

    另一个导致可分析数据比例较低的因素是对于非结构化的数据处理能力较低。非结构化数据指的是文本或者图片、语音、视频这样的数据。这部分数据来自于用户在贴吧的评论、社交软件上的头像、直播平台上的视频展现等。虽然目前的科技水平已经具备了文本和图像方面的分析能力,但是在大批量处理和特征提取方面依然处于相对基础的阶段。以图像识别为例,目前比较成熟的包括人脸识别和指纹识别等,图像识别的特点是每种事物的识别需要训练相对应的模型,而这种模型需要大量的训练样本来提高精确率,一个成熟的模型通常需要千万级别的训练样例。人脸的数据是比较容易获取的,所以相应的模型比较容易训练,但是假如我们需要训练一个模型来识别某一款杯子,针对这一款杯子的训练数据是很难达到理想量级的,这也提高了特定场景下图像识别的门槛。

    互联网在不断发展,数据的生成也不会停下脚步。目前被广泛引用的互联网数据中心(International Data Corporation,IDC)和 EMC 联合发布的“2020年的数字宇宙”报告显示,到2020年全球数字宇宙将会膨胀到40000EB,均摊每个人身上是5200GB以上,这个数据量的数据将会如何被有效存储和应用,目前我们还不敢想象。不过可以肯定的是,数据会成为重要的资源,就像是水电煤一样,在大数据时代,特别是未来的数据爆发时代,数据一定会展现出更大的潜能,人类社会也会进入数据处理技术(Data Technology,DT)时代。

    1.2.2 机器学习算法现状

    之前讲了大数据,这里再讲机器学习就变得容易理解了。传统的机器工作模式是程序员向机器输入一连串的指令,可以理解为是代码,然后机器按照这些指令一步一步执行下去,结果通常是我们可以事先预料的。这种逻辑在机器学习里是走不通的,机器学习是指我们向机器(更准确地说是机器学习算法)中输入数据,然后机器会根据数据返回结果,这些结果是通过数据自我学习得到的,学习的过程通过算法来完成。我们可以这样来定义,机器学习方法是计算机利用已有的数据(经验)得出了某种模型,并利用这些模型预测未来的一种方法。这个过程其实与人的学习过程极为相似,只不过机器是一个可以进行大维度数据分析而且可以不知疲倦地学习的“怪兽”而已(见图1-3)。

    enter image description here

    图1-3 机器学习与人的不同

    机器学习跟模式识别、统计学习、数据挖掘、计算机视觉、语音识别和自然语言处理等领域都有着很深的联系。如今生活在这样的 DT 时代,随时随地都是机器学习的影子,通过机器对大数据进行分析而带来的人工智能应用,正在一点一点地改变人们的生活方式和思维方式。看到这里很多人都会发问:机器学习究竟能做什么?其实机器学习已经服务了我们生活的各个方面,下面以一个简单的购物场景来介绍机器学习是如何应用在我们的日常生活中的。

    现在是 2016 年,如果你还没有尝试过网上购物,那真的是落伍了。网上购物目前已经成了人们的生活方式。下面就简单地聊聊机器学习算法在购物行为中的应用。假设我们在餐厅吃饭,看到一个人的短袖体恤很漂亮,我们想买同款,但是又不好意思开口去问。那么我们可以先偷拍一张这个人的T恤的照片,然后拍立淘(见图1-4)就会显示出这件衣服的同款。

    enter image description here

    图1-4 拍立淘

    这里就用到了机器学习中的图像识别技术。但是往往与这件衣服相近的款式又非常的多,因此我们需要把这些款式按照一定的规则进行排序,这就涉及了机器学习算法模型的训练,通过这个模型,我们把所有的类似款式进行一个排名,最后就得出了最终的展示顺序。

    当然,更多的时候我们是通过键盘的输入来搜索商品的,但是如果犯懒,还可以选择通过语音的方式输入内容,这就是语音转文本的运用。在我们搜索一款产品之后,网页的边栏上会出现一些推荐列表,而且每个用户的推荐列表都是不同的,这就是所谓的千人千面。这个场景的实现依赖的是推荐系统后台的用户画像,而用户画像就是大数据和机器学习算法的典型应用,通过挖掘用户的特征,如性别、年龄、收入情况和爱好等特征,推荐用户可能购买的商品,做到个性化推荐。

    到了这一步,我们终于把商品放到了购物车里,开始下单。下单之前我们发现网银账户中的钱不够用了,想申请一些贷款。这个时候,我们发现有一个贷款额度,这个额度是如何计算的呢?这里面涉及金融风控的问题,而金融风控也是根据机器学习的算法来训练模型并且计算出来的。

    下单之后我们的商品就被安排配送了,目前除了少数边远地区,基本上5天之内就可以收到商品。这段时间包含了商品的包装、从库存发货到中转库存、从低级仓库到高级仓库配送、向下分发。这么多工序之所以能够在短时间内完成,是因为仓储在库存方面已经提前做了需求量预测,提前在可能的需求地附近备货,这套预测算法也是建立在机器学习算法基础之上的。

    我们的快递员拿到货物,打开地图导航,系统已经为他设计了配送的路径,这个路径避免了拥堵而且尽量把路线设计到最短距离,这也是通过机器学习算法来计算的。快递员走进门,我们拿到货物后,发现衣服的尺码不合适怎么办?打开客服,输入问题,然后我们发现可以瞬间得到回复,因为这名客服人员可能并不是真的“客服人员”,只是一个客服机器人而已。智能客服系统利用文本的语意分析算法,可以精准地确定用户的问题,并且给予相应问题的解答。同时,智能客服还可以对用户问题的语境进行分析,如果问题很严重需要赔偿,如:“你的产品害我坏肚子了”这样的问题会由客服机器人通过情感分析挑出来,交给专人处理。

    如上所述,笔者简单列举了机器学习在网上购物中的几大应用,这里面涉及了很多智能算法,包括模型的训练和预测、语义分析、文本情感分析、图像识别技术以及语音识别技术。我们可以看到,在网购这种最常见的场景下,机器学习算法几乎贯穿了全部流程。

    当然,我们还可以列举出非常多诸如上述例子,因为场景实在太多了,没有办法全部穷举出来,这里通过场景来切分把机器学习的一些高频场景列举如下。

    • 聚类场景:人群划分和产品种类划分等。
    • 分类场景:广告投放预测和网站用户点击预测等。
    • 回归场景:降雨量预测、商品购买量预测和股票成交额预测等。
    • 文本分析场景:新闻的标签提取、文本自动分类和文本关键信息抽取等。
    • 关系图算法:社交网络关系(Social Network Site,SNS)网络关系挖掘和金融风险控制等。
    • 模式识别:语音识别、图像识别和手写字识别等。

    上面列举的应用只是机器学习算法应用场景中的一小部分,其实随着数据的积累,机器学习算法是可以渗透到各行各业当中,并且在行业中发生巨大的作用。随着数据智能、数据驱动等思想的传播,机器学习算法正在成为一种普世的基础能力向外输出。我们可以预见未来随着算法和计算能力的发展,机器学习应该会在金融、医疗、教育、安全等各个领域有更深层次的应用。笔者特别期待机器学习算法在破解基因密码以及癌症攻破方面可以取得突破,同时无人车、增强现实(Augmented Reality,AR)等新概念、新技术的发展也需要依赖于机器学习算法的发展。相信未来,机器学习算法会真正做到颠覆生活改变人类命运。

    第01章:机器学习概述(下)

    1.3 机器学习基本概念

    在开始机器学习的算法流程介绍之前,因为机器学习是一个多学科交叉的学科,有很多类似于统计学的概念,但是在叫法上与传统的统计学又有一定的区别,我们需要了解一些机器学习相关的基本概念,因为如果不明确这些概念的话,对于一些文献的阅读和理解会构成障碍。下面通过这一节的介绍帮助大家对于基础的机器学习名词和概念进行了解,首先介绍一下机器学习的基本流程,然后针对机器学习涉及的数据、算法和评估这3个方面用到的基础概念进行介绍。

    1.3.1 机器学习流程

    机器学习的过程就是一个数据流转、分析以及得到结果的过程,在使用的过程中很多人花了很多时间在算法的选择或者调优上,但其实机器学习的每一个步骤都是至关重要的,介绍算法的具体实现的资料已经比较丰富了,笔者希望花更多的篇幅来介绍数据的处理和整个机器学习流程的串联。

    机器学习的整个流程大致可以分为6个步骤,整个流程按照数据流自上而下的顺序排列,分别是场景解析、数据预处理、特征工程、模型训练、模型评估、离线/在线服务(见图1-5),下面来逐一介绍下这些步骤的基本功能。

    enter image description here

    图1-5 数据挖掘流程

    (1)场景解析。场景解析就是先把整个业务逻辑想清楚,把自己的业务场景进行一个抽象,例如我们做一个广告点击预测,其实是判断一个用户看到广告是点击还是不点击,这就可以抽象成二分类问题。然后我们根据是不是监督学习以及二分类场景,就可以进行算法的选择。总的来说,场景抽象就是把业务逻辑和算法进行匹配。

    (2)数据预处理。数据预处理主要进行数据的清洗工作,针对数据矩阵中的空值和乱码进行处理,同时也可以对整体数据进行拆分和采样等操作,也可以对单字段或者多字段进行归一化或者标准化的处理。数据预处理阶段的主要目标就是减少量纲和噪音数据对于训练数据集的影响。

    (3)特征工程。特征工程是机器学习中最重要的一个步骤,这句话一点都没有错。特别是目前随着开源算法库的普及以及算法的不断成熟,算法质量并不一定是决定结果的最关键因素,特征工程的效果从某种意义上决定了最终模型的优劣。通过一个例子说明一下特征工程的作用,2014 年某互联网巨头举办了一场大数据竞赛,参赛队伍在 1000 个以上,到最后,这里面几乎所有的参赛队伍都用了相同的一套算法,因为算法的优劣是比较容易评判的,不同算法的特性是不一样的,而且可供选择的算法种类是有限的。但是特征的选取和衍生却有极大的不定性,100 个人眼中可能有 100 种不同的特征,所以这种大赛到了后期,往往大家比拼的就是特征选取的好坏。在算法相对固定的情况下,可以说好特征决定了好结果。

    (4)模型训练。如图1-6所示的“逻辑回归二分类”组件表示的是算法训练过程,训练数据经过了数据预处理和特征工程之后进入算法训练模块,并且生成模型。在“预测”组件中,读取模型和预测集数据进行计算,生成预测结果。

    enter image description here

    图1-6 模型训练

    (5)模型评估。机器学习算法的计算结果一般是一个模型,模型的质量直接影响接下来的数据业务。对于模型的成熟度的评估,其实就是对于整套机器学习流程的评估。

    (6)离线/在线服务。在实际的业务运用过程中,机器学习通常需要配合调度系统来使用。具体的案例场景如下:每天用户将当日的增量数据流入数据库表里,通过调度系统启动机器学习的离线训练服务,生成最新的离线模型,然后通过在线预测服务(通常通过 Restful API,发送数据到服务器的算法模型进行计算,然后返回结果)进行实时的预测。具体架构如图1-7所示。

    enter image description here

    图1-7 机器学习服务架构

    利用这种架构就实现了离线训练和在线预测的结合,串联了从离线到在线的整个业务逻辑。

    1.3.2 数据源结构

    前面已经介绍了机器学习的基本流程,下面将针对机器学习的数据结构进行介绍。如果把机器学习算法比作一个数据加工场,那么进入工厂的数据就是被算法用来加工的原材料,机器学习算法需要的数据是什么样结构的呢?如果经常关注大数据相关的文章,基本会听说过“结构化数据”和“非结构化数据”这两个词,当然这里面还能衍生出“半结构化数据”,下面分别介绍一下这几种数据的结构。

    (1)结构化数据。结构化数据是指我们在日常数据库处理中经常看到的日志类数据结构,是以矩阵结构存储在数据库中的数据,可以通过二维表结构来显示,如图1-8所示。

    enter image description here

    图1-8 结构化数据示例

    结构化数据主要由两个部分组成,一个部分是每个字段的含义,也就是图1-8中的 age、sex、cp 等字段头,另一个部分是每个字段的具体数值。通常来讲,机器学习算法处理的数据都是结构化的数据,因为机器学习需要把数据带入矩阵去做一些数学运算,结构化数据原生是以矩阵形态存储的,所以机器学习算法通常是只支持结构化数据的。

    结构化数据中还有两个非常重要的概念需要介绍一下,即特征(Feature)和目标列(Label)。这是机器学习算法中最常出现的两个名词,其中特征表示的是数据所描述对象的属性,如用一组数据来形容人,那么这个人的身高、体重、性别和年龄都是特征。在结构化数据的数据集中,每一列数据通常就对应一个特征。

    目标列表示的是每一份数据的打标结果,因为前面也介绍过,机器学习的原理其实是从历史数据中来学习经验,目标列表示的是这一组数据的结果。例如,我们想通过一份体检数据来预测对象是否有心脏病,需要先通过成千上万份的训练数据来生成模型,这成千上万份的训练数据需要打标,也就是说机器要事先知道什么样体检指标的人患病了,什么样的人没有患病,这样才能学习出预测模型。通过一个例子来说明,如图1-9所示为一份心脏病预测需要的数据结果,其中框起来的字段表示的是对象是否患病,这一列是目标列。其他3个字段 age、sex 和 cp 描述的是对象的特征,是特征列。

    (2)半结构化数据。半结构化数据是指按照一定的结构存储,但不是二维的数据库行存储形态的数据。比较典型的半结构化数据就是 XML 扩展名的存储数据,如图1-10所示。

    enter image description here

    图1-9 目标列说明

    enter image description here

    图1-10 半结构化数据

    另一种半结构化数据就是在数据表中,某些字段是文本型的,某些字段是数值型的。见表1-1。

    表1-1 半结构化数据

    IDOccupationIncome
    小李老师241
    小王厨师521
    小刘司机421
    小方运动员23636

    半结构化数据常用于一些数据的传递,但是在机器学习算法相关的应用方面还有一定距离,需要做数据转换把半结构化数据转为结构化数据来进行操作。

    (3)非结构化数据。非结构化数据的数据挖掘一直以来是机器学习领域的热点话题,特别是随着深度学习的发展,目前对于非结构化数据的处理似乎找到了方向。典型的非结构化数据就是图像、文本或者是语音文件。这些数据不能以矩阵的结构存储,目前的做法也是通过把非结构化数据转为二进制存储格式,然后通过算法来挖掘其中的信息。第6章和第7章将详细介绍如何使用深度学习算法实现非结构化数据的处理。

    以上就是对于真实业务场景下需要处理的3类数据结构的介绍。机器学习算法对于结构化数据的支持是比较好的,对于半结构化数据和非结构化数据,在真实的业务场景下,通常是先把这两类数据做转化,然后才通过算法来进行数据挖掘。关于非结构化数据转为结构化数据的方法在第4章也有相关介绍。

    1.3.3 算法分类

    上面对于机器学习的流程和数据源结构都进行了介绍,下面对于算法的分类进行一个简单的说明。机器学习算法包含了聚类、回归、分类和文本分析等几十种场景的算法,常用的算法种类为 30 种左右,而且还有很多的变形,我们将机器学习分为 4 种,分别是监督学习、无监督学习、半监督学习和增强学习。

    (1)监督学习。监督学习(Supervised Learning),是指每个进入算法的训练数据样本都有对应的期望值也就是目标值,进行机器学习的过程实际上就是特征值和目标队列映射的过程。例如,我们已知一只股票的历史走势以及它的一些公司盈利、公司人数等信息,想要预测这只股票未来的走势。那么在训练算法模型的过程中,就是希望通过计算得到一个公式,可以反映公司盈利、公司人数这些信息对于股票走势的影响。通过过往的一些数据的特征以及最终结果来进行训练的方式就是监督学习法。监督学习算法的训练数据源需要由特征值以及目标队列两部分组成。

    如图1-11所示,ifhealth 是目标队列,age、sex 和 cp 为特征队列,这就是一个典型的监督学习的训练数据集。因为监督学习依赖于每个样本的打标,可以得到每个特征序列映射到的确切的目标值是什么,所以常用于回归以及分类场景。常见的监督学习算法见表1-2。

    表1-2 监督学习

    分类算法

    K 近邻、朴素贝叶斯、决策树、随机森林、GBDT 和支持向量机等

    回归算法

    逻辑回归、线性回归等

    监督学习的一个问题就是获得目标值的成本比较高。例如,我们想预测一个电影的好坏,那么在生成训练集的时候要依赖于对大量电影的人工标注,这样的人力代价使得监督学习在一定程度上是一种成本比较高的学习方法。如何获得大量的标记数据一直是监督学习面临的一道难题。

    enter image description here

    图1-11 监督学习

    (2)无监督学习。无监督学习(Unsupervised Learning),学习上面讲的监督学习的概念之后,其实无监督学习就比较好理解了。无监督学习就是指训练样本不依赖于打标数据的机器学习算法。既然是没有目标队列,也就缺少了特征环境下的最终结果,那么这样的数据可能对一些回归和分类的场景就不适合了。无监督学习主要是用来解决一些聚类场景的问题,因为当我们的训练数据缺失了目标值之后,能做的事情就只剩下比对不同样本间的距离关系。常见的无监督学习算法见表1-3。

    表1-3 半监督学习

    聚类算法

    K-Means、DBSCAN 等

    推荐算法

    协同过滤等

    相较于监督学习,无监督学习的一大好处就是不依赖于打标数据,在很多特定条件下,特别是打标数据需要依靠大量人工来获得的情况下可以尝试使用无监督学习或者半监督学习来解决问题。

    (3)半监督学习。半监督学习(Semi-supervised Learning),是最近几年逐渐开始流行的一种机器学习种类。上文中也提到,在一些场景下获得打标数据是很耗费资源的,但是无监督学习对于解决分类和回归这样场景的问题又有一些难度。所以人们开始尝试通过对样本的部分打标来进行机器学习算法的使用,这种部分打标样本的训练数据的算法应用,就是半监督学习。目前很多半监督学习算法都是监督学习算法的变形,本书将介绍一种半监督学习算法——标签传播算法。其实目前半监督算法已经有很多的应用了,推荐大家去深入了解。

    (4)强化学习。强化学习(Reinforcement Learning),是一种比较复杂的机器学习种类,强调的是系统与外界不断地交互,获得外界的反馈,然后决定自身的行为。强化学习目前是人工智能领域的一个热点算法种类,典型的案例包括无人汽车驾驶和阿尔法狗下围棋。本书介绍的分词算法隐马尔科夫就是一种强化学习的思想。

    上面就是关于监督学习、无监督学习、半监督学习和强化学习的一些介绍。监督学习主要解决的是分类和回归的场景,无监督学习主要解决聚类场景,半监督学习解决的是一些打标数据比较难获得的分类场景,强化学习主要是针对流程中不断需要推理的场景。本书对于这4类机器学习算法都有介绍,具体的分类见表1-4,方便大家有针对性的学习。

    表1-4 算法分类

    监督学习

    逻辑回归、K 近邻、朴素贝叶斯、随机森立、支持向量机

    无监督学习

    K-means、DBSCAN、协同过滤、LDA

    半监督学习

    标签传播

    强化学习

    隐马尔可夫

    1.3.4 过拟合问题

    机器学习模型训练的过程中会遇到非常多的问题,如参数或者梯度的设置不合理、数据的清洗不够彻底,但是如果问一个数据挖掘工程师什么问题是数据挖掘领域中最常见的问题,他的答案八成是“过拟合”,这也是为什么我们要单独拿出一小节来讲一下数据挖掘过程中的过拟合问题。

    过拟合(Over-fitting),从字面的意义上理解的话就是过度拟合的意思,常发生在线性分类器或者线性模型的训练和预测当中。过拟合现象是在数据挖掘过程中经常会遇到的问题,如通过训练集训练了一个模型,这个模型对于训练集的预测准确率很高,可以达到95%,但是我们换一份数据集进行预测,发现准确率只有30%,出现这种情况的原因很有可能是训练的过拟合现象。

    过拟合的原理就是机器学习算法过度学习了训练集数据,听上去有点难以理解,下面通过一个例子进行解释。假设我们有一组二维数据展示在坐标系当中,我们想对这个二维数据进行一个线性的回归训练。如果拟合出的曲线是如图 1-12 所示的虚线,其实是一种欠拟合(underfitting)的形式,曲线拟合的并不理想,因为并没有通过回归算法很好地拟合出一种符合数据分布的曲线。

    enter image description here

    图1-12 线性拟合曲线一

    我们再来看看图1-13。

    enter image description here

    图1-13 线性拟合曲线二

    如果最终拟合出来的是如图1-13所示情况,就是一种比较理想的状况,我们看到最终的曲线走势已经几乎刻画了数据的分布,这种曲线是比较理想的。那么什么是过拟合呢?我们来看下图1-14。

    enter image description here

    图1-14 线性拟合曲线三

    如图1-14所示这种情况是典型的过拟合,图中的曲线已经跟数据分布完全一致。那么有的人可能会问,做线性回归的目的不就是为了找到最符合数据走向的曲线么,为什么当我们拿到的结果跟数据走向完全匹配的时候反而不好呢?这是因为训练线性回归曲线或者线性分类器的目的是要对于其他数据集进行分类或者预测。如果在针对训练集做曲线拟合的时候做得过于“完美”,那么当我们针对于其他预测集进行预测的时候,这套模型很有可能会失准,因为这套模型在训练的时候过度地接近于训练集的特征,缺乏鲁棒性。所以在机器学习训练过程中,100%的拟合训练集数据并不一定是好的。

    通过前面的介绍,我们已经明白了过拟合发生的现象和原理,那么究竟是什么原因导致了过拟合问题的出现呢?原因可以总结为以下几种。

    • 训练数据集样本单一,如训练样本只有白色鸭子的数据,我们拿生成的模型去预测黑鸭子肯定是不对的。所以在做训练的过程中,要求训练样本要尽可能地全面,覆盖所有的数据类型。
    • 训练样本噪音数据干扰过大,噪音数据是指数据集中的干扰数据。过多的噪音数据会导致模型记录了很多噪音特征,忽略了输入和输出之间的关系。
    • 模型过于复杂,模型参数太多往往也是造成过拟合现象的一个重要因素。所以一个成熟的模型不一定是非常复杂的,而是要求模型对于不同的数据集都有稳定的输出表现。

    针对过拟合这样的常见性问题,其实已经有了很多预防和解决的办法如下所示。

    • 在训练和建立模型的时候,一定要从相对简单的模型开始,不要一上来就把模型调得非常复杂、特征非常多,这样很容易造成过拟合现象的发生。而且当模型过于复杂而造成过拟合现象发生之后,也比较难于排查具体的问题出在哪一部分特征。
    • 数据的采样,一定要尽可能地覆盖全部数据种类。另外,数据需要经过清洗后再进行算法训练,否则如果混入了大量噪声数据,会加大过拟合问题发生的概率。
    • 在模型的训练过程中,我们也可以利用数学手段预防过拟合现象的发生,可以在算法中添加惩罚函数来预防过拟合,这里如果想详细了解可以参考正则化 L1、L2 规范,本书就不对这部分内容展开来讲了。

    以上对于过拟合问题进行了基本的描述,而且也介绍了问题发生的原因以及预防的方法。因为过拟合问题是在使用机器学习算法的过程中非常有可能碰到的问题,所以掌握这方面的知识以及应对手段是非常重要的。希望通过本节的学习,大家可以在模型训练当中有意识地避免过拟合问题的发生。

    1.3.5 结果评估

    前文介绍了一些机器学习算法在具体数据挖掘过程中可能会遇到的一些概念和名词,我们知道机器学习算法的最终目的是生成模型,模型的好坏需要通过一些指标来评估,现在就来介绍一下在机器学习算法中可能用到的一些关于结果评估的概念。常用到的概念可能包括精确率、召回率、F1 值、ROC 和 AUC 几种,看上去概念有点多,因为每个指标都是从不同维度来对结果进行评估,下面将分别介绍这几个概念的含义。

    (1)精确率、召回率、F1 值。因为精确率(Precision)、召回率(Recall)和 F1(F-Measure)值常被放在一起作比较,所以把相关的这3个指标放在一起介绍。计算这3个指标还需要先了解下 TP、TN、FP 和 FN 这4个指标的含义。

    • TP(True Positive):本来是正样本,被模型预测为正样本。
    • TN(True Negative):本来是负样本,被模型预测为负样本。
    • FP(False Positive):本来是负样本,被模型预测为正样本。
    • FN(False Negative):本来是正样本,被模型预测为负样本。

    上面这4个概念读上去有点难以理解,我们通过一个实际的案例讲解一下。例如有一个预测集,里面有500个女生和100个男生,需要通过机器学习生成模型,尽可能地区分数据集中的女生,所以女生是正样本,假如我们最终的预测结果是70个女生和20个男生。下面计算精确率、召回率以及 F1 值,首先要计算 TP、TN、FP 和 FN 这4个值。在这个案例里面,TP 为本来是女生又被预测为女生的人数,所以 TP 的值为70;FP表示本来是男生被预测为女生的人数,FP 的值为20;FN 表示本来是女生但被预测为男生的人数,FN 的值为500−70=430。

    最终精确率、召回率、F1 值的公式如下。

    enter image description here

    通过上面的公式可以看出,其实精确率的概念通俗来讲就是模型在预测的时候正确的比例。召回率表示的是在预测到的正样例占全部正样例的比例。这可以看到精确率和召回率是对模型的两个维度的评估,前者评估的是准确性,后者评估的是覆盖率。当然在实际的模型评估中,我们希望精确率和召回率都尽可能高,但是实际上这两个指标是相互矛盾的,为了更均衡的评估精确率和召回率,我们创建了 F1 值。F1 值表达的是精确率和召回率的综合评估,现在很多的模型评估都是通过 F1 值来做,就是考虑到了 F1 值可以把这两个指标结合在一起来评估。

    (2)ROC 和 AUC。ROC(Receiver Operating Characteristic Curve)曲线是常用的二分类场景的模型评估算法曲线,ROC曲线的样例如图1-15所示。

    enter image description here

    图1-15 ROC 曲线

    图1-15中的齿状弧形曲线就是 ROC 曲线,这个曲线的横轴为上面提到的 FP 值,TP 值是纵轴。如何来评估模型的好坏呢?通过 ROC 曲线可以清晰地展示出来,只要是模型曲线越接近于左上角就说明模型的效果越好。通过 AUC 值来表示 ROC 曲线与横轴围起来的面积(也就是图1-15中有颜色覆盖的部分),这个 AUC 值越大表示模型的效果越好。AUC 的取值是0到1,通常大于0.5,当 AUC 的取值达到0.9以上时,证明这个模型的效果是比较不错的。

    上面介绍了 ROC 和 AUC 两个指标的概念,AUC 是通过 ROC 曲线计算出来的面积实现的。AUC 和 F1 值一样,都是通过一个数值来对于最终的结果进行评估的。ROC 的作用更多是通过对于曲线的光滑程度以及曲线的斜率来获取模型内包含的信息。

    1.4 本章小结

    本章作为全书的开篇章节,通过对于人工智能领域的发展历史引出了本书的主角——机器学习算法,其实机器学习算法已经贯穿了我们的日常生活,正是因为这些智能算法的普及,所以越来越多的人把目光瞄向了这一新生的技术。我们通过举例介绍了机器学习算法的发展现状,帮助读者梳理了这一学科的应用领域,另外通过对于一些基础概念的介绍,帮助初学者对于机器学习入门。有了上述背景,下面就正式开始对整个机器学习全流程的介绍。

    第02章:场景解析
    第03章:数据预处理(上)
    第03章:数据预处理(下)
    第04章:特征工程(上)
    第04章:特征工程(中)
    第04章:特征工程(下)
    第05章:机器学习算法——常规算法(上)
    第05章:机器学习算法——常规算法(中)
    第05章:机器学习算法——常规算法(下)
    第06章:机器学习算法——深度学习(上)
    第06章:机器学习算法——深度学习(下)
    第07章:常见机器学习工具介绍(上)
    第07章:常见机器学习工具介绍(中)
    第07章:常见机器学习工具介绍(下)
    第08章:业务解决方案(上)
    第08章:业务解决方案(中)
    第08章:业务解决方案(下)
    第09章:知识图谱(上)
    第09章:知识图谱(下)

    阅读全文: http://gitbook.cn/gitchat/geekbook/5a377733d7fd13649973b0dc

    展开全文
  • 机器学习模型评价指标总结 1. 混淆矩阵(Confusion Matrix) (以下先考虑二分类问题) 其中: TP(实际为预测为),FP(实际为负但预测为) TN(实际为负预测为负),FN(实际为但预测为负) 2. ...

    机器学习模型评价指标总结

    1. 混淆矩阵(Confusion Matrix

    (以下先考虑二分类问题)

    其中:  TP(实际为正预测为正),FP(实际为负但预测为正)

    TN(实际为负预测为负),FN(实际为正但预测为负)

    2. 基于混淆矩阵的相关评价指标

      A.召回率:Recall = TP / (TP+FN)  

    (又称查全率,反映预测对的正例数占真正的正例数的比率)

      B.准确率:Accuracy = (TP+TN) / (TP+FP+TN+FN) 

    (反映分类器对整个样本的判定能力,能将正的判定为正,负的判定为负)

      C.查准率:Precision=TP / (TP+FP)

          指所得数值与真实值之间的精确程度;预测正确的正例数占预测为正例总量的比率)

      D. F: F1-score = (2Recall*Precision) / (Recall + Precision)

          F-scorePrecisionRecall加权调和平均数,F1-scoreF值一般公式中β=1的情况(即PrecisionRecall同等重要,若β>1则Recall有更大影响)很多信息检索系统、分类、推荐系统的评测指标就是用F值

    3. ROC图、PR图以及AUC

    1 ROC图

      在混淆矩阵中,真正率 TPR = TP / (TP+FN),假正率  FPR = FP / (FP + TN)

    其中TPR也即灵敏度(sensitivity),FPR也即(1-特异度)(specificity)。以纵坐标为TPR,横坐标为FPR,ROC 曲线实际就是不同阈值下TPRFPR的轨迹。每一个预测结果在ROC空间中以一个点代表

    阈值:阈值就是一个分界线,用于判定正负例的,在模型预测后我们会给每条预测数据进行打分(0<score<1)。如:指定阈值为0.6,那么评分低于0.6的会被判定为负例(不好的),评分高于0.6的即会判定为正例(好的),随着阈值的减小,判定为正例的样本相应地就会增加。

    最好的预测方式是一个在左上角的点,在ROC空间坐标轴(0,1)点,这个代表着100%灵敏(没有假阴性)和100%特异(没有假阳性)。而(0,1)点被称为“完美分类器”。一个完全随机的预测会得到一条从左下到右上对角线(也叫无识别率线)上的一个点,这条线上的任一点对应的准确率(Accuracy)都是50%。

                                                                                        ROC图

         离散分类器,如决策树,产生的是离散的数值或者一个二元标签。应用到实例中,这样的分类器最后只会在ROC空间产生单一的点。而一些其他的分类器,如朴素贝叶斯分类器,逻辑回归或者人工神经网络,产生的是实例属于某一类的可能性,对于这些方法,一个阈值就决定了ROC空间中点的位置。举例来说,如果可能值低于或者等于0.8这个阈值就将其认为是阳性的类,而其他的值被认为是阴性类。这样就可以通过画每一个阈值的ROC点来生成一个生成一条曲线。

    2 PR图

    P-R曲线的P就是查准率(Precision),R就是查全率(Recall)。用P作为横坐标,R作为纵坐标,就可以画出P-R曲线。

    对于分类器,通过调整分类阈值,可以得到不同的P-R值,从而可以得到一条曲线(纵坐标为P,横坐标为R)。通常随着分类阈值从大到小变化(大于阈值认为P),Precision减小,Recall增加。比较两个分类器好坏时,显然是查得又准又全的比较好,也就是的PR曲线越往坐标(1,1)的位置靠近越好。 

      

                                                                                                      PR图

    3 AUC

    AUCArea Under the ROC Curve)指标在模型评估阶段常被用作最重要的评估指标来衡量模型的准确性。AUC作为模型评价指标,用于二分类模型的评价。 

    AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
      为什么要用AUC作为二分类模型的评价指标呢?为什么不直接通过计算准确率来对模型进行评价呢?答案是这样的:机器学习中的很多模型对于分类问题的预测结果大多是概率,即属于某个类别的概率,如果计算准确率的话,就要把概率转化为类别,这就需要设定一个阈值,概率大于某个阈值的属于一类,概率小于某个阈值的属于另一类,而阈值的设定直接影响了准确率的计算。

    ROC曲线与X坐标轴所围成的面积即为ROC-AUC值AUC值越接近1模型的效果越好。横坐标为其中随机分类的模型AUC0.5,所以模型的AUC基线值大于0.5才有意义。模型的ROC曲线越远离对角线,说明模型效果越好。随着阈值的减小,Sensitivity TPR)和1-Specificity FPR)也相应增加,所以ROC曲线呈递增态势。而PR曲线X坐标轴所围成的面积即为PR-AUC值。

    4 ROCPR的关系

    ROC对应的指标是: a. TPR 正样本预测准确率(就是查全率Recall),评价的是模型在正样本集合上的表现。 b. FPR,负样本预测错误率。评价的是模型在负样本集合上的表现。

    PRC对应的指标是: a. 查全率Recall(同ROC的TPR) b. 准确率P,所有预测样本的准确率(包括正样本和负样本)。最关键的就是这个,其他两个都是单独评价正样本集合或者负样本集合的。只有它是综合评价整体结果。所以,哪种类型(正或者负)样本多,权重就大。也就是通常说的对样本不均衡敏感

    ROC曲线是FPR和TPR的点连成的线,PR曲线是查准率和查全率的点连成的线。又Recall=TPR,因此PR的横坐标为ROC的纵坐标。TPR、Recall的分母为样本中正样本的个数,FPR的分母为样本中负样本的个数,样本一旦确定分母即为定值。但是Precision的分母为预测为正样本的个数,会随着阈值的变化而变化,因此Precision的变化受TP和FP的综合影响,不单调,变化情况不可预测。

    因此,相对来讲ROC曲线会更稳定,在正负样本量都足够的情况下,ROC曲线足够反映模型的判断能力。正负样本分布得极不均匀(highly skewed datasets)的情况下(正样本极少),PRC比ROC能更有效地反映分类器对于整体分类情况的好坏。总之,只画一个曲线时,如果没有data imbalance,倾向于用ROC(更简洁,更好理解)。如果数据样本不均衡,分两种情况:情况1:如正样本远小于负样本,PRC更敏感,因为用到了precision=(TP/(TP+FP))。情况2:正样本远大于负样本,PRC和ROC差别不大,都不敏感。

    对于同一模型,PRC和ROC曲线都可以说明一定的问题,而且二者有一定的相关性,如果想评测模型效果,也可以把两条曲线都画出来综合评价。

    4. Lift提升图、Gain增益图与K-S图

      1 Lift提升图

       Lift =[TP/(TP+FP)] / [(TP+FN)/(TP+FP+FN+TN)] = Precision / Accuracy,它衡量的是,与不利用模型相比,模型的预测能力“变好”了多少,lift(提升指数)越大,模型的运行效果越好。Lift图分累积的和非累积的。

    不利用模型,我们只能利用“正例的比例是(TP+FN)/(TP+FP+FN+TN)”这个样本信息来估计正例的比例(baseline model),而利用模型之后,我们不需要从整个样本中来挑选正例,只需要从我们预测为正例的那个样本的子集TP+FP中挑选正例,这时预测的准确率 (Precision)为TP/(TP+FP)。

    2 Gain增益图

    Gini系数也可用于评价模型,Gains(增益) 与 Lift(提升)类似:Lift 曲线是不同阈值下Lift(Precision / Accuracy)和Depth的轨迹,Gain曲线则是不同阈值下Precision和Depth的轨迹,而Precision = TP/TP+FP,所以它们显而易见的区别就在于纵轴刻度的不同。(注:横轴Depth也就是:将样本的预测为1的概率从大到小排序后,取前百分之几。)

    Gain增益图是描述整体精准率的指标。按照模型预测出的概率从高到低排列,将每一个百分位数内的精准率指标标注在图形区域内,就形成了非累积的增益图。如果对每一个百分位及其之前的精准率求和,并将值标注在图形区域内,则形成累积的增益图。累积图通常能够更好的表现模型性能,而非累积图则更有利于指出模型中可能存在问题的地方。

    3 K-S图

    在评价模型时还会用到KSKolmogorov-Smirnov值,KS=max(TPR-FPR),即为TPRFPR的差的最大值,KS值可以反映模型的最优区分效果,此时所取的阈值一般作为定义好坏用户的最优阈值。一般,KS>0.2即可认为模型有比较好的预测准确性。

      K-S曲线的最高点(最大值)为KS值,KS值越大,模型分值的区分度越好,KS值为0代表是最没有区分度的随机模型。准确的来说,K-S是用来度量正样本与负样本区分程度的KS值所代表的仅仅是模型的分隔能力,并不代表分隔的样本是准确的。换句话说,正负样本完全分错,但KS值可以依旧很高。

                                                                                                        K-S图

    ROC曲线和lift曲线、Gain曲线、KS图都能够评价模型的效果,lift曲线/Gain曲线评价模型的有效性,其为总体一部分上的模型性能,而混淆矩阵评估的是整个总体上的模型性能。

      类似信用评分的场景,希望能够尽可能完全地识别出有违约风险的客户,选择ROC曲线及相应的AUC或者KS值作为指标;而类似数据库精确营销的场景,希望能够通过对全体消费者的分类而得到具有较高响应率的客户群从而提高投入产出比,选择lift曲线/Gain曲线作为指标。

    上面四种曲线以预测客户是否违约的案例比较如下:

    5. 回归模型的评价指标

    回归模型常见应用:市场趋势报告、气温预测、投资风险分析

    1MAE(Mean Absolute Error)平均绝对差值

    http://upload.wikimedia.org/math/8/9/f/89f3f847beb7a4c84e31f73a8457c575.png

    (2)MSE(Mean Square Error)均方误差,是回归任务最常用的性能度量

    https://cn-discussions.s3.cn-north-1.amazonaws.com.cn/original/3X/7/6/7620bbc1b40385260f9abc09e313d8ec97a3fef5.png

    (3)log对数损失函数(逻辑回归)

    (4)RMSE(Root Mean Square error)均方根误差

    http://upload.wikimedia.org/math/a/4/7/a47161af0a89ce6059aafd43c524839d.png

    (5)Normalized root-mean-square deviation归一化均方差跟偏差

    http://upload.wikimedia.org/math/e/a/5/ea585ff954c73cc34084e4cee2693a4d.png

    (6)  R2决定系数

    https://cn-discussions.s3.cn-north-1.amazonaws.com.cn/original/3X/7/4/74b336e71ae92d9aba5f501cced3c94e5a5d05b8.png

            R2 是多元回归中的回归平方和占总平方和的比例,它是度量多元回归方程中拟合程度的一个统计量,反映了在因变量y的变差中被估计的回归方程所解释的比例。 
          R2 越接近1,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,用x的变化来解释y值变差的部分就越多,回归的拟合程度就越好

    (7) Pearson's Correlation Coefficient(皮尔逊相关系数)

    皮尔逊相关也称为积差相关(或积矩相关),假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:

    http://hi.csdn.net/attachment/201007/11/19961_12788382715I69.gif

    注意当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

    •  两个变量之间是线性关系,都是连续数据。
    •  两个变量的总体是正态分布,或接近正态的单峰分布。

    ③ 两个变量的观测值是成对的,每对观测值之间相互独立。

    (8) concordance correlation coefficient(一致性相关系数)

    http://upload.wikimedia.org/math/3/8/2/3821418186fc25126037ad31a3866286.png

    展开全文
  • 但是,所谓成也萧何败也萧何,我们经常爱问一个问题:现在深度学习效果这么好,为什么那些传统的机器学习模型还能屹立不倒?答案可能非常简单:传统模型消耗远比深度模型要少。这里的消耗指什么?两方面,硬件和...

    导读:我认为,任何一门技术的突破发展,首先都需要解决问题,然后才是创造新价值。

    最近比特币行情大起大落,身边炒币的哥们纷纷大呼刺激。我一直不太清楚,支撑比特币背后的价值究竟是什么,不过,作为一名技术爱好者,我知道比特币最初推出来,为的不是让大家发家致富,而是“去中心化”,设计一套不依赖中央银行也能运行的货币体系。

    中心化和去中心化的,一直是技术发展史的一条浓墨重彩的主线,今天之所以有互联网,当初也是起源于通信线路的去中心化。中心化和去中心化里面有太多的故事,一篇文章讲不清楚就不讲了,从技术的角度看,二者之间没有绝对的好或不好,只有在特定场景下的优势和存在的问题。

    01

    机器学习与去中心化

    下面,我们把视角拉回到机器学习,对,机器学习也有“去中心化”的概念。当然了,截止到目前,机器学习中尚没有出现一个明确称之为“去中心化机器学习”的专用名词,但是意思相近的概念是有的,譬如说分布式,这也算是去中心化的近义词了,机器学习就有“分布式机器学习”,而且已经是个老概念。哪怕是现在最新最热的深度学习框架,譬如Tensorflow,都已经提供了分布式机器学习的工程实现。

    那么,什么叫分布式机器学习,又为什么需要分布式机器学习呢?

    我认为,任何一门技术的突破发展,首先都需要解决问题,然后才是创造新价值。我们说,机器学习工程有几个基本的环节,大致可以粗略划分为:收集数据、清洗数据、选择模型、训练模型、使用模型预测

    问题在哪呢?在以前,这几个环节都很可能是在同一台电脑上完成的,但现在不行了,尤其是深度学习时代,要想设计出一款好的机器学习模型,达到SOTA的效果,是一件十分烧脑的事情,不仅烧人脑,也烧电脑。现在的模型太复杂,单一一台高配置的电脑已经没法单独扛起训练模型的重担,那怎么办?简单,那就再加一台,不行就再加。多台电脑一起训练模型,这就是分布式机器学习。

    如果你之前没有开发过分布式的项目,光看上面这段介绍,容易产生一种感觉,觉得分布式机器学习也没什么东西,不过是将一台电脑的工作分给多台电脑去干,但实际远比想象要复杂得多,难点在于如何进行模型训练。

    在模型训练时,需要通过计算损失函数来完成模型的权值调整,这个过程就是所谓的“学习”。现在由于性能等多个方面的需要,学习这项工作被分派给多台机器完成,如果只是简单的拆分计算,譬如说梯度下降,如果各台机器分别计算梯度,就会变成训练N个模型,而不是分布式地训练一个模型,要真正实现分布式训练,就需要考虑梯度同步计算。现在常用的分布式训练方法主要包括数据并行和模型并行两种,数据并行更好操作,因此更为常用,但训练大模型会出现问题。为了解决这个问题,就出现了更为复杂的模型并行。

    02

    隐私保护和机器学习

    分布式机器学习,最开始是用于解决单台计算机无法承载完整的模型训练任务,需要多台计算机并行计算的问题。现在,一个新的应用场景出现了,而且是在一个情理之中但意料之外的地方:隐私保护。

    隐私保护有多重要应该不必多强调,相信大家也已经有了切身感受,现在老是接到各种莫名其妙的来电,明明是陌生人,却能开口就可以准确叫出你的名字。不要以为背后有什么神秘的东方力量,通常背后真相只有一个,那就是你的隐私信息泄露了。

    不过,隐私保护和机器学习看似毫无瓜葛,怎么关联在一起呢?

    其实,两者关系很密切,非常密切,这里我不妨大胆预测一句,以后还将更加密切,甚至可能让大家产生甜蜜的烦恼。

    回想一下,做机器学习我们的时间都花在了哪里?是训练模型。在训练模型阶段,有句话叫,模型训练好不好,数据大小很重要。在机器学习这里,数据经常就是这么神奇,模型预测效果不好,先别着急,没准多搞一点数据效果就提上来了。

    但是,正所谓成也萧何败也萧何,我们经常爱问一个问题:现在深度学习效果这么好,为什么那些传统的机器学习模型还能屹立不倒?答案可能非常简单:传统模型消耗远比深度模型要少。这里的消耗指什么?两方面,硬件和数据。硬件就不说了,有段时间买GPU的不是挖矿就是搞深度学习,玩游戏的还得往后排一排,当然现在又多了一种理财产品的玩法。另一个是数据,深度模型最大的特点就是“深”,而训练结构越复杂的模型,所需要的数据就越多。于是数据也成了深度模型发挥作用的限制因素之一。

    好了,看到这里,如果仍然感觉机器学习还是没看到和隐私保护有啥关系,那我们来想一个问题:数据从何而来?

    就是你我日常活动所产生的各种信息。举一个例子,说有一对父母突然接到商家的推广宣传册,上面都是母婴信息,他们起初非常疑惑,因为家里没有婴孩,以为是商家搞错,后来才发现是自己女儿怀孕了,女儿经常上网浏览母婴相关的信息,商家通过数据挖掘准确地找到了这一潜在客户,是一次经典的广告精准投放。

    这个例子非常有名,早几年推广数据挖掘时特爱用它来扯虎皮做大旗。不过,现在我们回过头,从隐私保护的角度重新审视,就会发现这个案例其实很有问题。商家怎么知道女儿的上网行为呢?最常见的就是通过Cookie追踪。说到这个大家就有数了,这已经属于用户信息收集范畴,现在各国对于这方面分别出台了严格的法律规范,必须明确得到用户允许才能收集用户信息。

    如果大家还是没啥感觉,那我再努力一把让大家感受感受。就说输入法,我们每天都会用到输入法,通过输入法打出各种各样的信息。设想一下,如果输入法将这些信息统统传到云端,往好的方面想,那输入法的联想能力一定大大提升,打字自然流畅多了。可是,往隐私保护的方面想呢?

    03

    什么是联邦学习

    终于讲到联邦学习了。

    现在讲联邦学习的文章很多,大家也更喜欢直接切入,从什么是联邦学习讲起。不过,正如我前面所说,任何一门技术的突破发展,首先都需要解决问题,讲明白了问题,再讲技术才能体现价值。

    隐私保护已经成为我们这个时代不可逆的趋势,所以,正在蓬勃发展的机器学习理所当然要面临一个十分急迫的问题:机器学习会不会因为数据饥饿导致发展潜力受限?

    我知道,很多介绍联邦学习的文章在介绍隐私保护时,通常都选择一笔带过,让初学者感觉这好像是个无关紧要的小插曲。不对,恰恰相反,人工智能时代什么最重要?是数据,数据就是人工智能时代的石油。

    从现在开始,用户也好,企业也好,一定会想尽办法保护自己最重要的数据资产。哪怕就在我们很多人看来,机器学习现在形势一片大好,仍然又有不少质疑的声音,认为机器学习的泡沫正在越吹越大。而正是其中一样重要论据,就是机器学习需要消耗大量隐私数据。

    现在问题抛出来了,该怎么办呢?无非两个结果,要么是始终解决不了,发展受限最后夭折,或者苟延残喘。要么革新求变,寻找新的出路。

    现在我们就正站在这个岔路口上。这里我首先要说的是,面对这个问题,机器学习的研究人员想了很多方法,而联邦学习是其中一种,它究竟是不是最终的救世主,我们拭目以待。

    联邦学习最早是由谷歌提出来的。联邦学习可以归为是分布式机器学习的一种应用,做分布式的同学应该都知道,很多分布式的架构都是谷歌开源出来的,有天然优势。而谷歌首先把联邦学习用在哪呢?就是谷歌的输入法,叫Gboard。

    那么,现在我们来看一下,联邦学习是怎么从技术上解决隐私保护问题的。

    首先,联邦学习关键在于“联邦”。“联邦”体现得是一种“分治”的思想,把一个任务切成好几块,大家各自负责自己这块,等大家都完成了,任务也就完成了,其实就是一种分布式。

    明白了这个,接下来我们聊数据集。机器学习需要数据集,不妨把数据集想象成一张很大的电子表格,有行有列,每一行就是一条记录,而每一列则是一类特征。在以前,这一大张表都归一个人所有,可以直接就拿来做机器学习训练,但现在要隐私保护,大家各自保管自己那块,没有一个人能看到一张完整的大表,原来的方法行不通了。

    怎么办呢?联邦学习提出三种方法:横向联邦学习、纵向联邦学习和联邦迁移学习。

    横向是指不同的“行”保管在不同人手里,譬如说同样是名字、年龄、性别三种特征,我有A、B两人的记录,你有C、D两人的记录,我们可以通过横向联邦学习把数据作为一个整体训练。

    纵向是指不同的“列”保管在不同人手里,这次是A、B、C、D四个人的记录你我都有,但你有的是名字、性别两种特征,而我有名字和年龄两种特征,就可以通过纵向联邦学习把数据作为一个整体训练。

    联邦迁移学习是对上述二者的拓展,实际上包括了联邦学习和迁移学习两个部分,可以理解为横向联邦学习+迁移学习,和纵向联邦学习+迁移学习。

    有人说联邦学习使用了去中心化的概念,这个说法不准确。联邦学习的架构有两种,有中心化的也有去中心化的。联邦学习有个全局模型参数的概念,无论哪种架构,最终目标都是通过更新全局模型参数来实现整体的模型训练。

    最后说一下技术部分。联邦学习用到了两类技术,分布式机器学习和加密技术。分布式就不说了,使用加密技术目的是确保参与各方都不可能通过手头信息反推其它方的数据情况,具体用到同态加密、差分计算等技术。这方面内容比较专业,不是一篇小文能说清楚的,我推荐可以阅读两本书,一本是《分布式机器学习:算法、理论与实践》,了解机器学习算法怎样进行分布式计算,另一本是《深入浅出联邦学习:原理与实践》,这本书是联邦学习的专著,对联邦学习的整个情况,特别是加密部分进行了比较细致的介绍。

     

    04

    作者简介

    莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

     

    扫码关注作者

    05

    推荐阅读

    01

    《深入浅出联邦学习:原理与实践》

    长按识别二维码并购买

    推荐理由

    大型金融集团联邦学习负责人撰写,中外院士及清华、华科、蚂蚁、百度、同盾多位学术界和企业界专家推荐。从基础、原理、实战、拓展4个维度系统讲解联邦学习。

     

    02

    《分布式机器学习:算法、理论与实践》

    长按识别二维码并购买

    推荐理由

    微软亚洲研究院机器学习研究团队所著,刘铁岩博士领衔撰写!全面阐述分布式机器学习算法、理论及实践的著作。全彩印刷!人工智能大牛周志华教授倾情推荐!联邦学习进阶必读。

    03

    《迁移学习》

    长按识别二维码并购买

    推荐理由

    杨强教授领衔撰写,迁移学习“开山之作”,解决人工智能的“最后一公里”问题。张钹院士作序,邓力、高文、李开复、周志华联袂推荐。


    扫码关注【华章计算机】视频号

    每天来听华章哥讲书

    更多精彩回顾

    书讯 | 6月书讯 | 初夏,正好读新书

    资讯 | 《数据安全法》表决通过!最新解读来了

    书单 | 8本书助你零基础转行数据分析岗

    干货 | 阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验

    收藏 | 手把手教你利用JS给图片打马赛克

    上新 | 【新书速递】深入浅出联邦学习

    赠书 | 【第60期】5G及现代通信领域不可不读的8本好书

    点击阅读全文了解更多AI好书

    展开全文
  • 机器学习、深度学习、强化学习和人工智能的关系是什么?人工智能的学习算法大家庭1. 机器学习的定义2. 深度学习的定义3. 强化学习的定义4. 迁移学习的定义5. 人工智能的定义6. 机器学习 VS 深度学习 VS 强化学习 VS ...
  • 过滤式方法先按照某种规则对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关,这相当于先用特征选择过程对初始特征进行“过滤”,再用过滤后的特征来训练模型。相关系数法、卡方检验法和互信息...
  • 机器学习极简入门课

    千次阅读 2018-07-03 02:45:07
    本达人课针对机器学习初学者,从机器学习、深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几个最经典的机器学习模型——学习这些模型的原理、数学推导、训练过程和优化方法。 本课为每个模型提供...
  • 机器学习基本概念

    千次阅读 2018-09-21 22:26:40
    本文首先介绍机器学习的基本流程,然后针对机器学习涉及的数据、算法和评估这三个方面用到的基础概念进行介绍。 1.机器学习流程  机器学习是一个数据流转、分析以及得到结果的过程,它的整个流程大致可以分为六个...
  • 机器学习常见考题

    千次阅读 2020-07-08 01:03:19
    这里写目录标题一级目录二级目录三级目录 牛客网整理鸡本人相关面试经历整理得来,侵删 一级目录 二级目录 三级目录
  • 李宏毅的机器学习课程!

    千次阅读 2021-03-10 00:14:18
    ↑↑↑关注后"星标"Datawhale每日干货&每月组队学习,不错过Datawhale学习组织方:百度技术团队,内容:机器学习人工智能学习该从哪里开始呢?人...
  • Python 机器学习经典实例

    万次阅读 多人点赞 2018-04-12 10:44:15
    在如今这个处处以数据驱动的世界中,机器学习正变得越来越大众化。它已经被广泛地应用于不同领域,如搜索引擎、机器人、无人驾驶汽车等。本书首先通过实用的案例介绍机器学习的基础知识,然后介绍一些稍微复杂的机器...
  • 机器学习(概述一)——定义

    千次阅读 2019-05-28 16:18:17
    机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要...
  • 机器学习简介

    万次阅读 2018-10-17 10:09:40
    本文的目的是能让即便完全不了解机器学习的人也能了解机器学习,并且上手相关的实践。这篇文档也算是EasyPR开发的番外篇,从这里开始,必须对机器学习了解才能进一步介绍EasyPR的内核。当然,本文也面对一般读者,...
  • 机器学习系统设计:Python 语言实现

    千次阅读 多人点赞 2018-08-01 10:19:57
    本书为我们提供了机器学习设计过程的坚实基础,能够使我们为特定问题建立起定制的机器学习模型。我们可能已经了解或使用过一些为解决常见问题的商用机器学习模型,例如垃圾邮件检测或电影分级,但是要着手于解决更为...
  • 机器学习的具体定义也因此有许多不同的说法,分别以某个相关学科的视角切入。但总体上讲,其关注的核心问题是如何用计算的方法模拟类人的学习行为:从历史经验中获取规律(或模型),并将其应用到新的类似场景中。 ...
  • 机器学习——特征工程之数据相关性前言图表相关性协方差和协方差矩阵代码实现相关系数1、皮尔逊相关系数( Pearson correlation coefficient)2、斯皮尔曼相关性系数、秩相关系数(spearman correlation coefficient...
  • 这篇文章将介绍基于机器学习的恶意代码检测技术,主要参考郑师兄的视频总结,包括机器学习概述与算法举例、基于机器学习方法的恶意代码检测、机器学习算法在工业界的应用。同时,我再结合自己的经验进行扩充,详细...
  • 机器学习相关书籍推荐推荐

    千次阅读 2014-11-12 22:26:35
    机器学习的资料较多,初学者可能会不知道怎样去有效的学习,所以对这方面的资料进行了一个汇总,希望能够对和我一样的初学者有一定的借鉴。 1. 数学基础  机器学习是构建于数学的基础之上的,因此只有把数学的...
  • 机器学习算法工程师面试考点汇总

    千次阅读 多人点赞 2019-07-01 08:44:45
    2019-06-29 10:41:12 ...本篇根据各个公司的机器学习相关岗位面试中问的问题进行总结,后面还会更新面试中考察所占比例。 知识点思维导图 数学基础: 1、微积分 1、SGD,Momentum,Adagard,Adam原...
  • 机器学习1-机器学习中建模过程

    万次阅读 多人点赞 2018-05-30 09:00:49
    机器学习中建模过程 数据处理 特征工程 模型选择 寻找最佳超参数 模型分析与模型融合 1.数据处理 1.1机器学习中使用的数据的原则 属性的值和属性的名称应该具有实际的意义。 去除属性中相关度高的属性 ...
  • 看了不少机器学习相关的文章,有描述知识点的:讲解算法非常详细,并且给出实现的程序demo。也有描述覆盖面的:泛泛而谈机器学习的典型应用场景,力图使大众易于理解。 但在一个软件工程中,机器学习如何应用,各...
  • 本章介绍的是每一个数据科学家都应该知道并听说的机器学习许多基本的概念和术语。这将是一个高层次的概括(本书唯一没有很多代码的一章)。内容很简单,但是你要保证在进行下一章之前对本章每个概念都理解得很透彻。...
  • 机器学习常见术语汇总

    万次阅读 2018-11-15 18:07:35
    例如,一个评估邮件信息并输出「垃圾邮件」或「非垃圾邮件」的机器学习模型就是一个二元分类器。 binning/bucketing 根据值的范围将一个连续特征转换成多个称为 buckets 或者 bins 二元特征,称为 buckets ...
  • 机器学习原理详解

    万次阅读 多人点赞 2018-12-22 21:35:42
    对这些数据抽取特征(特征已知,作为判断依据)、标结果(结果已知,作为判断结果),即告诉机器根据什么样的特征可以出什么样的结果,扔给机器学习算法找规律或建模型,找到规律之后可以对其他数据进行根据特征预测...
  • 一文了解基于复杂网络的机器学习

    千次阅读 2020-08-26 07:00:00
    作者:莫凡来源:华章计算机(hzbook_jsj)机器学习是一门有趣的学科,它本身就是一门交叉学科,同时又继续与新的学科交叉,不断产生新的分支,就像是时时推出新口味的碳酸饮料,让贪婪的味...
  • 如何选择最佳机器学习算法?

    千次阅读 2021-01-21 19:05:53
    没有任何一种机器学习算法,能够做到针对任何数据集都是最佳的。通常,拿到一个具体的数据集后,会根据一系列的考量因素进行评估。这些因素包括 :要解决的问题的性质、数据集大小、数据集特征、有无标签等。有了...
  • 机器学习之房价预测

    万次阅读 多人点赞 2019-10-19 21:33:52
    本文所述内容,参考了机器学习实战:基于Scikit-Learn和TensorFlow一书。 框架问题 数据流水线:一个序列数据处理组件称为一个数据流水线,组件通常是异步运行,组件和组件之间的连接只有数据仓库。 选择...
  • 机器学习在社会科学中的应用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,081
精华内容 37,632
关键字:

机器学习正相关