当前位置: 首页 > news >正文

终于有人把任务T、性能P和经验E讲明白了

导读:本文带你了解机器学习类别与范式。

作者:张春强 张和平 唐振

来源:大数据DT(ID:hzdashuju)

关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:

对于某类任务T和性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习。

该定义没有突出人类进行机器学习的目的——决策,即机器学习是计算机根据数据做出或改进预测或行为的方法。

但总体来说,机器学习的任务就是围绕T、P、E展开的,下面将进一步拆解T、P、E。下文中有算法、模型、学习器混用的现象,有时表达的是同一个意思,有时依据上下文会有细微的区别。

01 经验E

“经验”一词较为抽象,既可以是文字、图形,也可以是当面交流的对话等,属于知识的范畴。对于机器学习而言,经验必须表示为计算机可以处理的形式——数据,按照更贴近计算机底层的说法是,计算机可直接计算的数值,这也是最终进入算法中的形式(向量运算、矩阵运算等)。

正因如此,机器学习中涉及大量的数据处理活动:将文字和字符编码为数值、将图像进行数值化处理等,然后进入算法学习。机器学习中所有数据处理的原则可归结为两条:适合计算机处理和便于机器学习算法学习。

扩展数据的上下游将产生大量与数据相关的活动,如数据获取、数据存储、数据ETL等,与之对应的是不同的数据行业或技术领域。

我们一般会将数据表示为如表1-1所示的二维表,并适当调整原始数据。

▼表1-1 示例数据

表中所有的数据可称为样本(sample),表中的每一行称为样例或实(instance),而每一列(此数据中排除首尾两列)在机器学习中更常称为特征(feature),在计量经济、统计等学科中更常称为变量(variable)或属性(attribute)。该数据源中instant列仅作标识用,无其他意义;而cnt列为目标(target)列,一般称为标签(label)。

有时人们也称只包含标识(或维度)列和标签列的数据集为样本,样本不包含特征。

从表1-1中可以看出,此处的数据有不同的类型:dteday列是日期型数据(时间序列),fake_1列是数据字符(无序),fake_2列是字符(有序),workingday列是布尔型数据(无序),temp列是常规的浮点数据。

不同类型数据的处理方法不同。根据具体的机器学习问题,我们有时需要进行特征离散化或连续化处理。除此之外,机器学习实践过程中还可能会遇到空间、图片、音频和视频等数据,这些数据也需要特殊处理。

我们将dteday到temp列以X表示,cnt列以y来表示,则机器学习的最终任务可表示为:

y = f(X)

通常来说,y为因变量(dependent variable)或响应变量,X为自变量(Independent Variable)、独立变量、解释变量或预测变量,所有可能的f称为假设空间

按照统计学的概念,我们将上面的表述进一步扩展:将X所有可能构成的集合叫作领域集(domain set),对应的y为标签集(label set)。可获得的数据样本可进一步分为训练集(Train set)、测试集(Test set)和验证集(Validate set)等。

顾名思义,训练数据是(某轮)机器学习算法学习的数据,而测试和验证则是度量其训练效果的数据,有时也称为袋外数据(Out Of Bag)。

在一些集成算法的执行过程中,以上几种数据划分有时是模糊的或交替的,例如在交叉验证的情况下训练随机森林。在一些具有时间属性的场合,把训练集和测试集时间范围外的、起最终模型估计作用的数据集称为OOT集(Out Of Time set),也称跨时间测试集。

当数据集中的特征(列)太多时,会引发维度灾难,给机器学习求解带来困难或造成过拟合(训练集上表现好,测试集上表现差),从而导致机器学习在新场景下效果很差。

针对这一问题,我们需要选取对问题有用的特征。当数据集中的特征(列)太少或可能存在更有价值的隐变量时,特征衍生就像机器学习中的一个魔法,对特征交叉组合出新的特征。

在一些特定的建模场景里,比如在银行和互联网金融领域,评分卡应用历史悠久,其理论研究也非常丰富。笔者认为,构建评分卡的过程中,变量分箱(离散化)是最核心的技术。实际上,树模型本质上也是离散化了特征。

如果我们对数据集进一步研究会发现,数据集的元信息还能传递信息,如数据集的行数和列数、数值列和类别型列的数量、类别值的数量、列空值占比、行空值占比。

此外,还有大量的数据统计信息,如最大和最小值、均值和分位数、偏度和峰度、中间绝对偏差(Median Absolute deviation,MAD)等。所有这些信息都是机器学习可处理、可衍生、可转化、可利用、可挖掘的信息。

