2、机器学习三要素之数据、模型、算法

article/2025/9/10 11:03:05

注:  本系列 课程源于李烨 · (微软高级软件工程师)老师的文档   在gitbook 上可以买到李老师课程。

机器学习三要素包括数据、模型、算法。简单来说,这三要素之间的关系,可以用下面这幅图来表示:

总结成一句话:算法通过在数据上进行运算产生模型

下面我们先分别来看三个要素。

 

数据




关于数据,其实我们之前已经给出了例子。


 

源数据

上一篇中,图1老鼠和其他动物和图2小马宝莉六女主就是现实中的两份样本集合。如果我们要训练“老鼠分类器”,或者做“小马种族聚类” 分析的话,它们就是原始数据(Raw Data)。


不过,我们之前也说了,计算机能够处理的是数值,而不是图片或者文字。


向量空间模型和无标注数据
那么,我们就需要构建一个向量空间模型(Vector Space Model/VSM)。VSM 负责将一个个各种格式(文字、图片、音频、视频)转化为一个个向量。


然后开发者把这些转换成的向量输入给机器学习程序,数据才能够得到处理。


比如图2小马宝莉中的6为女主角,我们要给她们做聚类,而且已经知道了,要用她们的两个特征来做聚类,这两个特征就是:独角和翅膀。

 

 

那么我们就可以定义一个二维的向量 A=[a_1,a_2]a_1 表示是否有独角,有则 a_1 = 1, 否则 a_1 = 0。而 a_2表示有否翅膀。

 

 

那么按照这个定义,我们的6匹小马最终就会被转化为下面6个向量:

    X_1 = [1,0]X_2 = [0,0]X_3 = [0,0]X_4 = [0,1]X_5 = [0,1]X_6 = [1,0]

这样,计算机就可以对数据 X_1,……,X_6 进行处理了。这6个向量也就叫做这份数据的特征向量(Feature Vector)

这是无标注数据

有标注数据

和无标注对应的是有标注。

数据标注简单而言就是给训练样本打标签。这个标签是依据我们的具体需要给样本打上的。

比如,我们要给一系列图标做标注,所有图片分为两类:“猫”或者“不是猫”。那么就可以标注成下图这样:

我们把样本的标签用变量 y 表示,一般情况下,y 都是一个离散的标量值。


标注数据当然也要提取出特征向量 X。每一个标注样本既有无标注样本拥有的 X,同时还比无标注样本多了一个 y。例如:


我们用三维特征向量 X 表示老鼠分类器的源数据,每一维分别对应“耳朵是圆的”,“有细长尾巴”,“是尖鼻子”。同时用一个整型值 y 来表示是否老鼠,是的话 y=1,否则 y=0。


那么图1老鼠和其他动物对应的数据就是这样的:

    X_1 = [1,1,1]; y = 1X_2 = [1,1,1]; y = 1X_3 = [1,1,1]; y = 1X_4 = [1,1,1]; y = 1X_5 = [1,1,1]; y = 1X_6 = [0,1,1]; y = 0X_7 = [0,0,0]; y = 0X_8 = [0,1,0]; y = 0X_9 = [0,0,1]; y = 0

在数据转换到 VSM 之后,机器学习程序要做的就是把它交给算法,通过运算获得模型。


大家已经看到了,我们之所以能把具体的一些列童话人物转化为2维或者3维的向量,是因为我们已经确定了对某些人物用哪些特征。


这里其实有两步:


确定用哪些特征来表示数据;
确定用什么方式表达这些特征。
这两步做的事情就叫做特征工程。有了特征工程,才有下一步的 VSM 转换。

 

在机器学习中,特征工程是非常重要的。以后的章节中,我们会单独讲。

 

模型

模型是什么

 

模型是机器学习的结果,这个学习过程,称为训练(Train)。

一个已经训练好的模型,可以被理解成一个函数: y=f(x)。

我们把数据(对应其中的 x)输入进去,得到输出结果(对应其中的 y)。

这个输出结果可能是一个数值(回归),也可能是一个标签(分类),它会告诉我们一些事情。

比如,我们用老鼠和非老鼠数据训练出了老鼠分类器。这个分类器就是分类模型,它其实是一个函数(具体是什么函数和我们选用的模型类型有关,我们下面再说)。

当这个分类函数被确定了以后,又有一个新数据出现了,比如它:

                                                                      

 

这时候,预测程序(将训练好的模型应用到数据上的过程叫预测) 先将喜羊羊转化到 VSM,变成 X = [0,0,0],然后将它输入给模型,得到结果 y’= f(X)。

如果 y’=0,则说明我们的分类模型对喜羊羊的判断是:不是老鼠。若y’= 1,则老鼠分类器把喜羊羊也当成了老鼠。

