``
机器学习(Machine Learning)
机器学习是计算机科学的一个领域,目的在于让计算机能够通过学习数据来做出预测或决策,而无需被明确编程来完成任务。
机器学习的工作模式:
- 数据:机器学习需要数据来“学习”。这些数据可以是图片、文字、数字等。
- 学习过程:计算机使用算法(特定的数学程序)来分析数据,找出数据中的模式或关系。
- 模型:学习的结果是一个“模型”,它可以用来对新的数据进行预测或分类。
例如:垃圾邮件过滤系统中,想要过滤掉电子邮件中的垃圾邮件:
- 数据:有许多标记为垃圾邮件和正常邮件的数据。
- 学习过程:计算机分析这些邮件的内容、发件人等特征,学习哪些特征常出现在垃圾邮件中。
- 模型:训练好的模型可以自动判断新邮件是否是垃圾邮件。
机器学习包括:
- 监督学习包括:
- 回归 Regression
- 分类 Classification
- 给定一个样本特征 , 我们希望预测其对应的属性值 , 如果是离散的, 那么这就是一个分类问题;反之,如果是连续的实数, 这就是一个回归问题。
- 无监督学习
- 降维 Dimensionality reduction
- 聚类 Clustering
- 给定一组样本特征 , 我们没有对应的属性值 , 而是想发掘这组样本在 二维空间的分布, 比如分析哪些样本靠的更近,哪些样本之间离得很远, 这就是属于聚类问题;如果我们想用维数更低的子空间来表示原来高维的特征空间, 那么这就是降维问题。
深度学习(Deep Learning)
深度学习通常是人工智能的一部分,被认为是机器学习的一个分支。深度学习专注于基于人工神经网络的算法。这些算法能够处理和理解时间和空间上的复杂依赖关系。深度学习也被称为深度结构化学习(Deep Structured Learning)
。
这张图片上面展示了机器学习的流程:
- 在这个流程中,我们首先有一个“输入”(比如一辆车的图片)。
- 然后,由人们提取“特征”(特征提取)。这意味着人们会手动生成一些图片中的一些关键点,比如车的形状、颜色、大小等,作为判断并不是车的参考。
- 接下来,这些提取出来的特征被输入到一个分类器中,分类器会根据这些特征来判断这张图片中有没有车。
- 最终,分类器会输出一个结果:这张图片要么是一辆车,要么不是。
图片下方展示了深度学习的流程:
- 输入的仍然是同一张车的图片。
- 与机器学习不同,在深度学习中,整个过程都是自动化的。深度学习模型会自动从图片中提取特征并进行分类。换句话来说,模型不仅学会了“看”图片,还学会了自己从图片中找出什么是重要的,并根据这些信息来判断图片中是否有车。
- 最终,深度学习模型输出一个结果:图片中有一辆车,或者没有。
机器学习和深度学习的区别
深度学习是一种最新的、基于神经网络算法的机器学习,属于大的机器学习范畴。
传统上,机器学习都是一个人工的过程,比如特征提取,比如调节参数与优化,这就使得所能够处理的特征是有限的;而随着深度学习算法的提出,通过多层次的映射关系的处理,整个过程处理的特征更多,特征之间的关系更复杂。
深度学习的特性在于解决”输入特征极多,且特征之间信息冗余“的问题,例如《图象》《音频》《文本》等问题,
如果以后还有”输入特征极多,且特征之间信息冗余“的问题,都是可以归入深度学习身上的。
而此外的其它的问题,深度学习没有优势,一般用机器学习解决。
强化学习(Reinforcement Learning)
强化学习是机器学习的一种方法,通过让代理在环境中不断行动,并根据这些行动所获得的奖励来进行学习。代理的目标是最大化从环境中获得的总奖励,从而学习到最佳的决策策略。
打个比方,强化学习就像训练一只宠物。你希望宠物做出某种行为(比如坐下),当它做对了你就奖励它,而当它做错了你就不会给它奖励。通过不断的尝试和反馈,宠物渐进学会哪些行为是对的,哪些行为是错的。
迁移学习(Transfer Learning)
一种方法,通过使用已经训练好的模型的权重,在新的问题上进行微调,从而加快训练速度并提高模型的表现。
让我们用一个简单的例子来讲解迁移学习,想象你已经学会了一门外语,比如英语,并且你非常流利地使用它。现在你要学习另一门外语,比如法语。
- 普通学习:从头开始学习法语,你需要从基础开始学,例如字母、发音、语法等。这个过程是比较费时的。
- 迁移学习:你已经知道英语的语法、单词和发音规则,这些知识在学习法语时是有帮助的。比如,你知道英语和法语的某些单词非常相似(比如 “hotel” 在英语和法语中都是 “hotel”),你也可以利用你对语法规则的理解来帮助你更快地掌握法语。这就是迁移学习:利用已有的知识(英语)来加快学习新知识(法语)的过程。
在机器学习中,迁移学习的原理类似于上述学习外语的过程:
- 预训练模型:你首先在一个大数据集上训练一个模型,通常这个数据集比较大,任务也相对通用。例如,你可以在一个大规模的图片数据集(如 ImageNet)上训练一个深度学习模型,以识别各种物体(如猫、狗、汽车等)。
- 迁移知识:将这个在大数据集上训练好的模型(或其部分,比如模型的前几层)应用到一个新的任务上。例如,你想做一个新的任务——识别某个特定类型的植物。虽然模型之前是为了识别各种物体而训练的,但它已经学到了很多有用的特征(如边缘、形状、纹理等),这些特征对于植物的识别也有帮助。
- 微调:对迁移的模型进行微调。这一步是在你的新任务数据上进一步训练模型,使它能够更好地适应特定的任务。例如,你可以使用植物图片对模型进行进一步的训练,使模型更好地识别不同种类的植物。
监督学习(Supervised Learning)
在有标签的数据集
的监督下训练机器学习模型,就叫监督学习。监督学习算法大致可分为两大类型:回归
和分类
。
假设你有一批已经标注了各种形状的图片(正方形、圆形、三角形等),你用这些图片来训练一个模型,让其学会在看到新图片时也能正确分类到是哪种形状。
无监督学习(Unsupervised Learning)
在没有标签的数据集
的监督下训练机器学习模型,就叫无监督学习。在这种方法中,模型在没有标签的数据集上进行训练。无监督学习就像是让学生自己去发现问题的答案。你不给学生任何标注的答案,而是让他们自己去找出数据中的规律或模式。常见无监督学习包括降维
和聚类
。
这次的图片没有标签,监督学习需要自己根据这些图片分组,比如将四条边的分为一组,但是模型不会知道这是正方形,只是觉得他们很相似,所有就分为一组。
算法(Algorithm)
在机器学习中,算法就是用来处理数据并创建模型的一套步骤或方法。可以把它理解为一个“食谱”,它告诉计算机如何从数据中“学习”。比如,线性回归
和决策树
就是两种不同的算法。
模型(Model)
算法是处理数据的“方法”或“过程”。
数据集合是算法学习的原料,它合包含了用来训练和验证算法的数据。
模型是算法在特定数据集合上经过训练后得到的“结果”。它代表了从数据中学到的模式和关系,并可以用来对新数据进行预测或分类。
人工神经网络(Artificial Neural Networks, ANNs)
人工神经网络(ANNs)是一种受生物神经网络启发的计算模型,试图模拟人脑中神经元之间的连接和工作方式,用于处理复杂的计算任务,比如分类、回归、图像识别等。
就像动物大脑中的神经元通过连接来处理信息,人工神经网络也通过类似的“神经元”连接来学习和做出预测。
想象一下,人工神经网络就像一个“大型团队”,这个团队有很多“小组”在一起工作,每个小组负责不同的任务。
神经元(Neuron)
:每个小组成员都像一个神经元(大脑的基本单元),他们接收信息(输入数据),处理信息(加权求和、激活函数),然后将结果传递给其他小组成员(下一层神经元)。层(Layer)
:小组成员们被分成不同的“层级”,每一层的成员只和相邻层的成员进行交流。最常见的层有:输入层(Input Layer)
:接收外部数据,就像是团队最初接到的任务。隐藏层(Hidden Layer)
:处理和分析数据,相当于小组成员在内部讨论如何完成任务。输出层(Output Layer)
:给出最终的结果,相当于团队完成任务后给出的答案。权重(Weight)
:团队成员之间的交流强度,可以类比为权重。重要的信息会被强调(权重大),不重要的信息会被弱化(权重小)。激活函数(Activation Function)
:决定小组成员是否要“认真对待”某个信息的规则。类似于“要不要采取行动”的决策规则。
举一个具体的例子:假设你有一张图片,你希望神经网络判断图片上是否有猫。
输入层:接收到图片的像素值作为输入数据。
隐藏层:的神经元将这些像素值进行处理,逐步提取图片中的特征(比如边缘、形状)。
输出层:将处理后的结果综合,最终得出一个概率值,表示这张图片上是否有猫。
如果输出的概率值大于某个阈值(比如0.5),神经网络会判断图片上有猫;否则,判断图片上没有猫。
分类
阳性(Positive)和阴性(Negative)
阳性(Positive)
=正类
:通常指的是我们关注的类别或事件;阴性(Negative)
=负类
: 指的是与阳性相反的类别或事件。
如果对猫类别感兴趣,那么猫就是正类,而其他事物(例如狗,牛,人类)都是负类。
如果目标是检测/识别行人,那么行人就是正类,而其余的则是负类。
阳性和阴性完全是一个相对的概念,取决于任务中关注的对象。
混淆矩阵(Confusion Matrix)
混淆矩阵 = 可能性矩阵 = 错误矩阵,它是一种用于评估机器学习分类模型表现的工具,它将模型的预测结果分为四类,以预测垃圾邮件为例子:
真阳性(True Positive, TP)
:实际为阳性,预测也为阳性。垃圾邮件,模型分类为垃圾邮件
真阴性(True Negative, TN)
:实际为阴性,预测也为阴性。普通邮件,模型分类为普通邮件
假阳性(False Positive, FP)
= 第一类错误(Type I Error)
= 误报
:实际为阴性,预测为阳性。普通邮件,模型分类为垃圾邮件。
假阴性(False Negative, FN)
= 第二类错误(Type II Error)
= 漏报
:实际为阳性,预测为阴性。垃圾邮件,模型分类为普通邮件
阈值 Threshold
通过设置阈值,我们可以直接指示模型以何种置信度(Confident Level)来区分正类和负类
假设有一个用于垃圾邮件检测的逻辑回归模型,该模型预测一个介于 0 到 1 之间的值,表示给定电子邮件是垃圾邮件的概率。预测结果为 0.50 表示电子邮件为垃圾邮件的可能性为 50%,预测为 0.75 表示电子邮件为垃圾邮件的可能性为 75%,依此类推。
您想在电子邮件应用中部署此模型,以将垃圾邮件过滤到单独的邮件文件夹中。不过,为此,您需要转换模型的原始数值输出(例如 0.75)分为“垃圾邮件”或“非垃圾邮件”这两类。
如需进行此转换,您需要选择一个阈值概率,称为分类阈值(Classification Threshold)
。然后,概率高于阈值的示例会被分配到正类别
(即要测试的类,此处为 spam)。概率较低的示例会被分配到负类别
(即备选类别,此处为 not spam)。
虽然 0.5 看起来像是一个直观的阈值,但如果一种错误分类的代价高于另一种类型,例如将非常重要的正常邮件错误归类为垃圾邮件(这就是后面会提到的假阳性/第一类错误/误报 ),应显著提高阈值避免误判。
先给结论
- 降低阈值,会提高真正例、假正例(误报),降低真负例、假负例(漏报);
- 提高阈值,会提高真负例、假负例(漏报),降低真正例、假正例(误报)
- 原因显而易见,阈值更高,模型需要更高的信心才会归类为正例,因此不管实际正负,模型预测为正的例子都会变少,而结果是二元化,不预测为正就会预测为负,因此模型预测为负的例子都会变多。
举个例子,假设在数据集中,实际正例和实际负例分别为 50,合计 100
当阈值设为 0 时,代表着指示模型,将可能性大于 0 的例子归类为正例,实质就是将所有例子归类为正例
这样做的优点是能找出所有正例,但相对的,会引入很多误报。
以垃圾邮件为例,即虽然能准确找到所有垃圾邮件,但也会把所有普通邮件都当成垃圾邮件误报。
当阈值设为 0.53 时,代表着指示模型,将可能性大于 0.53 的例子归类为正例
这样做,我们可以极大减少误报,但相应地也会引入一些漏报。
以垃圾邮件为例,虽然此时有 8 封垃圾邮件没有被正确分类,但至少,有 47 封普通邮件被正确分类,显然,在邮件分类中,我们多看几封垃圾邮件,也不愿意遗漏任何一封普通邮件,因此可以说,0.53 的阈值比 0 的阈值更合理。
当阈值设为 0.68 时,代表着指示模型,将可能性大于 0.68 的例子归类为正例
这样做,我们可以将误报完全消除,但相应地引入了大量的漏报。
以垃圾邮件为例,虽然此时所有普通邮件都没有被误伤(FP = 0),但相应的,漏网之鱼垃圾邮件大大增加到 22。
在做深度学习预测分类时,有些任务绝对不能出现漏报,为此就算带来了很多误报,也可以接受;有些任务,可以容忍出现一些漏报,只要将漏报和误报控制在一个较低的水平就可以。
- 癌症筛查:漏诊癌症(FN)可能导致患者错过最佳治疗时机,危及生命。此时采取的策略应是召回率优先(将阈值降低),即使将许多良性肿瘤误判为恶性(FP),也需确保尽可能检出所有癌症病例。
- 电商商品推荐:误推不相关商品(FP)降低用户体验;漏推潜在喜欢商品(FN)损失部分转化率。此时采取的策略应是平衡精确率和召回率,即将阈值调整到合理地步,类似上面的 0.52 。
数据集不平衡
作为训练模型的一部分,我们希望提供给模型的数据集中,每个类别包含的实际个例数,应当大致相当。如果实际正例
的总数与实际负例
的总数不接近,则表示数据集不平衡。以预测垃圾邮件为例,数据集中可能数千条普通邮件,而垃圾邮件只有几例。
评价模型的指标
真正例、假正例和假负例是用于计算评估模型的几个实用指标。哪些评估指标最有意义,取决于具体模型和具体任务、不同错误分类的代价,以及数据集是平衡的还是不平衡的。
本部分中的所有指标均基于单个固定阈值计算得出,并且会随阈值的变化而变化。很多时候,用户会调整阈值以优化其中某个指标。
准确率(Accuracy)
:准确率用于衡量一个分类模型的效果。它表示模型预测对的次数占总预测次数的百分比。- 由于精度包含混淆矩阵中的所有四种结果(TP、FP、TN、FN),因此,在执行通用或未指定任务的通用或未指定模型、数据集平衡、两个类别中的示例数量相近的情况下,精度可以用作衡量模型质量的粗略指标。
- 例如,模型测试了 100 张图片,其中有 90 张预测正确(TP + TN = 90),那么准确率就是 90%。
- 对于严重不均衡的数据集(例如普通邮件占比非常低为1%,垃圾邮件占比为 90%),如果我们将阈值调到最高,模型 100% 都预测为负类(普通邮件),则准确率得分为 99%。尽管得分很高,这个模型实质毫无用处
精确率(Precision)
:所有被预测为正类的样本中,实际为正类的比例。
召回率(Recall)
=灵敏度(Sensitivity)
=真正例率(TPR)
:所有实际为正类的样本中,被预测为正类的比例,衡量模型正确识别正类的能力。召回率。- 在实际正例数量非常少的不均衡数据集中,召回率作为指标的意义不大。
- 在实际正例数量非常少的不均衡数据集中,召回率作为指标的意义不大。
准确率会在一个合适的阈值达到最高;但精确率和召回率通常呈反函数关系,其中一个提高会反过另一个,无法同时提高二者。
F1 Score
:是精确率和召回率的调和平均数(一种平均值)。该指标在精确率和召回率的重要性之间进行了平衡,对于类别不平衡的数据集,该指标优于准确率。更广泛地说,当精确率和召回率的值接近时,F1 也会接近它们的值。当精确率和召回率相差很大时,F1 将与较差的指标相似。
假正例率(False Positive Rate, FPR)
=误报概率
:所有实际为负类的样本中,(错误地)被预测为正例的比例。
- 特异性(Specificity):所有实际为负类的样本中,(正确地)被预测为负类的比例,衡量模型正确识别负类的能力。特异性 = 真正负类率,
例题:构建一个二元分类器,用于检查昆虫捕获器的照片,以确定是否存在危险的入侵物种。在该系统中,误报(假正例)很容易处理:昆虫学家发现照片被错误分类,并将其标记为误报即可。假设准确率水平在可接受的范围内,此模型应该针对哪个指标进行优化?
误报 (FP) 的成本较低,而假负例的成本非常高,因此,最大限度地提高召回率(即检测概率)是明智之举。
标注(Annotation)
标注就是给数据打标签的过程。在机器学习中,标注数据是为了让模型能够学习如何将输入数据映射到正确的输出。标注的过程通常包括以下几个步骤:
- 选择数据:选择需要标注的数据,例如图片、文本或视频。
- 添加标签:为每个数据样本添加标签。例如,我们有一组图片,我们会给每张图片加上标签,标明这张图片是“狗”还是“猫”。
- 检查和验证:确保标注的准确性,以便模型可以学习到正确的信息。
ROC 曲线(ROC, Receiver Operating Characteristic Curve)
上一部分介绍了一组模型指标,这些指标均以固定的阈值来计算,一旦更换阈值,每个指标都会变化。
如果想评估所有可能的阈值下模型的表现,则需要 ROC、AUC。
ROC 曲线是模型在所有阈值上的表现的可视化表示。
ROC 曲线的绘制步骤:
- 将 0-1 之间的阈值按照固定间隔分类,例如十等分。
- 对于每个阈值,计算对应的 TPR 和 FPR。
- 绘制 ROC 曲线:将所有阈值对应的 TPR 和 FPR 绘制在图上,FPR 为 x 轴,TPR 为 y 轴。
- 计算 AUC:ROC 曲线下的面积(AUC)表示模型的整体性能。AUC 值越高,模型的分类性能越好。
举个例子,假设有一个医疗检测模型,用于判断患者是否患有某种疾病(正样本)或没有疾病(负样本)。我们将绘制 ROC 曲线来评估模型性能。
- 收集预测概率:预测结果可能是每个患者的概率值,比如 [0.1, 0.4, 0.35, 0.8]。
- 选择不同阈值:选择阈值 0.2, 0.4, 0.6, 0.8 等。
- 计算 TPR 和 FPR:对于阈值 0.2,将所有预测概率大于等于 0.2 的样本标记为正类。计算 TPR 和 FPR。
- 重复上述步骤,计算其他阈值下的 TPR 和 FPR。
- 绘制 ROC 曲线:在图中,x 轴是 FPR,y 轴是 TPR,绘制 ROC 曲线。
- 计算 AUC:计算 ROC 曲线下的面积。AUC 越接近 1,模型性能越好。
曲线下方面积 (Area under the curve,AUC)
曲线下面积的数学意义是,代表模型在随机选择一个正例和一个负例时,将正例的排序高于负例的概率,表示模型在所有可能的阈值下的总体表现。
以垃圾邮件为例子,AUC 为 1.0 的垃圾邮件分类器始终会给随机选取的垃圾邮件赋予比随机选取的正常邮件更高的垃圾邮件概率。
更为人话的说法就是,AUC 越高,表示模型在打分阶段更能准确地区分正例和负例:它通常会给正例更高的得分,给负例更低的得分,从而具备更强的区分能力。
AUC反映了二分类模型对正负样本的区分能力,取值范围从 0 到 1:
- AUC = 1:模型能够完美地区分所有正样本和负样本。
- AUC = 0.5:模型的性能相当于随机猜测,没有实际区分能力。
- AUC < 0.5:模型的预测性能差于随机猜测,通常需要重新训练或调整模型。
完美模型的 ROC 和 AUC,由于在任何阈值下均不存在误报和漏报,且 TP、TN 均为 1,因此 TPR、FPR 均为恒定常数 1。
随着阈值从1逐步减小到0(或从高到低),模型会“更宽松”地判为正类,导致:
- TPR 上升(找到了更多正类)
- FPR 也上升(错判的负类也变多)
线性回归
线性回归是一种统计方法,用于发现变量之间的关系。在机器学习背景下,线性回归可找出特征与标签之间的关系。
例如,假设我们想要根据汽车的重量预测汽车的每加仑汽油行驶里程(mpg),并且我们有以下数据集:
线性回归方程 Linear regression equation
具有多个特征的模型
损失 Loss
损失是一个数值指标,用于描述模型的预测有多不准确。损失函数用于衡量模型预测与实际标签之间的距离。训练模型的目标是尽可能降低损失,将其降至最低值。
下图中,损失可视化为从数据点指向模型的箭头。箭头表示模型的预测结果与实际值之间的差距。