深入理解机器学习——机器学习概览_深入机器学习-程序员宅基地

技术标签: 监督学习  机器学习  无监督学习  深入理解机器学习  深度学习  人工智能  

分类目录:《深入理解机器学习》总目录


机器学习算法是一种能够从数据中学习的算法。卡耐基梅隆大学计算机科学学院机器学习系主任Mitchell给出了机器学习算法的定义:对于某类任务 T T T和性能度量 P P P,一个计算机程序被认为可以从经验 E E E中学习是指,通过经验 E E E改进后,它在任务 T T T上由性能度量 P P P衡量的性能有所提升。

经验 E E E,任务 T T T和性能度量 P P P的定义范围非常宽广,我们会在接下来的文章中提供直观的解释和示例来介绍不同的任务、性能度量和经验,这些将被用来构建机器学习算法。

任务 T T T

机器学习可以让我们解决一些人为设计和使用确定性程序很难解决的问题。从科学和哲学的角度来看,机器学习受到关注是因为提高我们对机器学习的认识需要提高我们对智能背后原理的理解。

从“任务”的相对正式的定义上说,学习过程本身不能算是任务。学习是我们所谓的获取完成任务的能力。例如,我们的目标是使机器人能够行走,那么行走便是任务。我们可以编程让机器人学会如何行走,或者可以人工编写特定的指令来指导机器人如何行走。

通常机器学习任务定义为机器学习系统应该如何处理样本。样本是指我们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的特征的集合。我们通常会将样本表示成一个向量 x ∈ R x\in R xR,其中向量的每一个元素 x i x_i xi是一个特征。例如,一张图片的特征通常是指这张图片的像素值。