当然我们都喜欢把喜羊羊分成“不是老鼠”的分类器,而不是相反。这里涉及到模型性能(Performance)的衡量问题,我们后面会单独讲。

我们先来看看——

模型是怎么得到的?

 

模型是基于数据,经由训练得到的。

训练又是怎么回事?

模型是函数:y=f(x),x 是其中的自变量,y 是因变量。

从 x 计算出 y 要看 f(x) 的具体形式是什么,其有哪些参数,这些参数的值都是什么。

在开始训练的时候,我们有一些样本数据。如果是标注数据,这些样本本身即有自变量 x(特征)也有因变量 y(预期结果)。否则就只有自变量 x。

对应于 y=f(x) 中的 x 和 y 取值实例。

这个时候,因为已经选定了模型类型,我们已经知道了 f(x) 的形制,比如是一个线性模型 y=f(x)=ax^2+bx+c,但却不知道里面的参数 a、b、c 的值。

训练就是:根据已经被指定的 f(x) 的具体形式——模型类型,结合训练数据,计算出其中各个参数的具体取值的过程。

训练过程需要依据某种章法进行运算。这个章法,就是算法。

算法

                      

 

有监督和无监督学习的算法差别甚大。因为我们在日常中主要应用的还是有监督学习模型,所以就先以此为重点,进行讲解。

有监督学习的目标就是:让训练数据的所有 x 经过 f(x) 计算后,获得的 y’ 与它们原本对应的 y 的差别尽量小。

我们需要用一个函数来描述 y’ 与 y 之间的差别,这个函数叫做损失函数(Loss Function)L(y, y’)= L(y, f(x))。

Loss 函数针对一个训练数据,对于所有的训练数据,我们用代价函数(Cost Function)来描述整体的损失。

代价函数一般写作:J(theta)——注意,代价函数的自变量不再是 y 和 f(x),而是变成了 theta,theta 表示 f(x) 中所有待定的参数(theta 也可以是一个向量,每个维度表示一个具体的参数)!

至此,我们终于得到了一个关于我们真正要求取的变量(theta)的函数。而同时,既然 J(theta) 被成为代价函数,顾名思义,它的取值代表了整个模型付出的代价,这个代价自然是越小越好。

因此,我们也就有了学习的目标(也称为目标函数):argmin J(theta)—— 最小化J(theta)。

能够让 J(theta) 达到最小的 theta,就是最好的 theta。当找到最好的 theta 之后,我们把它带入到原 f(x),使得 f(x) 成为一个完整的 x 的函数,也就是最终的模型函数。

怎么能够找到让 J(theta) 最小的 theta 呢?这就需要用到优化算法了。

具体的优化算法有很多,比如:梯度下降法(Gradient Descent),共轭梯度法(Conjugate Gradient),牛顿法和拟牛顿法,模拟退火法(Simulated Annealing) 等等。

其中最常用的是梯度下降法,我们后面章节会专门讲解梯度下降法。

 

一般来说,算法是机器学习和深度学习中最具技术含量的部分。企业中的“算法工程师”,要求最高,待遇也最好。那些动辄年薪百万的职位,一般都会标明:做算法。

这些算法工程师的职责包括:研发新算法;针对现实问题构造目标函数,选取并优化算法求解;将他人研究的最新算法应用到自己的业务问题上。

在这里需要强调一点:要得到高质量的模型,算法很重要,但往往(尤其是在应用经典模型时)更重要的是数据。

有监督学习需要标注数据。因此,在进入训练阶段前必须要经过一个步骤:人工标注。标注的过程繁琐且工作量颇大,却无法避免。

人工标注的过程看似简单,但实际上,标注策略和质量对最终生成模型的质量有直接影响。

往往能够决定有监督模型质量的,不是高深的算法和精密的模型,而是高质量的标注数据。

 


http://chatgpt.dhexx.cn/article/7XXne4Bf.shtml

相关文章

数据库系统的三种数据模型

数据模型: 数据模型(Data Model)是数据特征的抽象。数据(Data)是描述事物的符号记录,模型(Model)是现实世界的抽象。数据模型从抽象层次上描述了系统的静态特征、动态行为和约束条件&#xff0c…

数据模型简介

一张地图、售楼处小区的沙盘、一架精巧的航模飞机都是具体的模型,可以让人联想到真是生活中的事物,模型是对现实世界中某个对象特性的模拟和抽象。 数据模型(data model)也是一种模型,是对现实世界数据特征的抽象。人…

mysql数据模型三要素_数据模型的作用及三要素是什么?

展开全部 数据模型三要素是数据结构、数据操作、数据约束。 1、数据结构 是计算机存储636f707962616964757a686964616f31333431376634、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。。通常情况下,精…

数据库的三种模型

