机器学习:基本术语

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

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


目录

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

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

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

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

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

这组记录的集合,就称为一个数据集(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

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

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

相关推荐
找方案9 小时前
AI视频生成对决:Sora vs 可灵 vs Veo,谁能定义未来
人工智能·机器学习·音视频
面朝大海,春不暖,花不开16 小时前
Buat New Trenches, Kalian Bisa Baca Panduan Meta Ini
人工智能·机器学习
VL——MOESR17 小时前
【具身智能】Cosmos Policy论文阅读随笔
论文阅读·人工智能·机器学习·具身智能·cosmospolicy
haon112219 小时前
树模型在信贷风控怎么用——从决策树到 XGBoost
大数据·人工智能·算法·决策树·机器学习·数据挖掘
阳明山水19 小时前
从相关到因果:预测科学的因果转向与可识别性挑战
人工智能·深度学习·算法·机器学习·架构
宣宣猪的小花园.19 小时前
【嵌入式】故障与降级:看门狗、保护机制和工程可靠性的底线
开发语言·人工智能·嵌入式硬件·机器学习
pjj1985419 小时前
深度学习-训练,评估与数据增强
人工智能·深度学习·机器学习
满怀冰雪19 小时前
25-迁移学习入门:加载预训练模型并微调
人工智能·python·机器学习·迁移学习·paddle
派大_星20 小时前
PyTorch CNN图片分类与数据增强实践
人工智能·深度学习·机器学习
2601_9622974821 小时前
基于LangChain+LLM大模型+机器学习的恶意域名(流量)智能检测系统
机器学习·langchain·llm·恶意域名·流量检测