ML之概念篇
更新日志
2023-03-26
基本术语概念
2024-04-11
重构文章结构,修复了一些错误
在学习机器学习时,往往遇到许多概念性的术语,比如泛化、正则化、特征向量、groundtruth等等。刚学时候看到这些词大都是一知半解,没有一个系统的认知,因此概念篇主要对这些概念做一些梳理。
一 专业术语(Terminology)
一切需先从数据说起,毕竟模型是身体,数据相当于知识,有了知识的输入才能对外输出。
1. 数据
举个例子,要想判断一个瓜是不是好瓜(你是故意找茬是不是),得从它的色泽、声音、根蒂、含糖量等各个方面来判断,这些判断标准就是特征(Feature)
。

我们将瓜摊所有的瓜编号统计,制作出一个表格,这就是初始的数据集(Data set)
,注意我们是假定已经知道这个瓜是好瓜还是坏瓜,这就是标签(Lebel)
,其实我们在搜集数据时很多时候是没有标签的,需要人为的为它们打上标签。
-
单条数据:
- 不带标签的单个数据称为样本(Sample)
- 带标签的单个数据称为样例(Example)
这个其实不是很重要,大概知道说的是啥就行。
-
数据集合:
-
带有标签且用于训练的集合叫做训练集(Training Set)
-
带有标签的用于验证的集合叫做验证集(Validation Set)
-
带有标签且用于测试的集合叫测试集(Testing Set)
训练集就是用来训练模型的数据集,就像是你平时学习的知识和做的习题;
测试集就是用来测试模型性能的数据集,就像是你的考试,通过测试看你平时掌握了多少知识。
前两个都是字面意思,至于验证集我们在后面交叉验证法的时候再说明。
-
-
样本空间:
之前说到各个样本的特征,它是有维度(Dimension)的,取决于你的数据,比如上述表格中就是8维特征,所有样本集合在高维空间的分布就叫样本空间。
2. 预测值与真值
- 模型的输出我们叫做
预测值(Hypothesis or prediction)
; - 对应输入数据的标签我们叫做
真值(Groundtruth)
。
在数学表达中,我们通常将预测值表示为 ,真值表示为 。其实与概率中的预测值表达十分相似。
3. 任务分类
Task Map

3.1 以预测目标分类
- 分类任务(Classification Task):输出离散值
- 二分类任务
- 多分类任务
- 回归任务(Regression Task):输出连续值
- 聚类任务(Clustering Task)
3.2 以标签分类
- 监督学习(Supervised Learning)
- 无监督学习(Unsupervised Learning)
- 半监督学习(Semi-supervised Learning)
4. 超参数(Hyper-parameter)
超参数调整(Parameter Tuning)不可能全部取到,只能选择一定的范围和步长测试数量有限的超参。

二 误差与拟合
现实中有许多的模型(算法),而且相同的模型在不同的训练条件下也有不同的参数,哪种模型才是最好的呢?
1. 模型选择
Example:

2. 准确率与误差
为全部数据,U 未匹配输出,M为匹配数据
-
误差(Error)
-
准确率(Accuracy)
误差类型:
-
Error 误差
- Error is the difference between the output of a learner and the ground-truth of samples
-
Training error/Empirical error 训练/经验误差
- error on the training set
-
Testing error 测试误差
- error on the testing set
-
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:

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

4.1.1 解决方案
-
数据集相关
-
增大训练数据集数据量
-
Data Augmentation:对训练集进行数据增强(如拉伸,反转)
这一步其实也在增大数据集数据量。使用数据增强可以生成多幅相似图像。这可以帮助我们增加数据集规模从而减少过拟合。因为随着数据量的增加,模型无法过拟合所有样本,因此自然减少过拟合的概率。
计算机视觉领域:翻转、平移、旋转、缩放、改变亮度、添加噪声等等;
音频数据增强方法:增加噪音、增加混响、时移、改变音调和时间拉伸等等。
-
-
模型相关
-
降低模型复杂度
-
正则化(Regularization)
在损失函数后面加一个正则化项,常见的有
L1正则化
和L2正则化
,类比向量的1-Norm和2-Norm。类似的概念还有:
-
Zero-center:中心化处理,减去均值,方差不做要求;
-
Standardization:标准化处理,减去均值除于方差,也就是将数据变为均值为0方差为1的正态分布(注意,这里指的是数据的分布,数值不一定在0-1区间,区分下面);
-
Normalization:归一化处理,把数据大小限定在特定的范围,比如一般都是[0,1]或[-1,1];
-
-
Dropout
以概率
p
随机失活某层多个感知机:
-
-
训练相关
- 早停法(Early Stoping)
4.2 Underfitting
模型还没有学习到训练样本的一般性质,这也是模型需要不断优化的原因之一。
三 数据集划分和模型评估
1. 数据集划分
Goal:Low generalization error.
一 般用测试集来测试模型辨别新样本的能力,即泛化能力。那么应该如何用测试集测试泛化能力呢?
Basic Idea:
-
测试集样本不应该出现在训练集中。
-
如何将数据集划分为训练集与测试集。
主要有三种分类方法。
1.1 留出法(Hand-Out)
留出法即将数据集专门留出一部分用作测试