前言 数据模型是数据库系统的核心,本文简要介绍三种主要的数据库模型。 一、格式化模型 格式化模型是层次模型和网状模型的统称 1.层次模型 ① 层次数据模型的概念 层次模型用属性结构来表示各类实体以及实体间的联系 ② 层次模型的数据结构 特点&#xff1a…

关系数据模型的三个组成部分(关系数据模型的三个组成部分)

关系数据模型由什么组成 关系数据模型由含有相同数据类型的若干行组成。每一行有若干个字段。每一个字段各自可以有不同的数据类型。关系模型中的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合,而不象非关系模型中那样是单…

三种数据模型

数据库的类型是根据数据模型来划分的,而任何一个DBMS也是根据数据模型有针对性地设计出来的,这就意味着必须把数据库组织成符合DBMS规定的数据模型。目前成熟地应用在数据库系统中的数据模型有:层次模型、网状模型和关系模型。它们之间的根本…

数据模型组成要素

最近在看工作机会,目前的公司涨薪的机会渺茫,加上通勤过长。看来换份工作势在必行了。言归正传更新最新学习笔记。 一、数据模型的组成要素 精确地描述了系统的静态特性、动态特性和完整性约束条件三部分组成: 数据结构–描述系统的静态特性 刻画数据模型性质的重要方面 …

java stream 遍历map_遍历map的五种方法介绍

日常开发中Map集合遍历是经常使用的,下面介绍几种遍历方法的差异。 (推荐教程:java课程) 1、IteratorentrySet写法【推荐JDK8以下】,Map.Entry是Map接口的内部接口,获取迭代器,然后依次取出每个迭代器里面的Map.EntryI…

Java中如何遍历Map对象

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 欢迎跳转到本文的原文链接:https://honeypps.com/java/java-how-to-traverse-map-object/ 博主有时…

java遍历map(java遍历map的key)

java中map集合怎么遍历 遍历方法代码如下: import java.util.HashMap; import java.util.Map; public class App01 { public static void main(String[] args) { Map map1 new HashMap (); map1.put("A", "ABC"); map1.put("B", &qu…

js遍历map(js遍历map对象)

javascript怎么遍历map var map new HashMap();map.put(a,1);map.put(b,2);遍历:var key map.keySet();for (var i in key){ alert(map.get(key[i]));}注:js 中使用map,要先导入一个HashMap.js文件 没要求,引入这个文…

Java中如何遍历Map对象的4种方法

在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等…

遍历map的四种方法

Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>&#xff0c;Map.Entry 是Map中的一个接口&#xff0c;他的用途是表示一个映射项&#xff08;里面有Key和Value&#xff09;&#xff0c;而Set<Map.Entry<K,V>>表示一个映射项的Set。Map.Entry…

遍历Map的六种方式

遍历Map的六种方式 一.创建Map二.遍历Map方式一&#xff1a;使用entrySet遍历(推荐使用)方式二&#xff1a;使用keySet遍历方式三&#xff1a;使用entrySetIterator遍历方式四&#xff1a;使用keySetIterator遍历方式五&#xff1a;使用keySet、values方法遍历方式六&#xff1…

Map.entry详解

Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Value),而Set<Map.Entry<K,V>>表示一个映射项的Set。Map.Entry里有相应的getKey和getValue方法,即JavaBean,让我们…

遍历map的几种方法

#先往map加入几个数据 Map<Integer,String> mapnew HashMap<>();map.put(1,"美好的周一");map.put(2,"美好的周二");map.put(3,"美好的周三");方法一&#xff1a;普通的foreach循环&#xff0c;使用keySet()方法&#xff0c;遍历key…

The operator ‘SUBTRACT‘ is not supported between objects of type ‘null‘ and ‘java.lang.Integer‘

找了半天发现是判断id值是否为空时&#xff0c;数据类型发生转换问题。关于Integer和int在面试的时候出现的频率很高。而我们所熟知的是Integer是int 的包装类型&#xff0c;int的初始值为0&#xff0c;Integer的初始值为null。 org.springframework.expression.spel.SpelEvalu…

Spark Transformation —— subtract

上手使用 def subtract(other: RDD[T]): RDD[T] def subtract(other: RDD[T], numPartitions: Int): RDD[T] def subtract(other: RDD[T], partitioner: Partitioner)(implicit ord: Ordering[T] null): RDD[T] 该函数类似于intersection&#xff0c;但返回在RDD中出现&…

java 中subtract_Java.math.BigDecimal.subtract()方法实例

全屏 Java.math.BigDecimal.subtract()方法实例 java.math.BigDecimal.subtract(BigDecimal subtrahend)返回一个BigDecimal&#xff0c;其值为 (this - subtrahend), 精度为 max(this.scale(), subtrahend.scale()). 声明 以下是声明java.math.BigDecimal.subtract()方法publi…