机器学习可以解决很多类型的任务。一些非常常见的机器学习任务列举如下:

  • 分类:在这类任务中,计算机程序需要指定某些输入属于 k k k类中的哪一类。为了完成这个任务,学习算法通常会返回一个函数 f ( x ) : R n → { 1 , 2 , ⋯   , k } f(x):R^n\rightarrow \{1, 2, \cdots, k\} f(x):Rn{ 1,2,,k}。当 y = f ( x ) y=f(x) y=f(x)时,模型将向量 x x x所代表的输入分类到数字码 y y y所代表的类别。还有些其他的分类问题,例如, f ( x ) f(x) f(x)输出的是不同类别的概率分布。分类任务中有个任务是对象识别,其中输入是图片(通常由一组像素亮度值表示),输出是表示图片物体的数字码。
  • 输入缺失分类:当输人向量的每个度量不被保证的时候,分类问题将会变得更有挑战性。为了解决分类任务,学习算法只需要定义一个从输入向量映射到输出类别的函数。当一些输入可能丢失时,学习算法必须学习一组函数,而不是单个分类函数。每个函数对应着分类具有不同缺失输入子集的 x x x。这种情况在医疗诊断中经常出现,因为很多类型的医学测试是昂贵的,对身体有害的。有效地定义这样一个大集合函数的方法是学习所有相关变量的概率分布,然后通过边缘化缺失变量来解决分类任务。使用 n n n个输入变量,我们现在可以获得每个可能的缺失输入集合所需的所有 2 n 2^n 2n个不同的分类函数,但是计算机程序仅需要学习一个描述联合概率分布的函数。
  • 回归:在这类任务中,计算机程序需要对给定输入预测数值。为了解决这个任务,学习算法需要输出函数∫: f ( x ) : R n → R f(x):R^n\rightarrow R f(x):RnR。除了返回结果的形式不一样外,这类问题和分类问题是很像的。这类任务的一个示例是预测投保人的索赔金额(用于设置保险费),或者预测证券未来的价格。这类预测也用在算法交易中。
  • 转录:这类任务中,机器学习系统观测一些相对非结构化表示的数据,并转录信息为离散的文本形式。例如,光学字符识别要求计算机程序根据文本图片返回文字序列。谷歌街景以这种方式使用深度学习处理街道编号。另一个例子是语音识别,计算机程序输入一段音频波形,输出一序列音频记录中所说的字符或单词ID的编码。深度学习是现代语音识别系统的重要组成部分,被各大公司广泛使用,包括微软,IBM和谷歌。
  • 机器翻译:在机器翻译任务中,输入是一种语言的符号序列,计算机程序必须将其转化成另一种语言的符号序列。这通常适用于自然语言,如将英语译成法语。近些年,深度学习已经开始在这个任务上产生重要影响。
  • 结构化输出:结构化输出任务的输岀是向量或者其他包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。这是一个很大的范畴,包括上述转录任务和翻译任务在内的很多其他任务。例如语法分析——映射自然语言句子到语法结构树,并标记树的节点为动词、名词、副词等等。另一个例子是图像的像素级分割,将每一个像素分配到特定类别。例如,深度学习可用于标注航拍照片中的道路位置。在这些标注型的任务中,输出的结构形式不需要和输入尽可能相似。例如,在为图片添加描述的任务中,计算机程序观察到一幅图,输出描述这幅图的自然语言句子。这类任务被称为结构化输出任务是因为输出值之间内部紧密相关。例如,为图片添加标题的程序输出的单词必须组合成一个通顺的句子。
  • 异常检测:在这类任务中,计算机程序在一组事件或对象中筛选,并标记不正常或非典型的个体。异常检测任务的一个示例是信用卡欺诈检测。通过对你的购买习惯建模,信用卡公司可以检测到你的卡是否被滥用。如果窃贼窃取你的信用卡或信用卡信息,窃贼采购物品的分布通常和你的不同。当该卡发生了不正常的购买行为时,信用卡公司可以尽快冻结该卡以防欺诈。
  • 合成和采样:在这类任务中,机器学习程序生成一些和训练数据相似的新样本。通过机器学习,合成和采样可能在媒体应用中非常有用,可以避免艺术家大量昂贵或者乏味费时的手动工作。例如,视频游戏可以自动生成大型物体或风景的纹理,而不是让艺术家手动标记每个像素。在某些情况下,我们希望采样或合成过程可以根据给定的输入生成一些特定类型的输出。例如,在语音合成任务中,我们提供书写的句子,要求程序输出这个句子语音的音频波形。这是一类结构化输出任务,但是多了每个输入并非只有一个正确输出的条件,并且我们明确希望输出有很多变化,这可以使结果看上去更加自然和真实。
  • 缺失值填补:在这类任务中,机器学习算法给定一个新样本KaTeX parse error: Undefined control sequence: \inR at position 2: x\̲i̲n̲R̲^n中某些元素 x i x_i xi缺失。算法必须填补这些缺失值。
  • 去噪:在这类任务中,机器学习算法的输入是干净样本 x ∈ R n x\in R^n xRn经过未知损坏过程后得到的损坏样本 x ~ ∈ R n \widetilde{x}\in R^n x Rn。算法根据损坏后的样本北预测干净的样本,或者更一般地预测条件概率分布 P ( x ∣ x ~ ) P(x|\widetilde{x}) P(xx )
  • 密度估计或概率质量函数估计:在密度估计问题中,机器学习算法学习函数 p m o d e l ( x ) : R n → R p_{model}(x):R^n\rightarrow R pmodel(x):RnR,其中 p m o d e l ( x ) p_{model}(x) pmodel(x)可以解释成样本采样空间的概率密度函数或者概率质量函数。要做好这样的任务,算法需要学习观测到的数据的结构。算法必须知道什么情况下样本聚集出现,什么情况下不太可能出现。以上描述的大多数任务都要求学习算法至少能隐式地捕获概率分布的结构。密度估计可以让我们显式地捕获该分布。原则上,我们可以在该分布上计算以便解决其他任务。例如,如果我们通过密度估计得到了概率分布 p ( x ) p(x) p(x),我们可以用该分布解决缺失值填补任务。如果 x i x_i xi的值是缺失的,但是其他的变量值 x − i x_{-i} xi已知,那么我们可以得到条件概率分布 p ( x i ∣ x − i ) p(xi|x_{-i}) p(xixi)。实际情况中,密度估计并不能够解决所有这类问题,因为在很多情况下 p ( x ) p(x) p(x)是难以计算的。

当然,还有很多其他同类型或其他类型的任务。这里我们列举的任务类型只是用来介绍机器学习可以做哪些任务,并非严格地定义机器学习任务分类。

性能度量 P P P

为了评估机器学习算法的能力,我们必须设计其性能的定量度量。通常性能度量 P P P是特定于系统执行的任务 T T T而言的。

