更新日志

2023-03-26

基本术语概念

2024-04-11

重构文章结构,修复了一些错误


在学习机器学习时,往往遇到许多概念性的术语,比如泛化、正则化、特征向量、groundtruth等等。刚学时候看到这些词大都是一知半解,没有一个系统的认知,因此概念篇主要对这些概念做一些梳理。

一 专业术语(Terminology)

​ 一切需先从数据说起,毕竟模型是身体,数据相当于知识,有了知识的输入才能对外输出。

1. 数据

​ 举个例子,要想判断一个瓜是不是好瓜(你是故意找茬是不是),得从它的色泽、声音、根蒂、含糖量等各个方面来判断,这些判断标准就是特征(Feature)

数据
数据

​ 我们将瓜摊所有的瓜编号统计,制作出一个表格,这就是初始的数据集(Data set),注意我们是假定已经知道这个瓜是好瓜还是坏瓜,这就是标签(Lebel),其实我们在搜集数据时很多时候是没有标签的,需要人为的为它们打上标签。

  1. 单条数据:

    • 不带标签的单个数据称为样本(Sample)
    • 带标签的单个数据称为样例(Example)

    这个其实不是很重要,大概知道说的是啥就行。

  2. 数据集合:

    • 带有标签且用于训练的集合叫做训练集(Training Set)

    • 带有标签的用于验证的集合叫做验证集(Validation Set)

    • 带有标签且用于测试的集合叫测试集(Testing Set)

    训练集就是用来训练模型的数据集,就像是你平时学习的知识和做的习题;

    测试集就是用来测试模型性能的数据集,就像是你的考试,通过测试看你平时掌握了多少知识。

    前两个都是字面意思,至于验证集我们在后面交叉验证法的时候再说明。

  3. 样本空间:

    之前说到各个样本的特征,它是有维度(Dimension)的,取决于你的数据,比如上述表格中就是8维特征,所有样本集合在高维空间的分布就叫样本空间

2. 预测值与真值

  1. 模型的输出我们叫做预测值(Hypothesis or prediction)
  2. 对应输入数据的标签我们叫做真值(Groundtruth)

​ 在数学表达中,我们通常将预测值表示为 yi^\hat{y_i},真值表示为 yi{y_i} 。其实与概率中的预测值表达十分相似。

3. 任务分类

分类
分类

3.1 以预测目标分类

  1. 分类任务(Classification Task):输出离散值
    • 二分类任务
    • 多分类任务
  2. 回归任务(Regression Task):输出连续值
  3. 聚类任务(Clustering Task)

3.2 以标签分类

  1. 监督学习(Supervised Learning)
  2. 无监督学习(Unsupervised Learning)
  3. 半监督学习(Semi-supervised Learning)

4. 超参数(Hyper-parameter)

​ 超参数调整(Parameter Tuning)不可能全部取到,只能选择一定的范围和步长测试数量有限的超参。

image-20230326205454535
image-20230326205454535

二 误差与拟合

​ 现实中有许多的模型(算法),而且相同的模型在不同的训练条件下也有不同的参数,哪种模型才是最好的呢?

1. 模型选择

Example:

拟合情况
拟合情况

2. 准确率与误差

Ω\Omega 为全部数据,U 未匹配输出,M为匹配数据

  1. 误差(Error)

    E=UΩ100%E=\frac{U}{\Omega}\cdot 100\%

  2. 准确率(Accuracy)

    A=1E=MΩ100%A=1-E=\frac{M}{\Omega}\cdot 100\%

误差类型:

  1. Error 误差

    • Error is the difference between the output of a learner and the ground-truth of samples
  2. Training error/Empirical error 训练/经验误差

    • error on the training set
  3. Testing error 测试误差

    • error on the testing set
  4. Generalization error 泛化误差 Main Consider

    • error on all samples except training set

3. 泛化

完美匹配训练集的模型是一个好的模型吗?显然不是的,模型的最终目标是预测新数据并不是训练集数据,而我们将模型适应新样本的能力叫做泛化能力(Generalization Ability)

所以我们的最终目标是得到一个低泛化误差的模型,主要有两个方面:

  • 在训练时选择一个低泛化误差的模型

  • 训练完成后评估泛化误差

4. 欠拟合与过拟合

过拟合
过拟合

4.1 Overfitting(key problem)

过拟合是无法避免的,只能适度缓解,而且在数据集足够大时,过拟合也未尝不可。

The learner regards the features of the training sample itself as a general property that all potential samples will have.

Feature:

​ 模型在训练集上的表现很好,但在测试集和新数据上的表现很差。

Example:

过拟合1
过拟合1

