【机器学习导引】ch2-模型评估与选择
文章目录
- 经验误差与过拟合 (Empirical error &overfitting)
- 1. **均方误差(Mean Squared Error, MSE)**
- 2. **均方根误差(Root Mean Squared Error, RMSE)**
- 3. **平均绝对误差(Mean Absolute Error, MAE)**
- 4. **交叉熵损失(Cross Entropy Loss)**
- 5. **Hinge 损失**
- 6. **Huber 损失**
- 7. **KL 散度(Kullback-Leibler Divergence)**
- 8. **Softmax 损失**
- 总结:
- 评估方法 (Evaluation method)
- 性能度量(Performance measure)
- 错误率与精度
- 总结:
- 查准率、查全率与F1
- 混淆矩阵(Confusion Matrix):
- 查准率(Precision, P):
- 查全率(Recall, R):
- F1值(F1 Score):
- 总结:
- 案例分析:垃圾邮件识别
- ROC与AUC
- ROC曲线:
- 真正例率(True Positive Rate, TPR):
- 假正例率(False Positive Rate, FPR):
- AUC(Area Under ROC Curve):
- 总结:
- 代价敏感错误率与代价曲线
- 背景:
- 公式解释:
- 代价因素:
- 解释:
- 实际应用:
- 总结:
- 偏差与方差 (Bias and Variance)
- 泛化误差分解公式:
- 各项含义:
- 结论:
经验误差与过拟合 (Empirical error &overfitting)
-
经验误差是指学习器 f f f 在训练集上表现出的误差。公式为:
R e m p ( f ) = 1 m ∑ i = 1 m L ( f ( x i ) , y i ) R_{emp}(f) = \frac{1}{m} \sum_{i=1}^{m} L(f(x_i), y_i) Remp(f)=m1i=1∑mL(f(xi),yi)
其中 L ( f ( x i ) , y i ) L(f(x_i), y_i) L(f(xi),yi) 是损失函数,表示模型在训练样本 ( x i , y i ) (x_i, y_i) (xi,yi) 上的误差。
-
泛化误差是指学习器 f f f 在未来的未见样本上所表现出的误差。公式为:
R ( f ) = E [ L ( f ( x ) , y ) ] = ∫ L ( f ( x ) , y ) d P ( x , y ) R(f) = \mathbb{E}[L(f(x), y)] = \int L(f(x), y) dP(x, y) R(f)=E[L(f(x),y)]=∫L(f(x),y)dP(x,y)
- 这里 P ( x , y ) P(x, y) P(x,y) 是样本的真实分布, L ( f ( x ) , y ) L(f(x), y) L(f(x),y) 表示模型对新的样本 ( x , y ) (x, y) (x,y) 的误差。
- 公式右侧的积分表达式说明了**泛化误差是模型在整个真实数据分布下的平均误差,**即模型不仅要在训练数据上表现好,还需要在未来可能遇到的未知样本上表现良好。
要点:
-
经验误差并非越小越好,因为过度减小经验误差可能导致模型过拟合(即模型在训练集上表现非常好,但在新样本上表现差)。
-
常见的损失函数与适用范围
1. 均方误差(Mean Squared Error, MSE)
- 公式: M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i})^2 MSE=n1∑i=1n(yi−yi^)2
- 适用场景:主要用于回归任务,例如预测房价或气温。
- 解释:MSE 计算的是真实值 y i y_i yi 与预测值 y i ^ \hat{y_i} yi^ 之间的平方差。这个损失函数惩罚较大的误差,因此对异常值较为敏感。
2. 均方根误差(Root Mean Squared Error, RMSE)
- 公式: R M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i})^2} RMSE=n1∑i=1n(yi−yi^)2
- 适用场景:同样适用于回归任务,其单位与输出变量一致,因此易于解释。
- 解释:与 MSE 类似,但在计算后进行了平方根处理,避免了过度放大大误差的影响。
3. 平均绝对误差(Mean Absolute Error, MAE)
- 公式: M A E = 1 n ∑ i = 1 n ∣ y i − y i ^ ∣ MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y_i}| MAE=n1∑i=1n∣yi−yi^∣
- 适用场景:用于回归任务,但相比 MSE 更加鲁棒,适用于异常值较多的场景。
- 解释:MAE 计算的是预测值与真实值之间的绝对误差,所有误差的权重相同,因此对异常值的影响较小。
4. 交叉熵损失(Cross Entropy Loss)
-
公式:对于二分类问题:
H ( p , q ) = − 1 n ∑ i = 1 n [ y i log y i ^ + ( 1 − y i ) log ( 1 − y i ^ ) ] H(p, q) = - \frac{1}{n} \sum_{i=1}^{n} [y_i \log \hat{y_i} + (1 - y_i) \log (1 - \hat{y_i})] H(p,q)=−n1i=1∑n[yilogyi^+(1−yi)log(1−yi^)]
-
适用场景:主要用于分类任务,例如二分类任务(如猫和狗的分类)、多分类任务(如手写数字识别)。
-
解释:交叉熵损失衡量的是两个概率分布之间的差异,预测值 y i ^ \hat{y_i} yi^ 越接近真实值 y i y_i yi ,损失越小。
5. Hinge 损失
- 公式: L ( y , y ^ ) = max ( 0 , 1 − y ⋅ y ^ ) L(y, \hat{y}) = \max(0, 1 - y \cdot \hat{y}) L(y,y^)=max(0,1−y⋅y^)
- 适用场景:主要用于**支持向量机(SVM)**等分类模型。
- 解释:当样本的预测结果 y ⋅ y ^ ≥ 1 y \cdot \hat{y} \geq 1 y⋅y^≥1 时,损失为 0 0 0;当预测错误时,损失会增加。Hinge 损失用于区分模型的预测结果是否足够有信心。
6. Huber 损失
-
公式:
L δ ( a ) = { 1 2 a 2 if ∣ a ∣ ≤ δ δ ( ∣ a ∣ − 1 2 δ ) otherwise L_{\delta}(a) = \begin{cases} \frac{1}{2}a^2 & \text{if } |a| \leq \delta \\ \delta(|a| - \frac{1}{2}\delta) & \text{otherwise} \end{cases} Lδ(a)={21a2δ(∣a∣−21δ)if ∣a∣≤δotherwise
-
适用场景:用于回归任务,尤其在需要平衡鲁棒性和异常值敏感性时。
-
解释:Huber 损失在误差较小时表现为均方误差(MSE),在误差较大时表现为平均绝对误差(MAE),因此在处理异常值时更加稳健。
7. KL 散度(Kullback-Leibler Divergence)
-
公式:
D K L ( P ∣ ∣ Q ) = ∑ i P ( i ) log P ( i ) Q ( i ) D_{KL}(P || Q) = \sum_{i} P(i) \log \frac{P(i)}{Q(i)} DKL(P∣∣Q)=i∑P(i)logQ(i)P(i)
-
适用场景:用于测量两个概率分布之间的差异,常用于生成模型或自监督学习。
-
解释: K L KL KL 散度度量了真实分布 P P P 与预测分布 Q Q Q 之间的信息损失,越接近越好。
8. Softmax 损失
- 公式: L = − 1 N ∑ i = 1 N log e y i ^ ∑ j e y j ^ 公式: L = - \frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{\hat{y_i}}}{\sum_{j} e^{\hat{y_j}}} 公式:L=−N1∑i=1Nlog∑jeyj^eyi^
- 适用场景:通常用于多分类问题的神经网络输出层,结合交叉熵损失。
- 解释: S o f t m a x Softmax Softmax 损失将多个分类的输出归一化为概率分布,并计算与真实标签的交叉熵损失。
总结:
- 回归任务:常用 MSE、MAE、Huber 损失等。
- 分类任务:常用交叉熵损失、Hinge 损失、Softmax 损失等。
- 生成模型/概率测量:常用 KL 散度等。
损失函数的选择取决于具体的任务类型、数据特性以及模型需求。
评估方法 (Evaluation method)
-
留出法 (Hold-out method):
这是最简单的验证方法之一,将数据集分成两个或三个部分:训练集和测试集(有时还有验证集)。训练集用于训练模型,测试集用于评估模型的性能。常见的划分比例是70%用于训练,30%用于测试。这种方法简单直接,但在数据量较小时可能不够稳定。
-
交叉验证法 (Cross-validation):
交叉验证是一种比留出法更可靠的验证技术。最常见的是 k折交叉验证。数据集被分成
k
个相同大小的部分,模型训练k
次,每次使用一个不同的部分作为测试集,其余部分作为训练集。这样可以更好地减少模型性能估计的方差,提供更稳定的结果。 -
自助法 (Bootstrapping):
- 自助法是一种重采样技术,数据点从数据集中随机选取,允许有放回地抽样,以创建多个新的训练集。这种方法在数据集较小时尤其有用,因为它可以通过创建许多样本来帮助估计模型性能的不确定性。自助法主要用于估计统计量的分布或不确定性。
- 通过自助法,初始数据集 D D D 中约有 36.8 % 36.8 \% 36.8% 的样本未被采样到数据集 D D D’ 中。
-
调参与最终模型 (Parameter tuning and final model):
这指的是调整模型的超参数以优化性能的过程。常用的方法包括网格搜索(Grid Search)和随机搜索(Random Search),它们用于找到最佳的参数组合。在找到最佳参数之后,最终模型会在整个训练集上进行训练,并在测试集上评估模型的性能。
性能度量(Performance measure)
错误率与精度
- 错误率:
-
错误率表示模型预测错误的比例。公式如下:
E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f;D) = \frac{1}{m} \sum_{i=1}^{m} \mathbb{I}(f(x_i) \neq y_i) E(f;D)=m1i=1∑mI(f(xi)=yi)
其中:
- m m m 是数据集中的样本总数;
- f ( x i ) f(x_i) f(xi) 是模型对样本 x i x_i xi 的预测结果;
- y i y_i yi 是样本 x i x_i xi 的真实标签;
- I ( f ( x i ) ≠ y i ) \mathbb{I}(f(x_i) \neq y_i) I(f(xi)=yi) 是一个指示函数,当 f ( x i ) ≠ y i f(x_i) \neq y_i f(xi)=yi 时取值为 1 1 1(表示预测错误),否则取值为 0 0 0。
-
错误率的意思是,模型在整个数据集上预测错误的样本占总样本数的比例。
-
- 精度:
-
精度表示模型预测正确的比例。公式如下:
acc ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) \text{acc}(f;D) = \frac{1}{m} \sum_{i=1}^{m} \mathbb{I}(f(x_i) = y_i) acc(f;D)=m1i=1∑mI(f(xi)=yi)
-
精度公式与错误率类似,不同的是,这里的指示函数是 I ( f ( x i ) = y i ) \mathbb{I}(f(x_i) = y_i) I(f(xi)=yi) ,当模型预测正确时取值为 1 1 1(即 f ( x i ) = y i f(x_i) = y_i f(xi)=yi ),否则为 0 0 0。
-
因为精度和错误率是互补的关系,所以我们可以用以下公式表示精度:
acc ( f ; D ) = 1 − E ( f ; D ) \text{acc}(f;D) = 1 - E(f;D) acc(f;D)=1−E(f;D)
即:精度等于 1 1 1 减去错误率。
-
-
总结:
- 错误率 和 精度 是评估模型性能的两个基本指标。错误率衡量模型的错误预测比例,而精度则衡量模型的正确预测比例。两者之间的关系是互补的,精度等于 1 1 1 减去错误率。
查准率、查全率与F1
混淆矩阵(Confusion Matrix):
表格中展示了分类结果的四种情况:
- TP (True Positive):真正例,即模型正确预测为正类的样本。
- FN (False Negative):假反例,即模型错误地预测为负类的正类样本。
- FP (False Positive):假正例,即模型错误地预测为正类的负类样本。
- TN (True Negative):真反例,即模型正确预测为负类的样本。
查准率(Precision, P):
-
查准率衡量的是模型预测为正类的样本中,实际为正类的比例。公式为:
P = T P T P + F P P = \frac{TP}{TP + FP} P=TP+FPTP
解释:在所有被模型预测为正的样本中,有多少是实际正类。
查全率(Recall, R):
-
查全率衡量的是所有实际为正类的样本中,模型正确预测为正类的比例。公式为:
R = T P T P + F N R = \frac{TP}{TP + FN} R=TP+FNTP
解释:在所有真实正类样本中,有多少被模型正确预测为正。
F1值(F1 Score):
-
F 1 F1 F1 值是查准率和查全率的调和平均,用来平衡查准率和查全率之间的权衡。公式为:
F 1 = 2 × P × R P + R = 1 1 2 × ( 1 P + 1 R ) F1 = \frac{2 \times P \times R}{P + R} = \frac{1}{\frac{1}{2} \times (\frac{1}{P} +\frac{1}{R})} F1=P+R2×P×R=21×(P1+R1)1
解释: F 1 F1 F1 值同时考虑了查准率和查全率,当这两者数值差距较大时, F 1 F1 F1 值能提供一个平衡的评估。
总结:
- 查准率 衡量的是预测为正类的准确性。
- 查全率 衡量的是对所有正类样本的覆盖程度。
- F1值 提供了查准率和查全率的平衡评价,是在查准率和查全率有冲突时的常用指标。
案例分析:垃圾邮件识别
ROC与AUC
ROC曲线:
- ROC曲线 是一个常用的评估分类模型性能的工具,特别是在二分类问题中。ROC曲线通过不同的分类阈值绘制出真正例率( T P R TPR TPR) 和 假正例率( F P R FPR FPR) 的关系,帮助分析模型在不同阈值下的表现。
真正例率(True Positive Rate, TPR):
-
真正例率也称为召回率(Recall),表示在所有真实的正类样本中,模型正确预测为正类的比例。公式如下:
T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP
其中:
- T P TP TP 是真正例(模型正确预测为正的样本数);
- F N FN FN 是假反例(实际为正,但被模型预测为负的样本数)。
假正例率(False Positive Rate, FPR):
-
假正例率表示在所有真实的负类样本中,模型错误预测为正类的比例。公式如下:
F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP
其中:
- F P FP FP 是假正例(实际为负,但被模型预测为正的样本数);
- T N TN TN 是真反例(模型正确预测为负的样本数)。
AUC(Area Under ROC Curve):
-
A
U
C
AUC
AUC 是
R
O
C
ROC
ROC曲线下面积,表示模型在不同阈值下的总体表现。
A
U
C
AUC
AUC 值的范围是
0
0
0 到
1
1
1,
A
U
C
AUC
AUC 越接近
1
1
1,说明模型的分类性能越好。
- A U C AUC AUC 为 1 1 1:表示模型有完美的分类能力。
- A U C AUC AUC 为 0.5 0.5 0.5:表示模型的分类能力与随机猜测相当。
总结:
- ROC曲线 通过观察模型在不同阈值下的真正例率和假正例率的变化,评估模型的区分能力。
- AUC 是ROC曲线下的面积,用来量化模型的整体表现,越接近 1 1 1代表模型性能越好。
代价敏感错误率与代价曲线
背景:
例如,错误地将小区居民识别为陌生人,和将陌生人错误识别为小区居民,这两种错误在实际应用中会有不同的代价。因此,在分类模型的评估中,我们需要考虑不同类型错误的代价,而不仅仅是简单的错误率。
公式解释:
E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) × c o s t 01 + ∑ x i ∈ D − I ( f ( x i ) ≠ y i ) × c o s t 10 ) E(f; D; cost) = \frac{1}{m} \left( \sum_{x_i \in D^+} \mathbb{I}(f(x_i) \neq y_i) \times cost_{01} + \sum_{x_i \in D^-} \mathbb{I}(f(x_i) \neq y_i) \times cost_{10} \right) E(f;D;cost)=m1(xi∈D+∑I(f(xi)=yi)×cost01+xi∈D−∑I(f(xi)=yi)×cost10)
- E ( f ; D ; c o s t ) E(f; D; cost) E(f;D;cost) :表示考虑错误代价后的总体错误率。
- m m m:数据集中样本的总数。
- I ( f ( x i ) ≠ y i ) \mathbb{I}(f(x_i) \neq y_i) I(f(xi)=yi):一个指示函数,当模型 f ( x i ) f(x_i) f(xi) 预测错误(即 f ( x i ) ≠ y i f(x_i) \neq y_i f(xi)=yi )时,值为 1 1 1,否则为 0 0 0。
代价因素:
- D + D^+ D+ :样例集中正类的子集,也就是标签为 0 0 0(正类)的样本。
- D − D^- D− :样例集中负类的子集,也就是标签为 1 1 1(负类)的样本。
- c o s t 01 cost_{01} cost01:将正类样本错误预测为负类样本的代价。例如,在实际中,将一个正常用户误判为危险用户可能产生较小的代价。
- c o s t 10 cost_{10} cost10 :将负类样本错误预测为正类样本的代价。例如,将一个危险用户误判为正常用户,可能会带来很大的风险。
解释:
- 该公式考虑了不同错误类型的代价。通过为不同的错误(假正例和假反例)分配不同的代价权重,模型可以更合理地应对代价不对称的情况。
- 如果某种错误比另一种错误代价更高,公式会通过加权方式增加该类错误的惩罚,使模型更注重减少此类错误。
实际应用:
在一些场景中,错误的代价可能不均衡,比如在疾病诊断中,误诊为病人的代价(假正例)和漏诊的代价(假反例)是不一样的。漏诊可能导致更严重的后果,因此我们通常希望减少假反例(更高的代价)。
总结:
此公式提供了一种引入代价的错误率计算方式,通过权衡不同错误的代价,帮助设计出更符合实际应用需求的分类模型。
偏差与方差 (Bias and Variance)
泛化误差分解公式:
泛化误差 E ( f ; D ) E(f; D) E(f;D) 表示模型在新数据上的期望误差,它可以通过偏差(bias)、方差(variance)和不可避免的噪声项进行分解:
E ( f ; D ) = bias 2 ( x ) + var ( x ) + ϵ 2 E(f; D) = \text{bias}^2(x) + \text{var}(x) + \epsilon^2 E(f;D)=bias2(x)+var(x)+ϵ2
-
偏差 bias 2 ( x ) \text{bias}^2(x) bias2(x) :衡量模型的预测值 f ˉ ( x ) \bar{f}(x) fˉ(x) 与真实输出 y y y 的差异,即模型的系统误差。偏差反映了模型在捕捉数据特征时的偏离程度。公式如下:
bias 2 ( x ) = ( f ˉ ( x ) − y ) 2 \text{bias}^2(x) = \left( \bar{f}(x) - y \right)^2 bias2(x)=(fˉ(x)−y)2
偏差高通常意味着模型过于简单,无法很好地拟合数据(即欠拟合)。
-
方差 var ( x ) \text{var}(x) var(x):衡量模型在不同训练集上的预测结果之间的波动性,反映了模型对训练数据的敏感程度。公式如下:
var ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] \text{var}(x) = \mathbb{E}_D \left[ (f(x; D) - \bar{f}(x))^2 \right] var(x)=ED[(f(x;D)−fˉ(x))2]
方差高通常意味着模型过度依赖训练数据,容易过拟合(即过拟合)。
-
噪声项 ϵ 2 \epsilon^2 ϵ2 :这是不可避免的误差,它来自数据本身的固有噪声,表示即使模型完美拟合数据,也无法消除的误差。公式如下:
ϵ 2 = E D [ ( y D − y ) 2 ] \epsilon^2 = \mathbb{E}_D \left[ (y_D - y)^2 \right] ϵ2=ED[(yD−y)2]
各项含义:
- 偏差:期望输出和真实输出的差别,代表了模型的学习能力。当模型过于简单时,偏差较大,容易出现欠拟合。
- 方差:同样大小的训练集变动引起的模型预测变动,代表了模型对数据的敏感程度。当模型过于复杂时,方差较大,容易出现过拟合。
- 噪声:数据本身所带来的无法消除的误差,这部分无法通过改进模型来减少。
结论:
泛化性能由学习算法的能力、数据的充分性以及任务本身的难度共同决定。偏差和方差的权衡是机器学习中的一个核心问题,模型需要在复杂度和对数据的敏感性之间找到一个平衡点,既避免欠拟合(偏差过高),也避免过拟合(方差过高)。