对于诸如分类、缺失输入分类和转录任务,我们通常度量模型的准确率。准确率是指该模型输出正确结果的样本比率。我们也可以通过错误率得到相同的信息。错误率是指该模型输岀错误结果的样本比率。我们通常把错误率称为 0 − 1 0-1 01损失的期望。在一个特定的样本上,如果结果是对的,那么 0 − 1 0-1 01损失是0;否则是1.但是对于密度估计这类任务而言,度量准确率,错误率或者其他类型的 0 − 1 0-1 01损失是没有意义的。反之,我们必须使用不同的性能度量,使模型对每个样本都输出一个连续数值的得分。最常用的方法是输出模型在一些样本上概率对数的平均值。

通常,我们会更加关注机器学习算法在未观测数据上的性能如何,因为这将决定其在实际应用中的性能。因此,我们使用测试集数据来评估系统性能,将其与训练机器学习系统的训练集数据分开。性能度量的选择或许看上去简单且客观,但是选择一个与系统理想表现对应的性能度量通常是很难的。

在某些情况下,这是因为很难确定应该度量什么。例如,在执行转录任务时,我们是应该度量系统转录整个序列的准确率,还是应该用一个更细粒度的指标,对序列中正确的部分元素以正面评价?在执行回归任务时,我们应该更多地惩罚频繁犯一些中等错误的系统,还是较少犯错但是犯很大错误的系统?这些设计的选择取决于应用还有一些情况,我们知道应该度量哪些数值,但是度量它们不太现实。这种情况经常出现在密度估计中。很多最好的概率模型只能隐式地表示概率分布。在许多这类模型中,计算空间中特定点的概率是不可行的。在这些情况下,我们必须设计一个仍然对应于设计对象的替代标准,或者设计一个理想标准的良好近似。

本文只是做简单的介绍,后续的文章会对性能度量 P P P进行详尽的叙述。

经验 E E E

根据学习过程中的不同经验,机器学习算法可以大致分类为无监督算法监督算法。大部分学习算法可以被理解为在整个数据集上获取经验。数据集是指很多样本组成的集合。有时我们也将样本称为数据点。

无监督学习算法训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。在深度学习中,我们通常要学习生成数据集的整个概率分布,显式地,比如密度估计,或是隐式地,比如合成或去噪还有一些其他类型的无监督学习任务,例如聚类,将数据集分成相似样本的集合。

监督学习算法训练含有很多特征的数据集,不过数据集中的样本都有一个标签或目标。例如,Iris数据集注明了每个鸢尾花卉样本属于什么品种。监督学习算法通过研究Iris数据集,学习如何根据测量结果将样本划分为三个不同品种。

大致说来,无监督学习涉及到观察随机向量 x x x的好几个样本,试图显式或隐式地学习出概率分布 p ( x ) p(x) p(x),或者是该分布一些有意思的性质;而监督学习包含观察随机向量 x x x及其相关联的值或向量 y y y,然后从 x x x预测y,通常是估计 p ( y ∣ x ) p(y|x) p(yx)。术语监督学习源自这样一个视角,教员或者老师提供目标 y y y给机器学习系统,指导其应该做什么。在无监督学习中,没有教员或者老师,算法必须学会在没有指导的情况下理解数据。

无监督学习和监督学习不是严格定义的术语。它们之间界线通常是模糊的。很多机器学习技术可以用于这两个任务。例如,概率的链式法则表明对于向量 x ∈ R n x\in R^n xRn,联合分布可以分解成:
p ( x ) = ∏ i = 1 n p ( x i ∣ x 1 x 2 ⋯ x i − 1 ) p(x)=\prod_{i=1}^np(x_i|x_1x_2\cdots x_{i-1}) p(x)=i=1np(xix1x2xi1)

该分解意味着我们可以将其拆分成 n n n个监督学习问题,来解决表面上的无监督学习 p ( x ) p(x) p(x)。另外,我们求解监督学习问题 p ( y ∣ x ) p(y|x) p(yx)时,也可以使用传统的无监督学习策略学习联合分布 p ( x , y ) p(x, y) p(x,y),然后推断:
p ( y ∣ x ) = p ( x , y ) ∑ y i p ( x ∣ y i ) p(y|x)=\frac{p(x, y)}{\sum_{y_i}p(x|y_i)} p(yx)=yip(xyi)p(x,y)

尽管无监督学习和监督学习并非完全没有交集的正式概念,它们确实有助于粗略分类我们研究机器学习算法时遇到的问题。传统地,人们将回归、分类或者结构化输出问题称为监督学习。支持其他任务的密度估计通常被称为无监督学习。