缺点:
- 数据集划分导致训练集数据减少。
通常取 ~ 用于训练
1.2 交叉验证法(Cross-Validation)
交叉验证是无差的,网上交叉验证法的测试集其实其实是就是验证集(Validation Set),因为测试集不能作为训练,而验证集经常与训练集一起在训练时调整超参数,因此交叉验证中用到的测试数据只能来自验证集。这里国内的翻译很混乱,第一次接触的时候也是一头雾水。可以参考这节最后的示例图,黄色的就是验证集,橙色的(True Test Set)即是真正的测试集。
先考虑一种极端情况,也叫作留一交叉验证(Leave one out Cross validation
):
-
数据集中有n个数据,我们留1个用于测试,其他用来训练。依次取数据集中每个数据作为测试数据
LOOCV的方法就是每次取出一个数据作为验证集的唯一元素,而其他n-1个数据都作为训练集用于训练模型和调参。最终训练了n个带参模型(这里我们是使用了同一种模型架构,因为训练了n次,故其实得到了n个带参模型),每次都能得到一个(均方误差)。而计算最终测试MSE
则就是将这n个取平均,即:
其缺点十分明显:计算量太大。我们在此之上做出改进,提出一种折中的方法——k次N折交叉验证(k-times N-fold Cross Validation)
。
步骤:
- 将数据集划分为N份,而不必以单个样本为最小元。
- 不重复地每次取其中一份做验证集,用其他N-1份做训练集训练模型,之后计算该模型在测试集上的总均方误差

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

这里我们是使用了3种模型,横向比较选择MSE最小的一个。
1.3 自助(采样)法(Bootstrapping)
在统计学中,自助法(Bootstrap Method,Bootstrapping)是一种从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。自助法由Bradley Efron于1979年在《Annals of Statistics》上发表。当样本来自能以正态分布来描述的总体,其抽样分布为正态分布;但当样本来自的总体无法以正态分布来描述,则以渐进分析法、自助法等来分析。采用随机可排列抽样(random sampling with replacement)。对于小数据集,自助法效果很好。
我们希望评估的是用原始数据集D训练出的模型,但是留出法和交叉验证法训练的数据集比原始的数据集D小,这必然会引入因训练数据集不同导致的估计偏差,留一法受训练样本规模变化的影响较小,但是计算复杂度太高。
自助法是有放回抽样,给定包含m
个样本的数据集 ,我们对它进行采样产生数据集 :
- 每次随机从 中挑选一个样本,将该样本拷贝放入
- 然后再将该样本放回初始数据集 中,下次抽样时仍有可能被采到
- 重复执行
m
次该过程,我们就得到了包含m个样本数据集 ,
初始数据集D中有一部分样本会在数据集 中多次出现,也有一部分样本不会在数据集 中出现。
所以我们取
- 为训练集
- 为测试集。
若数据集太少,我们进行多次自助采样可在一定程度上扩充训练集

一个样本a
不被选中概率为:
优点:
- It’s useful when dataset is small and training and test set are hard to construct
缺点:
- The training set has different distribution of , which may introduce bias in evaluation.
2. 模型评估
2.1 回归任务

2.2 分类任务

在实际的计算中,我们更多的使用交叉熵。
2.2.1 混淆矩阵
然而仅仅靠误差和精确度这两个参数是无法完全评估分类模型的。因此我们提出一种度量方法——混淆矩阵(Confusion Matrix)。先看统计学概念两个
召回率(Recall)和精度(Precise)是广泛用于统计学分类领域的两个度量值,用来评估分类结果的质量。
- 召回率(Recall Rate,也叫查全率) 是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率;
- 正确率(Precision Rate,也叫查准率) 是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。
![]()
二分类问题中混淆矩阵定义如下:

混淆矩阵由 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,分母为线上的数值之和。
那么之前提到的正确率和召回率:
查准率和查全率是一对矛盾的指标。一般来说,查准率高时,查全率往往偏低;二查全率高时,查准率往往偏低。
精确率(Accuracy)和正确率(Precision)的区别:
Accuracy,不管是哪个类别,只要预测正确,其数量都放在分子上,而分母是全部数据量,说明这个精确率是对全部数据的判断。
而正确率在分类中对应的是某个类别,分子是预测该类别正确的数量,分母是预测为该类别的全部的数量。
或者说,Accuracy是对分类器整体上的精确率的评价,而Precision是分类器预测为某一个类别的精确的评价。
2.2.2 F1 和 F_B

和 是对正确率和召回率加权调和平均,在 中两者权重相等。
2.2.3 P-R曲线和ROC曲线
为了更加直观的表示分类器的性能,我们使用PR curve 和 ROC curve.
PR Curve :

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

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