当然,除了上述将经验表示为数据的形式外,经验自然还包括人们对问题的看法和见解,它们指导机器学习的过程,包括填充空值、选择特征、选择算法、调整算法参数、选择和评判最终模型。这是机器学习的现状——需要大量人力的参与,机器本身智能有限(狭义的人工智能)。

总之,机器学习中经验E的本质是进行知识和经验的表示和表达,进而在计算机世界里传承。

最后需要注意,经验有效的前提条件是:我们获得的数据来自真实世界的缩影,同时训练数据和未来或未见的数据在相同的特征空间里且具有相同、相近或相关的分布。

也就是说,如果现有的数据和经验在某种程度上具有普适性,可应用在未来或当前类似的场景,则经验有用。经验和知识的质量(正确性、完整性)将直接影响学习的结果。

数据的形式决定了任务T和性能P的形式,下面来一一介绍。

02 任务T

延续对数据形式的分析,我们根据数据是否有标签列,引出新的概念:有监督学习、无监督学习、半监督学习和强化学习(主动学习或弱监督学习)。

1. 有监督学习(Supervised Learning)

有监督学习的数据集中有标签列,由标签列“监督”学习。学习的成果是将数据拟合成函数或逼近的函数。有监督学习是最常见也是应用最广泛的一类机器学习任务。

2. 无监督学习(Unsupervised Learning)

无监督学习的数据集中没有标签(没有标签的原因可能是人工标注成本太高,或由于缺少先验知识)。无监督学习的目的往往是发现某种关系、关联规则,没有显式定义目标函数。比如聚类,聚类的目的是把相似的东西聚集在一起,而不关心聚集的类别是什么,常用的算法有K-means、K-medoids等。

3. 半监督学习(Semi-Supervised Learning)

顾名思义,半监督学习的数据集中部分有标签,部分无标签。这种现象往往是数据获取现实的无奈,例如,现实情况下(成本或时间限制)只能获取到一部分有标签的数据,还有较多的无标签数据。此时为了尽可能多地利用数据,我们需要将部分无标签的数据由某种方法打上伪标签,然后进行学习。

在风控领域,信用风险模型中的拒绝演绎就属于这种情况,感兴趣的读者可以参考相关的资料。只有在现实严峻的情况下,才会考虑半监督学习。

4. 强化学习(Reinforcement Learning)

强化学习中的智能体(Agent)以“试错”的方式进行学习,以通过与环境进行交互获得的奖赏指导行为,具有主动学习的特点,目标是使智能体获得最大的奖赏(预期利益)。

强化学习中没有明确的y,取而代之的是奖励信号(奖赏)。这种奖励信号不像有监督学习中的标签那样直接和确切,属于弱监督学习的问题。强化学习常常用于机器人智能对话、智能问答、自动驾驶等。

进一步地,在有监督学习中,根据y变量连续或离散的属性可将任务分为分类问题回归问题:当y变量是连续变量时为回归问题,比如预测房价;当y变量是离散型变量时为分类问题,比如预测好与坏。

更进一步,根据y取值的唯一值个数不同,可将任务分为二分类和多分类。根据分类问题的y是否有序,可进一步分为排序问题和非排序问题。

多分类可看作二分类的衍生或组合,二分类是该类学习问题的基础结构,所以书中主要以二分类为示例讲解。二分类中y取值的常见表示形式有(0, 1)、(-1, +1)、(好, 坏)、(正, 负)。在实际操作中,我们一般会将其编码为适合算法处理的(0, 1)形式。

在分类问题中,y变量取值可能会失衡,例如100个值中只有1个取值为1,其他取值为0。这属于机器学习中不平衡样本的例子,常见于反欺诈和广告点击预估等场景。这类型的样本会对算法学习造成困难,需要使用不均衡样本的处理技术。

实际上,机器学习任务从不同的维度有不同且丰富的分类方式,足以扰乱初学者的视线。为此,我们再从另外的视角对机器学习任务进行梳理。

1. 生成模型和判别模型

有监督学习方法可以按模型的两种产生方式——生成方式判别方式相应得到生成模型判别模型

生成方式中,对数据的潜在分布做出假设(比如各个特征之间条件独立),然后估计模型参数生成模型。应用于分类问题时,算法学习数据中的联合概率分布为P(x,y),然后求出条件概率分布作为判断结果,比如常见的朴素贝叶斯法。

判别方式的学习方法是一种与数据分布无关的学习框架,并不需要对数据的分布做出任何假设,也无须刻画数据的潜在分布,而是直接对目标函数进行优化。在一般的分类器中,判别式函数和后验概率P(y|x)是对应的,所以判别式函数最大化同时也是后验概率最大化。

判别式在机器学习算法中很常见,包括逻辑回归、决策树、支持向量机、提升方法等。

2. 主动学习和被动学习

