机器学习:基本术语

机器学习里那些「行话」到底指什么?

本教程用尽量直白的方式,把机器学习中最基础的一批术语(数据集、样本、属性、训练、标记、分类回归、聚类、泛化......)讲清楚,不需要任何前置资料。读完你再看任何机器学习的资料都不会被名词卡住。


目录

  • 一、先有数据:从一堆西瓜记录说起
  • 二、描述一个东西:属性、特征与特征向量
  • 三、用数学写下来:数据集的符号表示
  • 四、学和练:训练、模型与学习器
  • 五、给样本贴结果:标记与样例
  • 六、两大任务:分类与回归
  • 七、考一考:测试样本
  • 八、不打标签也能学:聚类
  • 九、有没有老师:监督学习与无监督学习
  • 十、最重要的能力:泛化
  • 十一、一句话总结
  • 十二、一个小演示:构造数据集并划分训练/测试

一、先有数据:从一堆西瓜记录说起

要进行机器学习,先得有数据。假定我们收集了一批关于西瓜的数据,例如:

  • (色泽=青绿;根蒂=蜷缩;敲声=浊响)
  • (色泽=乌黑;根蒂=稍蜷;敲声=沉闷)
  • (色泽=浅白;根蒂=硬挺;敲声=清脆)
  • ......

每一对括号里是一条「记录」,「=」意思是「取值为」。

这组记录的集合,就称为一个数据集(data set)。其中:

  • 每一条记录,是对一个事件或对象(这里是一个西瓜)的描述,称为一个示例(instance)样本(sample)
  • 描述这个对象「在某方面表现或性质」的事项,例如「色泽」「根蒂」「敲声」,称为属性(attribute)特征(feature)
  • 属性上的具体取值,例如「青绿」「乌黑」,称为属性值(attribute value)

小提醒:「样本」这个词有时也指「整个数据集」(因为整个数据集可以看作对样本空间的一次采样)。结合上下文,你通常能判断它指的是「单个示例」还是「整批数据」。


二、描述一个东西:属性、特征与特征向量

把刚才的「色泽、根蒂、敲声」三个属性,分别当作三维空间里的三根坐标轴,它们就张成了一个用来描述西瓜的三维空间。每个西瓜都能在这个空间里找到自己的一个坐标位置。

例如「青绿、蜷缩、浊响」这个瓜,就对应空间里点 (青绿,蜷缩,浊响)(青绿, 蜷缩, 浊响) (青绿,蜷缩,浊响)。

由于空间里的每个点都对应一个坐标向量,所以我们也把一个示例称为一个特征向量(feature vector)

  • 属性张成的空间,叫做属性空间(attribute space)样本空间(sample space)输入空间
  • 一个示例,就是输入空间里的一个点(一个特征向量)。

注意:上面单个的「特征 」指的是一个属性(比如「色泽」这一维);而「特征向量 」是指一个样本的所有特征拼到一起形成的整条向量。两者不要混为一谈。另外,像「青绿 / 蜷缩 / 浊响」这种类别型特征本身是文字,不能直接当数值坐标参与计算;真实建模时,通常要先把这些文字编码成数字(例如独热编码 one-hot),才能放进上面的空间。


三、用数学写下来:数据集的符号表示

为了后面方便推导,我们用一套标准记号把数据集写出来。

一般地,令

D={x1,x2,...,xm} D = \{ \boldsymbol{x}_1, \boldsymbol{x}_2, \dots, \boldsymbol{x}_m \} D={x1,x2,...,xm}

表示包含 mm m 个示例的数据集。如果每个示例由 dd d 个属性描述(比如西瓜用了 3 个属性),那么每个示例都是一个 dd d 维向量:

xi=( xi1 ;  xi2 ; ... ;  xid ) \boldsymbol{x}i = (x{i1};\, x_{i2};\, \dots;\, x_{id}) xi=(xi1;xi2;...;xid)