学习范式的其他变种也是有可能的。例如,半监督学习中,一些样本有监督目标,但其他样本没有。在多实例学习中,样本的整个集合被标记为含有或者不含有该类的样本,但是集合中单独的样本是没有标记的。有些机器学习算法并不是训练于一个固定的数据集上。例如,强化学习算法会和环境进行交互,所以学习系统和它的训练过程会有反馈回路。

大部分机器学习算法简单地训练于一个数据集上。数据集可以用很多不同方式来表示。在所有的情况下,数据集都是样本的集合,而样本是特征的集合。

表示数据集的常用方法是设计矩阵。设计矩阵的每一行包含个不同的样本。每一列对应不同的特征。例如,Iris数据集包含150个样本,每个样本有4个特征。这意味着我们可以将该数据集表示为设计矩阵 x ∈ R 150 × 4 x\in R^{150\times4} xR150×4。我们描述的大部分学习算法都是讲述它们是如何运行在设计矩阵数据集上的。

当然,每一个样本都能表示成向量,并且这些向量的维度相同,才能将一个数据集表示成设计矩阵。这一点并非永远可能。例如,你有不同宽度和高度的照片的集合,那么不同的照片将会包含不同数量的像素。因此不是所有的照片都可以表示成相同长度的向量。

在上述这类情况下,我们不会将数据集表示成 m m m行的矩阵,而是表示成 m m m个元素的结合: { x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) } \{x^{(1)}, x^{(2)}, \cdots, x^{(m)}\} { x(1),x(2),,x(m)}。这种表示方式意味着样本向量 x ( i ) x^{(i)} x(i),和 x ( j ) x^{(j)} x(j)可以有不同的大小在监督学习中,样本包含一个标签或目标和一组特征。例如,我们希望使用学习算法从照片中识别对象。我们需要明确哪些对象会出现在每张照片中。我们或许会用数字编码表示,如0表示人、1表示车、2表示猫等等。通常在处理包含观测特征的设计矩阵 x x x的数据集时,我们也会提供一个标签向量 y y y,其中 y i y_i yi表示样本 i i i的标签。

当然,有时标签可能不止一个数。例如,如果我们想要训练语音模型转录整个句子,那么每个句子样本的标签是一个单词序列。正如监督学习和无监督学习没有正式的定义,数据集或者经验也没有严格的区分。这里介绍的结构涵盖了大多数情况,但始终有可能为新的应用设计出新的结构。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hy592070616/article/details/120625146

智能推荐

IE中Option的disabled无效 Select只读模式-程序员宅基地