测试当恰好等于训练集某一样本时,检测成功,否则随机。(啥也没做)如下图:

过拟合2
过拟合2

4.1.1 解决方案

  1. 数据集相关

    • 增大训练数据集数据量

    • Data Augmentation:对训练集进行数据增强(如拉伸,反转)

      ​ 这一步其实也在增大数据集数据量。使用数据增强可以生成多幅相似图像。这可以帮助我们增加数据集规模从而减少过拟合。因为随着数据量的增加,模型无法过拟合所有样本,因此自然减少过拟合的概率。

      计算机视觉领域:翻转、平移、旋转、缩放、改变亮度、添加噪声等等;

      音频数据增强方法:增加噪音、增加混响、时移、改变音调和时间拉伸等等。

    数据增强
    数据增强
  2. 模型相关

    约束模型
    约束模型
    • 降低模型复杂度

    • 正则化(Regularization)

      在损失函数后面加一个正则化项,常见的有L1正则化L2正则化,类比向量的1-Norm和2-Norm。

      类似的概念还有:

      1. Zero-center:中心化处理,减去均值,方差不做要求;

      2. Standardization:标准化处理,减去均值除于方差,也就是将数据变为均值为0方差为1的正态分布(注意,这里指的是数据的分布,数值不一定在0-1区间,区分下面);

      3. Normalization:归一化处理,把数据大小限定在特定的范围,比如一般都是[0,1]或[-1,1];

    • Dropout

      以概率p随机失活某层多个感知机:

      Dropout
      Dropout
  3. 训练相关

    • 早停法(Early Stoping)
    早停法
    早停法

4.2 Underfitting

​ 模型还没有学习到训练样本的一般性质,这也是模型需要不断优化的原因之一。

三 数据集划分和模型评估

1. 数据集划分

Goal:Low generalization error.

一 般用测试集来测试模型辨别新样本的能力,即泛化能力。那么应该如何用测试集测试泛化能力呢?

Basic Idea

  • 测试集样本不应该出现在训练集中。

  • 如何将数据集划分为训练集与测试集。

主要有三种分类方法。

1.1 留出法(Hand-Out)

该方法应尽可能保持数据的组成分布相同。

​ 留出法即将数据集专门留出一部分用作测试

留出法
留出法

缺点

  • 数据集划分导致训练集数据减少。

通常取23\frac{2}{3} ~ 45\frac{4}{5} 用于训练

1.2 交叉验证法(Cross-Validation)

​ 交叉验证是无差的,网上交叉验证法的测试集其实其实是就是验证集(Validation Set),因为测试集不能作为训练,而验证集经常与训练集一起在训练时调整超参数,因此交叉验证中用到的测试数据只能来自验证集。这里国内的翻译很混乱,第一次接触的时候也是一头雾水。可以参考这节最后的示例图,黄色的就是验证集,橙色的(True Test Set)即是真正的测试集。

先考虑一种极端情况,也叫作留一交叉验证(Leave one out Cross validation):

  • 数据集中有n个数据,我们留1个用于测试,其他用来训练。依次取数据集中每个数据作为测试数据

    留一交叉验证
    留一交叉验证

​ LOOCV的方法就是每次取出一个数据作为验证集的唯一元素,而其他n-1个数据都作为训练集用于训练模型和调参。最终训练了n个带参模型(这里我们是使用了同一种模型架构,因为训练了n次,故其实得到了n个带参模型),每次都能得到一个MSEiMSE_i(均方误差)。而计算最终测试MSE则就是将这n个MSEiMSE_i取平均,即:

MSE=1ni=1nMSEiMSE=\frac{1}{n}\sum_{i=1}^{n} {MSE_i}

​ 其缺点十分明显:计算量太大。我们在此之上做出改进,提出一种折中的方法——k次N折交叉验证(k-times N-fold Cross Validation)

步骤

  1. 将数据集划分为N份,而不必以单个样本为最小元。
  2. 不重复地每次取其中一份做验证集,用其他N-1份做训练集训练模型,之后计算该模型在测试集上的总均方误差

MSE=1Ni=1NMSEiMSE=\frac{1}{N}\sum_{i=1}^{N} {MSE_i}

交叉验证
交叉验证

那如何选择一个低泛化误差选定模型呢?举个例子:

示例
示例

这里我们是使用了3种模型,横向比较选择MSE最小的一个。

1.3 自助(采样)法(Bootstrapping)

统计学中,自助法(Bootstrap Method,Bootstrapping)是一种从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。自助法由Bradley Efron于1979年在《Annals of Statistics》上发表。当样本来自能以正态分布来描述的总体,其抽样分布为正态分布;但当样本来自的总体无法以正态分布来描述,则以渐进分析法、自助法等来分析。采用随机可排列抽样(random sampling with replacement)。对于小数据集,自助法效果很好。