前面在介绍强化学习时提到了主动学习(如主动提出样本标注建议),与主动学习对应的是被动学习。被动学习中的算法只能观察静态的信息和数据而不能影响、引导和改变它。

3. 积极学习和消极学习

积极学习指的是算法在训练阶段学习到了数据中的规则或模式,在模型预测时只需要使用学得的规则或模式直接决策。积极学习是最常用的机器学习算法。

与之相反,消极学习并未在经验数据上学得通用化的模式,而是简单地将训练样本存储起来,当有新的实例到来时,直接计算新实例与训练数据之间的关系,并据此作出决策,这种方式也称为基于实例的学习。

很明显这种方式需要存储训练样本,模型文件的大小将比积极学习的模型大很多。最近邻(k-Nearest Neighbor,kNN)算法就是如此。注意,支持向量机(SVM)模型虽然也存储部分样例,但与消极学习有本质区别。

4. 在线学习和离线学习

在线学习亦称为增量学习,指的是随着数据的持续增加,算法具有动态改进以适应新环境的能力,同时保留对历史的记忆。在大数据时代,在线学习大大降低了学习算法的空间复杂度和时间复杂度,实时性强,但对系统和工程环境要求严苛,且稳定性值得考量。

与之相对的是我们所常见的离线学习,即所有的训练数据预先给定,当环境变化时需要重构或重建模型,以保持对环境的跟进。

5. 迁移学习

在对环境进行跟进的问题上,迁移学习是另一个研究方向。数据本质上有随时间迁移的可能性,迁移学习旨在成为当数据不在同一个特征空间或同一分布,且获取新训练数据困难时采取的一种新的学习框架。

6. 线性模型和非线性模型

按照几何复杂度来看,线性模型较为简单,非线性模型较为复杂,非线性模型一般能更好地拟合数据。

常见的线性模型有线性回归或逻辑回归、线性的支持向量机(使用核函数将非线性转化为线性)、神经网络基础结构感知器;非线性模型包括基于树的模型,比如决策树、随机森林、多层或深层神经网络等。

7. 黑盒模型和白盒模型

从可解释性上描述模型,白盒模型可解释性强,易于理解机器学习做出决策的缘由,比如线性回归模型,变量前的系数决定了该变量对结果的影响程度;反之为黑盒模型,人们不能直白地理解模型内部是如何做出决策的,比如深层神经网络。

由于线性关系易于理解,很多解释性的方法将模型转化为局部的线性关系或边缘分布来观察变量与目标变量的关系。

以上各种机器学习任务的知识点在本文中并不能全面覆盖,之所以从各个维度将机器学习任务进行分类,主要是期望让读者形成对机器学习的整体认识,不至于在遇到新名词时产生过多困扰。

03 性能P

此处的性能指的是学习任务通过数据学得的模型表现的优劣程度,也是有监督学习任务的评判方式(无监督学习无法直接评判),以此作为模型评价和模型选择的依据。

性能评判过程既可能发生在模型训练阶段,也可能发生在模型训练后的模型选择阶段。

对于不同的任务,模型性能的评价指标也不同;而对于相同的任务,评价指标也有多种,甚至对于数据特性不同的任务,也可以选择特定的评价指标以关注特定的点,例如模型在不平衡样本中可以选用PRC(Precision Recall Curve)作为一个评价指标。本质上,评价指标度量了模型预测和真实之间的差异。

在实践过程中模型性能的评估主要包括3个步骤:确定要进行衡量或比较的数据集,在确定后的数据集上使用模型进行预测或判别,选取适合问题的指标进行评价。

1. 确定数据集

一般我们在测试集上查看模型的表现,然而在项目实践中,更为全面和保险的做法是查看所有已划分数据集上模型的表现,以纵观全局。例如,数据划分为训练集和测试集,那么建议看两个数据集上的表现。

而在带时间属性的数据集上,除了查看训练、测试数据集外,重点需要查看OOT集上的模型表现,以预估未来一段时间里模型性能的表现趋势。如果各数据集上模型表现差异很大,那么我们有理由怀疑模型过拟合或数据发生了迁移。

2. 模型预测或判别

使用模型在上述已确定的数据集上进行预测或判别,得到模型在各数据集上的表现。

3. 评价指标

评价指标繁多,一般以统计量(标量)的简洁形式表示。以回归和分类问题为例。回归包括均方误差(Mean Squared Error,MSE)、均方根误差(Root Mean Squared Error,RMSE)、平均绝对百分比误差(Mean Absolute Percent Error,MAPE)、R-Squared等。

二分类中的混淆矩阵是很多评价指标的基础,以矩阵形式表示,常见的衍生指标有AUC(Area Under the Curve)、准确率Accuracy、精确率Precision、召回率Recall和F1等。KS(Kolmogorov-Smirnov)也是常用的模型区分能力指标。