文章浏览阅读336次。给IE下的option项添加disabled的禁用功能[code="java"]window.onload = function() { if (document.getElementsByTagName){ var s = document.getElementsByTagName("select"); if (s.length > 0){..._option的disabled无效

mysql8 Navicat连接mysql8.0以上版本,报1045-Access denied for user ‘ ‘@‘ ‘ (using password: YES)_navicat9怎么连接高版本mysql8-程序员宅基地

文章浏览阅读660次。【代码】mysql8 Navicat连接mysql8.0以上版本,报1045-Access denied for user ‘ ‘@‘ ‘ (using password: YES)_navicat9怎么连接高版本mysql8

python属于前端开发吗_我想学习编程,但不知道从哪里开始-程序员宅基地

文章浏览阅读182次。我应该在哪里学习编程?软件开发是具有挑战性和利润丰厚的职业选择。我们在日常的生活中一切都由智能程序的驱动。如果你想学习编程但不知道从哪里开始,那么你来对地方了。我已编写了分步指南,可帮助你开始进行软件开发,并消除你的担忧。如何选择编程语言?如你所知,当今有许多流行的编程语言。容易被诱惑并尝试一次学习所有内容。但是,这只会导致入门到放弃。我建议你选择一种语言(当然,仅在第一步中,你以后应该以获取多种..._python都是前端吗

二叉树的前序遍历建立、中序,后序递归算法遍历,前序非递归遍历(栈辅助)_二叉树的创建与前、中、后序非递归遍历算法-程序员宅基地

文章浏览阅读399次。二叉树的各种操作算法上的难度远小于理解上的难度,只要将递归这个关键思想理解透彻了,那么一般的二叉树问题基本都可以得到顺利解决。二叉树节点模板类文件——BinTreeNode.h这里定义了二叉树的节点类,用于存储放入二叉树的的数据和左右孩子指针。这里只是使用的普通二叉树形式,并且使用链式二叉树。三叉表示以及线索二叉树此文没有提及。并且需要注意的是,模板类的声明与实现不可分割,必须在同一文件中,..._二叉树的创建与前、中、后序非递归遍历算法

问题一:使用foreach遍历字符串-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏2次。日常for(类型 变量名:集合) { 语句块; } for (char a:"asdhfhhf") { }编译出错正确如下public class text { public static void main(String[] args) {​ for (char chs : "asjdfiv".toCharArray()) { System.out.println(chs); }​ }_foreach遍历字符串

"Serializedobject target has been destroyed. UnityEngine.GUIUtility:ProcessEvent(Int32,IntPtr)"-程序员宅基地

文章浏览阅读1.3w次。void Start () { SceneManager.SetActiveScene(SceneManager.GetSceneAt(1)); SceneManager.activeSceneChanged += SceneManager_activeSceneChanged; } private void SceneManag..._serializedobject target has been destroyed.

随便推点

【后缀数组+RMQ】 SPOJ 687_后缀数组 rmq-程序员宅基地

文章浏览阅读304次。后缀数组_后缀数组 rmq

建设银行软件测试面试,【中国建设银行云南省分行软件测试面试】面试分两轮-看准网...-程序员宅基地

文章浏览阅读300次。竞争还是蛮大的,商业银行好像至少五比一的面录比。笔试是裸考的,后面想着竟然笔试裸考通过了就好好准备面试吧,为此还报了个某图的面试培训班,三天收了3500块钱。先说说培训班的作用吧,说没用好像有点用,说有用好像又不太有用。因为培训时间很短只有三天,能教给你的更多的只是形式上的,要想从思想内容上有所提升很难。而且她教的东西有的也不是那么好用。比如说,如果被问到你觉得谁表现最好,培训班教的是让说自己,当..._中国建设银行软件测试

mimo 信道矩阵 matlab,请教几个关于MIMO信道模型仿真的问题-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏10次。信道的相关函数和信道矩阵的协方差的关系是怎么样呢?另外如果把信道看成是一个带限随机过程,如何根据求出的相关函数来模拟信道?相关函数是tau的函数,而如果用matlab仿真信道的话只能取离散的点,这时tau和dt的关系又是如何呢?根据东南大学的书《通信与信息工程中的随机过程》中第8章中介绍的给定协相关矩阵的随机向量的生成的计算机模拟的方法,是将协相关矩阵做cholesky因式分解,对于一个2x2模型..._ist-imetra

甲流高发期,喝羊奶增强免疫力,安全度过冬季寒流!-程序员宅基地

文章浏览阅读410次,点赞13次,收藏6次。羊奶中富含各种矿物质和维生素,如钙、磷、锌、维生素D等,可以提高人体的免疫系统功能,增强对病原体的抵抗力。此外,羊奶还含有人体所需的脂肪和碳水化合物,能够为身体提供能量,使我们拥有更好的体力和抵抗病毒的能力。本文将详细介绍甲流高发期的原因,羊奶对免疫力的功效,并提供一些具体的喝牛奶方法,帮助大家度过一个健康安全的冬季。羊奶制品的制作工艺可以保留羊奶的大部分营养,也是增强免疫力的良好选择。除了喝羊奶,我们还可以结合其他增强免疫力的方法,例如多吃富含维生素C的水果和蔬菜,多进行体育锻炼,保持良好的作息时间等。

GitHub忘记用户名和密码如何找回_githu账户忘记了-程序员宅基地

文章浏览阅读2.6w次,点赞3次,收藏14次。GitHub忘记用户名和密码如何找回最近太久没有登录自己的GitHub了,连当时的用户名和密码都忘记,查找一些资料自己总结一下如何找回用户名和密码第一步,先百度github,进入官网第二步,进入官网忘记用户名和密码,qq邮箱不会忘记吧,直接输入qq邮箱,点击forgot password第三步,进来这个页面输入qq邮箱,点击send password reset email第四步,我qq邮箱收到GitHub发来的邮件,接下来直接点击重新修改密码第五步,设置好新的密码,点击change p_githu账户忘记了

Qt学习:界面布局_qtl界面-程序员宅基地

文章浏览阅读506次。1.绝对位置定位(absolute positioning):控件布局是固定位置,没有自适应功能。例子如下:QWidget *pWidget = new QWidget;QLabel label(pWidget);label.setText(QObject::tr("姓名:"));label.setGeometry(10,10,20,20);QLineEdit namedLineEdi..._qtl界面

推荐文章

热门文章

相关标签