​ 我们希望评估的是用原始数据集D训练出的模型,但是留出法和交叉验证法训练的数据集比原始的数据集D小,这必然会引入因训练数据集不同导致的估计偏差,留一法受训练样本规模变化的影响较小,但是计算复杂度太高。

自助法是有放回抽样,给定包含m个样本的数据集 DD,我们对它进行采样产生数据集 DD'

  1. 每次随机从 DD 中挑选一个样本,将该样本拷贝放入 DD'
  2. 然后再将该样本放回初始数据集 DD 中,下次抽样时仍有可能被采到
  3. 重复执行m次该过程,我们就得到了包含m个样本数据集 DD'

​ 初始数据集D中有一部分样本会在数据集 DD' 中多次出现,也有一部分样本不会在数据集 DD' 中出现。

所以我们取

  • DD' 为训练集
  • D/DD/D' 为测试集。

若数据集太少,我们进行多次自助采样可在一定程度上扩充训练集

自助采样
自助采样

一个样本a不被选中概率为:

limm(11m)m=e1\lim_{m \to \infty}{(1-\frac{1}{m})^m}=e^{-1}

优点

  • It’s useful when dataset is small and training and test set are hard to construct

缺点

  • The training set DD' has different distribution of DD, which may introduce bias in evaluation.

2. 模型评估

2.1 回归任务

image-20230326205857454
image-20230326205857454

2.2 分类任务

image-20230326210046757
image-20230326210046757

在实际的计算中,我们更多的使用交叉熵。

2.2.1 混淆矩阵

然而仅仅靠误差精确度这两个参数是无法完全评估分类模型的。因此我们提出一种度量方法——混淆矩阵(Confusion Matrix)。先看统计学概念两个

召回率(Recall)和精度(Precise)是广泛用于统计学分类领域的两个度量值,用来评估分类结果的质量。

  • 召回率(Recall Rate,也叫查全率) 是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率;
  • 正确率(Precision Rate,也叫查准率) 是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。
文献检索的测量标准
文献检索的测量标准

二分类问题中混淆矩阵定义如下:

Confusion Matrix
Confusion Matrix

混淆矩阵由 4 个数构成:

  • 真阴(True Negatives,TN):算法预测为负例(N),实际上也是负例(N)的个数,即算法预测对了(True);
  • 真阳(True Positives,TP):算法预测为正例(P),实际上是正例(P)的个数,即算法预测错了(False);
  • 假阴(False Negatives,FN): 算法预测为负例(N),实际上是正例(P)的个数,即算法预测错了(False);
  • 假阳(False Positives,FP):算法预测为正例(P),实际上是负例(N)的个数,即算法预测对了(True)。

怎么记呢?其实很简单,真值为正则为阳,真值为假则为阴。

  • 那么真阳和真阴就是预测值和真实值相等:TP和TN
  • 相反,假阴和假阳就是:FN和FP

写之前思考一下逻辑关系自然就清楚了。

还有一种更加简单的记法:只需记住在从真阳出发的两条线,分子总是A,分母为线上的数值之和。

那么之前提到的正确率召回率

PR=TPTP+FPPR=\frac{TP}{TP+FP} \\

RR=TPTP+FNRR=\frac{TP}{TP+FN}

查准率和查全率是一对矛盾的指标。一般来说,查准率高时,查全率往往偏低;二查全率高时,查准率往往偏低。

精确率(Accuracy)和正确率(Precision)的区别:

Accuracy,不管是哪个类别,只要预测正确,其数量都放在分子上,而分母是全部数据量,说明这个精确率是对全部数据的判断。
而正确率在分类中对应的是某个类别,分子是预测该类别正确的数量,分母是预测为该类别的全部的数量。
或者说,Accuracy是对分类器整体上的精确率的评价,而Precision是分类器预测为某一个类别的精确的评价。

2.2.2 F1 和 F_B

F1F_1FβF_{\beta} 是对正确率和召回率加权调和平均,在F1F_1 中两者权重相等。

2.2.3 P-R曲线和ROC曲线

​ 为了更加直观的表示分类器的性能,我们使用PR curve 和 ROC curve.

PR Curve

PR curve
PR curve

一个好的分类模型应该尽可能的靠近ROC曲线的右上角。

ROC

ROC curve
ROC curve

AUC指的是区域下面积。一个好的分类模型应该尽可能的靠近ROC曲线的左上角。

ROC曲线如何绘制?