除了关注统计量的指标,我们也关注模型表现的曲线,它们能更细致地展现模型在不同区域的表现力,包括ROC(Receiver Operating Characteristic,受试者工作特征曲线)、PRC、Lift、Gains等。在多分类的评价指标中不能使用AUC等,一般展现混淆矩阵和使用F1的变体,包括F1-Macro、F1-Micro等。

需要注意的是,有的指标值(如单位量纲)具有特定的含义,不能在模型间进行比较;有的指标(如AUC)则具有普适的特性,能在模型间比较以为模型选择提供决策参考。

在项目实践中,单一的评价指标可能有失偏颇,我们在重点关注一个指标的同时也要关注其他维度。可以根据业务场景,重点关注高分段模型的区分能力或者建立适合场景的指标体系,进行综合决断。

有时评价指标的选取反映了建模人员的综合能力(比如看问题的角度),那些能够依据机器学习项目的特殊情况,自定义评价指标的人员更加出色。

在机器学习得到具体的评价指标后,项目实践还远未结束,还需要解决如何确定阈值、是否进一步对指标进行处理等问题,既要有行业经验、业务场景,还要有人的主观意识参与其中。

评价指标本质是“度量了预测和真实之间的差异”,理论上来说评价指标也可作为模型训练过程中的损失函数,比如在回归问题中,MSE既可作为评价指标,又可作为损失函数。但作为损失函数,除了要求能表征模型预测和真实的差异关系外,还要求具有良好的数学性质(连续可导等)。

关于作者:张春强,是一位具有3年C/C++、7年大数据和机器学习经验且富有创造力的技术专家,在技术一线摸爬滚打近10年,先后就职于大型IT、世界500强企业,目前就职于某大型金融科技集团,负责数据挖掘、机器学习相关工作的管理和研发。

张和平,现就职于某互联网金融集团科技公司,任大数据模型工程师,负责机器学习在金融风控和用户运营方面的应用工作,善于运用机器学习、数据挖掘、知识图谱和大数据技术解决实际的业务问题。在大数据风控建模、用户画像、大数据平台建设等方面有丰富的实践经验。

本文摘编自《机器学习:软件工程方法与实现》,经出版方授权发布。

延伸阅读《机器学习:软件工程方法与实现》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:大型金融集团专家撰写,将软件工程方法、工具和策略应用到机器学习,提供高质量代码设计和工业应用框架。


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

每天来听华章哥讲书

更多精彩回顾

书讯 | 5月书讯(下)| 5天小长假,一起读新书

书讯 | 5月书讯(上)| 5天小长假,一起读新书

资讯 | DB-Engines 5月数据库排名:MySQL或将超越Oracle?

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

干货 | 什么是架构?网络架构中都有什么?终于有人讲明白了

收藏 | 终于有人把Scrapy爬虫框架讲明白了

上新 | 【新书速递】架构师是怎样炼成的

活动 | 技术大会 | Gdevops全球敏捷运维峰会 - 广州站

相关文章:

  • Python之禅:编写优雅Python代码的16个原则
  • “1000名本科生,就产生一名院士!”说实话,我被这所学校凡尔赛到了
  • 企业数字化转型:IT部门的未来!
  • 网络安全杀伤链:权限提升
  • 你所关注的SaaS问题,可能都在这本书中!
  • 一本书掌握Kubernetes核心技术
  • 何谓大数据?
  • 【第57期】中台与数字化转型
  • 我的15年操作系统开源路——RT-Thread 创始人熊谱翔
  • 6月书讯 | 初夏,正好读新书
  • 大咖带你读:《深入实践 DDD:以 DSL 驱动复杂软件开发》
  • 初识 ink!
  • 简述Python中常见的数据结构
  • 终于有人把大数据架构讲明白了
  • 鸿蒙OS2面世,一本书了解“现代操作系统”!
  • [译]CSS 居中(Center)方法大合集
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Android优雅地处理按钮重复点击
  • CAP理论的例子讲解
  • Java 内存分配及垃圾回收机制初探
  • oschina
  • Redis中的lru算法实现
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 搭建gitbook 和 访问权限认证
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用element的upload组件实现多图片上传和压缩
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • # Apache SeaTunnel 究竟是什么?
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (Java数据结构)ArrayList
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)插入排序
  • ***利用Ms05002溢出找“肉鸡
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core 项目指定SDK版本
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET MVC第三章、三种传值方式
  • .NET MVC之AOP
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 的字符串暂存池
  • @media screen 针对不同移动设备
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @软考考生,这份软考高分攻略你须知道
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术