其中:

  • xi∈X \boldsymbol{x}_i \in \mathcal{X} xi∈X, X\mathcal{X} X 是样本空间(输入空间);
  • xij x_{ij} xij 表示示例 xi \boldsymbol{x}_i xi 在第 jj j 个属性上的取值(例如某个西瓜在第 2 个属性「根蒂」上的值是「硬挺」);
  • dd d 称为示例的维数(dimensionality),也就是「用了几个特征来描述一个东西」。

直觉上: X\mathcal{X} X 是所有可能的「特征组合」构成的大空间,而我们的数据集 DD D 只是从这个大空间里采出来的一小批点


四、学和练:训练、模型与学习器

从数据里学出模型 的过程,叫做学习(learning)训练(training),这个过程靠执行某个学习算法来完成。

  • 训练过程中使用的数据,叫训练数据(training data)
  • 其中的每个样本,叫训练样本(training sample),也可叫「训练示例」或「训练例」;
  • 训练样本组成的集合,叫训练集(training set)

学出来的模型,对应了关于数据某种潜在的规律 ,因此也称假设(hypothesis) ;而这种潜在规律本身,则称为真相 / 真实(ground-truth)。学习的目的,就是找出或逼近真相。

另外,我们有时把学出来的模型叫做学习器(learner)------可以把它理解为:学习算法在「给定数据 + 给定参数空间」上跑出来的一个具体实例。

补充:学习算法通常带有一些需要设置的参数,用不同的参数值、和/或不同的训练数据,会得到不同的学习结果。


五、给样本贴结果:标记与样例

如果我们想学一个能判断「没剖开的瓜是不是好瓜」的模型,光有前面的特征描述还不够------还得知道每个瓜到底是好是坏

所以我们需要给训练样本补上「结果」信息,例如:

((色泽=青绿;根蒂=蜷缩;敲声=浊响),好瓜

这里关于示例「结果」的信息(例如「好瓜」),称为标记(label) ;拥有了标记信息的示例,则称为样例(example)

一般地,用

(xi,yi) (\boldsymbol{x}_i, y_i) (xi,yi)

表示第 ii i 个样例,其中:

  • yi∈Y y_i \in \mathcal{Y} yi∈Y 是示例 xi \boldsymbol{x}_i xi 的标记;
  • Y\mathcal{Y} Y 是所有标记的集合,叫做标记空间(label space)输出空间

小提醒:把「label」译成「标记」而非「标签」,是因为英文里 label 既可用作名词、也可用作动词(「打标记」)。


六、两大任务:分类与回归

拿到标记之后,根据「我们要预测的东西是什么类型」,学习任务可以分成两大类:

  • 分类(classification) :预测的是离散值 。例如预测「好瓜 / 坏瓜」。
    • 只涉及两个类别的,叫二分类(binary classification) ,通常把其中一个叫正类(positive class) ,另一个叫反类(negative class)
    • 涉及多个类别的,叫多分类(multi-class classification)
  • 回归(regression) :预测的是连续值。例如预测西瓜的成熟度 0.95、0.37。

一般地,预测任务的期望是:通过对训练集

{(x1,y1),(x2,y2),...,(xm,ym)} \{(\boldsymbol{x}_1, y_1), (\boldsymbol{x}_2, y_2), \dots, (\boldsymbol{x}_m, y_m)\} {(x1,y1),(x2,y2),...,(xm,ym)}

进行学习,建立一个从输入空间到输出空间的映射

f:X↦Yf: \mathcal{X} \mapsto \mathcal{Y} f:X↦Y

不同任务下输出空间 Y\mathcal{Y} Y 长这样:

  • 二分类:通常 Y={−1,+1}\mathcal{Y} = \{-1, +1\} Y={−1,+1} 或 {0,1}\{0, 1\} {0,1};
  • 多分类: ∣Y∣>2|\mathcal{Y}| > 2 ∣Y∣>2;
  • 回归: Y=R\mathcal{Y} = \mathbb{R} Y=R(实数集)。

七、考一考:测试样本

模型学出来之后,当然要拿来 。使用模型进行预测的过程,叫做测试(testing) ;被拿去预测的样本,叫做测试样本(testing sample)(也叫「测试示例」或「测试例」)。

例如,学出了映射 ff f 之后,对某个测试例 x\boldsymbol{x} x,我们就能得到它的预测标记:

y=f(x)y = f(\boldsymbol{x}) y=f(x)

一句话记忆:训练集用来「学」,测试样本用来「考」


八、不打标签也能学:聚类

除了「预测某个具体结果」,我们还可以对数据做另一种处理------聚类(clustering) :把训练集里的西瓜分成若干组,每组叫一个簇(cluster)

这些自动形成的簇,可能对应一些潜在的概念划分,例如「浅色瓜 / 深色瓜」,甚至「本地瓜 / 外地瓜」。

  • 这种学习能帮我们摸清数据内在的规律,为进一步分析打基础;
  • 关键是:在聚类时,我们事先并不知道 「浅色瓜」「本地瓜」这些概念,而且训练样本通常没有标记信息

九、有没有老师:监督学习与无监督学习

根据训练数据有没有标记信息,学习任务可大致划分为两大类:

  • 监督学习(supervised learning) :训练数据带标记。分类和回归是它的代表。(也叫「有导师学习」。)
  • 无监督学习(unsupervised learning) :训练数据不带标记。聚类是它的代表。(也叫「无导师学习」。)

记忆窍门:有标记 = 有老师教 = 监督学习;没标记 = 自己摸索 = 无监督学习。


十、最重要的能力:泛化

这是整个机器学习里最关键的一个词------泛化(generalization)

机器学习的目标,是让学出的模型能很好地适用于「新样本」,而不是仅仅在训练样本上表现好。哪怕对聚类这种无监督任务,我们也希望学出的簇划分能适用于训练集里没出现过的样本。

这种「学得的模型适用于新样本的能力」,就叫泛化能力。泛化能力强的模型,能很好地适用于整个样本空间。

这里藏着一个重要的前提假设:

通常我们假设,样本空间里全体样本服从一个未知的「分布」(distribution) ;我们获得的每个样本,都是独立地 从这个分布上采样得到的。这叫做独立同分布(independent and identically distributed,简称 i.i.d.)

为什么这个假设重要?

  • 训练集通常只是样本空间里很小的一次采样
  • 我们当然希望这小批采样能反映整个样本空间的特性,否则很难指望学出的模型在全局都好用;
  • 一般而言,训练样本越多,我们关于这个分布的信息就越多,也就越有可能学到泛化能力强的模型。

十一、一句话总结

机器学习的「行话」看似多,其实围绕一条主线:用一批带(或不带)标记的样本,从数据空间里学出一个映射;评判它好坏的终极标准不是训练时多准,而是面对没见过的新样本时,泛化能力够不够强。


十二、一个小演示:构造数据集并划分训练/测试

下面这段 Python 代码,把前面「西瓜」的例子落成可运行的数据结构,并演示了监督学习(带标记)与无监督学习(不带标记)两种视角 ,以及最基础的训练集 / 测试集划分

python 复制代码
"""
演示:构造西瓜数据集,并展示
  1) 监督学习视角(带标记 -> 分类任务)
  2) 无监督学习视角(去标记 -> 聚类任务)
  3) 训练集 / 测试集划分
"""

import random

# 每个样本: [色泽, 根蒂, 敲声, 标记]
# 标记 1=好瓜, 0=坏瓜(监督学习视角才用)
dataset = [
    ["青绿", "蜷缩", "浊响", 1],
    ["乌黑", "蜷缩", "浊响", 1],
    ["青绿", "硬挺", "清脆", 0],
    ["乌黑", "稍蜷", "沉闷", 0],
    ["浅白", "蜷缩", "浊响", 1],
    ["青绿", "稍蜷", "浊响", 1],
    ["乌黑", "硬挺", "清脆", 0],
    ["浅白", "硬挺", "沉闷", 0],
]


def split_train_test(data, test_ratio=0.25, seed=42):
    """按比例随机划分训练集和测试集(保持可复现,设随机种子)"""
    random.seed(seed)
    idx = list(range(len(data)))
    random.shuffle(idx)
    n_test = int(len(data) * test_ratio)
    test_idx = idx[:n_test]
    train_idx = idx[n_test:]
    train = [data[i] for i in train_idx]
    test = [data[i] for i in test_idx]
    return train, test


def to_supervised(data):
    """监督学习视角:特征 X + 标记 y"""
    X = [row[:3] for row in data]
    y = [row[3] for row in data]
    return X, y


def to_unsupervised(data):
    """无监督学习视角:只保留特征,丢掉标记"""
    return [row[:3] for row in data]


if __name__ == "__main__":
    train, test = split_train_test(dataset)
    print("训练集样本数:", len(train), " 测试集样本数:", len(test))

    X_train, y_train = to_supervised(train)
    print("\n[监督学习视角] 训练集特征 X_train:")
    for x, yy in zip(X_train, y_train):
        print("  特征", x, "-> 标记(好瓜?)", yy)

    X_unsup = to_unsupervised(train)
    print("\n[无监督学习视角] 只看特征,没有标记(适合做聚类):")
    for x in X_unsup:
        print("  特征", x)

把代码保存为 terms_demo.py,用 python terms_demo.py 运行,输出如下:

less 复制代码
训练集样本数: 6  测试集样本数: 2

[监督学习视角] 训练集特征 X_train:
  特征 ['乌黑', '硬挺', '清脆'] -> 标记(好瓜?) 0
  特征 ['浅白', '硬挺', '沉闷'] -> 标记(好瓜?) 0
  特征 ['青绿', '硬挺', '清脆'] -> 标记(好瓜?) 0
  特征 ['青绿', '稍蜷', '浊响'] -> 标记(好瓜?) 1
  特征 ['青绿', '蜷缩', '浊响'] -> 标记(好瓜?) 1
  特征 ['乌黑', '蜷缩', '浊响'] -> 标记(好瓜?) 1

[无监督学习视角] 只看特征,没有标记(适合做聚类):
  特征 ['乌黑', '硬挺', '清脆']
  特征 ['浅白', '硬挺', '沉闷']
  特征 ['青绿', '硬挺', '清脆']
  特征 ['青绿', '稍蜷', '浊响']
  特征 ['青绿', '蜷缩', '浊响']
  特征 ['乌黑', '蜷缩', '浊响']

这段代码直观展示了:同样一批西瓜数据,加上标记就是「分类」用的监督学习数据,去掉标记就是「聚类」用的无监督学习数据;而划出来的「测试集」正是用来检验模型泛化能力的那批新样本。

相关推荐
wahahaman4 小时前
基于GBDT的次日降水量预测实验
人工智能·python·机器学习·数据分析
学究天人5 小时前
数学公理体系大全:第一章 命题逻辑:真值之舞
人工智能·算法·机器学习·数学建模·动态规划·图论·抽象代数
齐昭王城6 小时前
PI0、PI0.5、PI0-FAST 原理讲解
人工智能·机器学习
workflower8 小时前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
秉烛夜读8 小时前
机器学习:简介
机器学习
voidmort8 小时前
3. 理解 RoPE
人工智能·深度学习·机器学习·transformer
2301_800256118 小时前
人工智能入门学习——传统机器学习算法VS深度学习方法
人工智能·机器学习
2zcode8 小时前
基于MATLAB语音信号分析与机器学习的帕金森病智能检测系统
人工智能·机器学习·matlab
我没胡说八道9 小时前
论文排版自动改格式,一键智能排版,减去百分之九十排版问题,实测工具大比拼
人工智能·深度学习·机器学习·aigc·论文