机器学习实验的设计与分析
1. 引言
在实际应用中,往往有多种学习算法可供选择。这就引发了两个关键问题:一是如何评估学习算法在某一问题上的预期误差,二是如何比较两个学习算法在特定应用中的误差。
不能仅依据训练集误差来做决策,因为训练集误差通常小于测试集误差,且复杂模型在训练集上的误差往往更小。为了更准确地评估和比较算法,需要使用验证集。但仅进行一次验证可能不够,原因有二:一是训练集和验证集可能较小,存在异常实例;二是学习方法可能受其他随机因素影响。
为了消除这些随机因素的影响,我们可以多次运行同一算法,生成多个学习器,并在多个验证集上进行测试,记录验证误差样本。我们基于这些验证误差的分布来评估学习算法,可用于评估算法的预期误差,或与其他算法的误差率分布进行比较。
在进行实验前,还需注意以下几点:
1. 分析结论依赖于给定的数据集,实验结果仅适用于特定应用。不存在“最佳”学习算法,不同算法在不同数据集上表现各异。
2. 数据集划分为训练集和验证集仅用于测试。完成测试并确定最终方法或超参数后,可使用所有标注数据来训练最终学习器。
3. 验证集用于测试,因此在确定最终算法并报告其预期误差时,应使用单独的测试集。通常,将数据集的三分之一留作测试集,其余用于训练和验证。
4. 除了误差率,实际决策还受其他因素影响,如风险、训练和测试的时间与空间复杂度、可解释性和易编程性等。
2. 实验的因素、响应和策略
在机器学习中,实验旨在获取有关学习过程的信息。实验涉及控制影响输出的因素,观察响应变化以提取信息。目标可能是确定最重要的因素、筛选不重要的因素,或找到优化响应的因素配置。
2.1 因素类型
- 可控因素 :包括学习算法、算法的超参数(如多层感知机的隐藏单元数、k - 近邻的 k 值等)、数据集和输入表示。
- 不可控因素 :如数据中的噪声、训练子集的随机性、优化过程中的随机性(如多层感知机的初始权重)等。
2.2 响应变量
响应变量可由输出生成,如测试集上的平均分类误差、使用损失函数的预期风险、精度和召回率等。
2.3 实验策略
- 最佳猜测法 :从认为合适的因素配置开始,逐个调整因素并测试,直到达到满意状态。但该方法缺乏系统性,无法保证找到最佳配置。
- 一次改变一个因素法 :为所有因素设定基线值,然后改变一个因素的不同水平,同时保持其他因素不变。但其缺点是假设因素之间无交互作用,这可能不符合实际情况。
- 析因设计法 :同时改变多个因素,也称为网格搜索。虽然时间复杂度较高($O(L^F)$),但能更全面地探索因素组合。
以下是不同实验策略的对比表格:
| 实验策略 | 优点 | 缺点 | 时间复杂度 |
| — | — | — | — |
| 最佳猜测法 | 若实验者直觉好可能有效 | 无系统方法,无法保证最佳配置 | - |
| 一次改变一个因素法 | 简单直观 | 假设因素无交互作用,可能不准确 | $O(L · F)$ |
| 析因设计法 | 全面探索因素组合 | 时间复杂度高 | $O(L^F)$ |
3. 响应面设计
为减少实验次数,可采用部分析因设计,或利用先前实验的知识来估计可能有高响应的配置。
若假设响应通常为二次函数(有单一最大值),可采用迭代过程:从初始运行开始,拟合二次函数,解析计算其最大值作为下一个估计值,再次实验并更新数据,直至无进一步改进。
对于多个因素的情况,可使用响应面设计方法,拟合参数化响应函数:
$r = g(f_1, f_2, …, f_F|\varphi)$
其中,$r$ 是响应,$f_i$ 是因素,$\varphi$ 是参数。该方法通过拟合函数来估计因素配置对响应的影响。
4. 随机化、重复和分块
实验设计有三个基本原则:
1.
随机化
:实验运行顺序应随机确定,以确保结果独立。在软件实验中,顺序问题通常不严重。
2.
重复
:对于相同的可控因素配置,应多次运行实验,以平均不可控因素的影响。在机器学习中,通常通过对同一数据集进行多次重采样来实现,即交叉验证。
3.
分块
:用于减少或消除不感兴趣的干扰因素的变异性。在机器学习实验中,比较算法时,应确保它们使用相同的重采样子集,以准确测量算法之间的差异。
5. 机器学习实验指南
在开始实验前,需明确研究目标、选择响应变量、确定因素和水平、选择实验设计、进行实验并分析数据,最后得出结论和建议。
5.1 研究目标
- 评估学习算法在特定问题上的预期误差,确保误差低于可接受水平。
- 比较两个或多个学习算法在特定数据集或多个数据集上的泛化误差。
5.2 响应变量选择
最常用的是分类的误分类误差和回归的均方误差,也可使用风险度量、精度和召回率等。
5.3 因素和水平选择
因素取决于研究目标,如固定算法时,超参数是因素;比较算法时,学习算法本身是因素。因素水平应仔细选择,避免遗漏好的配置和进行不必要的实验。
5.4 实验设计选择
优先使用析因设计,除非确定因素之间无交互作用。重复次数取决于数据集大小,数据集大时可适当减少重复次数。同时,应避免使用小型合成数据,尽量使用真实数据集。
5.5 实验执行
在进行大规模实验前,可先进行一些随机设置的试运行,确保一切正常。实验过程中应保存中间结果,保证结果可重现。实验者应保持客观,避免编写自己的“库”,尽量使用可靠的代码。
5.6 数据统计分析
将问题转化为假设检验框架,检查样本是否支持假设。可使用可视化分析方法,如误差分布直方图、箱线图等。
5.7 结论和建议
实验结束后,应得出客观结论。若结果未达到预期,应分析原因,可能会得到改进算法的思路。但在进行下一步测试前,应确保充分分析当前数据。
以下是机器学习实验的流程 mermaid 图:
graph LR
A[明确研究目标] --> B[选择响应变量]
B --> C[确定因素和水平]
C --> D[选择实验设计]
D --> E[进行实验]
E --> F[统计分析数据]
F --> G[得出结论和建议]
6. 交叉验证和重采样方法
为了进行重复实验,需要从数据集(留出测试集后)中获取多个训练集和验证集对。由于数据集通常不够大,不能简单地随机划分,因此需要采用交叉验证或重采样方法。
6.1 K - 折交叉验证
将数据集随机划分为 K 个相等大小的部分,每次将其中一部分作为验证集,其余部分组合作为训练集,重复 K 次。K 通常为 10 或 30。该方法的问题是为了保持训练集较大,验证集可能较小,且训练集之间重叠较多。当 K 增大时,训练实例百分比增加,但验证集变小,训练成本也会增加。极端情况是留一法,每次只留一个实例作为验证集。
6.2 5×2 交叉验证
将数据集随机分为两部分,得到第一对训练集和验证集,然后交换两部分的角色得到第二对。重复这个过程五次,共得到十对训练集和验证集。该方法使用相等大小的训练集和验证集,但超过五折后,集合之间的重叠会导致统计数据过于依赖,无法提供新信息。
6.3 自助法
通过有放回地从原始样本中抽取实例来生成新样本。原始数据集作为验证集。自助法适用于非常小的数据集,但样本之间的重叠可能导致估计值更依赖。
以下是不同重采样方法的对比表格:
| 重采样方法 | 优点 | 缺点 | 适用场景 |
| — | — | — | — |
| K - 折交叉验证 | 训练实例百分比可调节 | 验证集可能小,训练集重叠多 | 一般数据集 |
| 5×2 交叉验证 | 训练集和验证集大小相等 | 超过五折后统计数据依赖 | 数据集适中 |
| 自助法 | 适用于小数据集 | 样本重叠,估计值依赖 | 非常小的数据集 |
7. 分类器性能度量
对于分类问题,特别是二分类问题,有多种性能度量方法。
7.1 混淆矩阵
二分类问题的混淆矩阵如下:
| 真实类别\预测类别 | 正类 | 负类 | 总计 |
| — | — | — | — |
| 正类 | tp(真正例) | fn(假负例) | p |
| 负类 | fp(假正例) | tn(真负例) | n |
| 总计 | p’ | n’ | N |
7.2 性能指标
- 误差率 :$(fp + fn) / N$
- 准确率 :$(tp + tn) / N = 1 - 误差率$
- 真正例率(tp - rate) :$tp / p$
- 假正例率(fp - rate) :$fp / n$
- 精度 :$tp / p’$
- 召回率 :$tp / p = tp - rate$
- 灵敏度 :$tp / p = tp - rate$
- 特异度 :$tn / n = 1 - fp - rate$
7.3 ROC 曲线和 AUC
通过改变决策阈值 $\theta$,可以得到一系列(tp - rate,fp - rate)值,连接这些值得到接收者操作特征(ROC)曲线。ROC 曲线可视为分类器在不同损失矩阵下的行为。曲线下面积(AUC)可将 ROC 曲线简化为一个数值,AUC 越接近 1 表示分类器性能越好。
7.4 精度 - 召回率曲线
在信息检索中,精度是检索到的相关记录数与总检索记录数的比值,召回率是检索到的相关记录数与总相关记录数的比值。可以绘制不同阈值下的精度 - 召回率曲线。
7.5 多分类情况
对于 K > 2 类的情况,可使用 0/1 误差,此时类混淆矩阵是一个 K×K 矩阵,可用于确定误分类类型。也可将其转化为 K 个二分类问题进行分析。
8. 区间估计
区间估计用于在一定置信度下确定参数所在的区间。以估计正态密度的均值 $\mu$ 为例,样本均值 $m$ 是 $\mu$ 的点估计。已知 $m \sim N(\mu, \sigma^2 / N)$,可定义统计量:
$\frac{(m - \mu)}{\sigma / \sqrt{N}} \sim Z$
其中 $Z$ 是标准正态分布。
8.1 双侧置信区间
对于 95% 的置信度,有 $P{-1.96 < Z < 1.96} = 0.95$,可推出 $\mu$ 的双侧置信区间为:
$P{m - 1.96\frac{\sigma}{\sqrt{N}} < \mu < m + 1.96\frac{\sigma}{\sqrt{N}}} = 0.95$
对于任意置信度 $1 - \alpha$,双侧置信区间为:
$P{m - z_{\alpha/2}\frac{\sigma}{\sqrt{N}} < \mu < m + z_{\alpha/2}\frac{\sigma}{\sqrt{N}}} = 1 - \alpha$
8.2 单侧置信区间
已知 $P{Z < 1.64} = 0.95$,可得 95% 的单侧上置信区间为:
$P{m - 1.64\frac{\sigma}{\sqrt{N}} < \mu} = 0.95$
对于任意置信度 $1 - \alpha$,单侧上置信区间为:
$P{m - z_{\alpha}\frac{\sigma}{\sqrt{N}} < \mu} = 1 - \alpha$
若方差 $\sigma^2$ 未知,可用样本方差 $S^2$ 代替,此时 $\frac{\sqrt{N}(m - \mu)}{S} \sim t_{N - 1}$,置信区间的计算需使用 $t$ 分布。
9. 假设检验
假设检验用于根据样本检验关于参数的特定假设。若样本与假设一致,则“未能拒绝”假设;否则,“拒绝”假设。
9.1 基本步骤
定义一个在假设正确时服从特定分布的统计量,若样本计算得到的统计量从该分布中抽取的概率很低,则拒绝假设;否则,未能拒绝假设。
9.2 示例:检验正态分布的均值
设样本来自正态分布,均值 $\mu$ 未知,方差 $\sigma^2$ 已知,要检验 $\mu$ 是否等于指定常数 $\mu_0$。
-
原假设
:$H_0: \mu = \mu_0$
-
备择假设
:$H_1: \mu \neq \mu_0$
若 $\mu_0$ 落在 $100(1 - \alpha)$ 置信区间内,则未能拒绝原假设;否则,拒绝原假设。这是双侧检验。
9.3 错误类型
- 第一类错误 :拒绝正确的原假设,概率为 $\alpha$。
- 第二类错误 :未能拒绝错误的原假设,概率为 $\beta(\mu)$。
9.4 单侧检验
可进行单侧检验,如 $H_0: \mu \leq \mu_0$ 对 $H_1: \mu > \mu_0$。若方差未知,使用样本方差代替,检验统计量服从 $t$ 分布。
以下是假设检验的错误类型表格:
| 决策\真实情况 | 原假设为真 | 原假设为假 |
| — | — | — |
| 未能拒绝原假设 | 正确 | 第二类错误 |
| 拒绝原假设 | 第一类错误 | 正确(功效) |
10. 评估分类算法的性能
10.1 二项检验
设训练集为 $T$,验证集为 $V$,分类器的误分类概率为 $p$。要检验 $p$ 是否小于等于指定值 $p_0$:
-
原假设
:$H_0: p \leq p_0$
-
备择假设
:$H_1: p > p_0$
若在 $N$ 个实例中观察到 $e$ 个或更多错误的概率很低,则拒绝原假设:
$P{X \geq e} = \sum_{x = e}^{N} \binom{N}{x} p_0^x (1 - p_0)^{N - x} < \alpha$
10.2 近似正态检验
点估计 $\hat{p} = X / N$,当 $N$ 足够大时,$\frac{X / N - p_0}{\sqrt{p_0(1 - p_0)}} \approx Z$。若该值大于 $z_{\alpha}$,则拒绝原假设。该近似在 $Np \geq 5$ 且 $N(1 - p) \geq 5$ 时效果较好。
10.3 t 检验
若多次运行算法,得到 $K$ 个误差百分比 $p_i$,可计算均值 $m$ 和样本方差 $S^2$。若 $\frac{\sqrt{K}(m - p_0)}{S} > t_{\alpha, K - 1}$,则拒绝原假设。
11. 比较两个分类算法
11.1 McNemar 检验
使用训练集和验证集训练两个分类器,计算误差,构建列联表。若 $\frac{(|e_{01} - e_{10}| - 1)^2}{e_{01} + e_{10}} > \chi^2_{\alpha, 1}$,则拒绝两个分类算法误差率相同的假设。
11.2 K - 折交叉验证配对 t 检验
使用 K - 折交叉验证得到 $K$ 对训练集和验证集,记录两个分类器的误差百分比 $p_1^i$ 和 $p_2^i$,计算差值 $p_i = p_1^i - p_2^i$。若 $\frac{\sqrt{K}m}{S}$ 落在 $(-t_{\alpha/2, K - 1}, t_{\alpha/2, K - 1})$ 之外,则拒绝两个算法误差率相同的假设。
11.3 5×2 交叉验证配对 t 检验
进行五次二折交叉验证,计算误差率差值 $p^{(j)} i$,平均 $p_i$ 和估计方差 $s^2_i$。若 $\frac{p^{(1)}_1}{\sqrt{\sum {i = 1}^{5} s^2_i / 5}}$ 落在 $(-t_{\alpha/2, 5}, t_{\alpha/2, 5})$ 之外,则拒绝假设。
11.4 5×2 交叉验证配对 F 检验
将 5×2 交叉验证配对 t 检验的结果扩展,计算统计量 $f = \frac{\sum_{i = 1}^{5} \sum_{j = 1}^{2} (p^{(j)} i)^2}{2 \sum {i = 1}^{5} s^2_i}$。若 $f > F_{\alpha, 10, 5}$,则拒绝假设。
以下是比较两个分类算法的检验方法对比表格:
| 检验方法 | 适用场景 | 统计量 | 拒绝条件 |
| — | — | — | — |
| McNemar 检验 | 单个训练集和验证集 | $\frac{(|e_{01} - e_{10}| - 1)^2}{e_{01} + e_{10}}$ | 大于 $\chi^2_{\alpha, 1}$ |
| K - 折交叉验证配对 t 检验 | K - 折交叉验证 | $\frac{\sqrt{K}m}{S}$ | 落在 $(-t_{\alpha/2, K - 1}, t_{\alpha/2, K - 1})$ 之外 |
| 5×2 交叉验证配对 t 检验 | 五次二折交叉验证 | $\frac{p^{(1)}
1}{\sqrt{\sum
{i = 1}^{5} s^2_i / 5}}$ | 落在 $(-t_{\alpha/2, 5}, t_{\alpha/2, 5})$ 之外 |
| 5×2 交叉验证配对 F 检验 | 五次二折交叉验证 | $\frac{\sum_{i = 1}^{5} \sum_{j = 1}^{2} (p^{(j)}
i)^2}{2 \sum
{i = 1}^{5} s^2_i}$ | 大于 $F_{\alpha, 10, 5}$ |
12. 比较多个算法:方差分析
12.1 基本原理
对于 $L$ 个算法,在 $K$ 个训练集上训练并在 $K$ 个验证集上测试,记录误差率。方差分析(ANOVA)用于检验所有算法的均值是否相等。
-
原假设
:$H_0: \mu_1 = \mu_2 = \cdots = \mu_L$
-
备择假设
:$H_1: \mu_r \neq \mu_s$,至少有一对 $(r, s)$
12.2 计算过程
计算组间平方和 $SS_b$ 和组内平方和 $SS_w$,统计量 $F_0 = \frac{SS_b / (L - 1)}{SS_w / (L(K - 1))}$ 服从 $F_{L - 1, L(K - 1)}$ 分布。若 $F_0 > F_{\alpha, L - 1, L(K - 1)}$,则拒绝原假设。
12.3 事后检验
若原假设被拒绝,需进行事后检验确定差异所在。Fisher 最小二乘差异检验(LSD)用于两两比较。进行多次比较时,需进行 Bonferroni 校正。
以下是方差分析的流程 mermaid 图:
graph LR
A[收集多个算法的误差数据] --> B[计算组间平方和 SSb 和组内平方和 SSw]
B --> C[计算统计量 F0]
C --> D{F0 > Fα, L - 1, L(K - 1)?}
D -- 是 --> E[拒绝原假设,进行事后检验]
D -- 否 --> F[未能拒绝原假设]
13. 跨多个数据集的比较
13.1 非参数检验的必要性
当比较多个算法在多个数据集上的性能时,由于算法在不同数据集上的误差分布可能不服从正态分布,需使用非参数检验。
13.2 比较两个算法
- 符号检验 :若两个算法误差相等,在每个数据集上第一个算法误差小于第二个算法的概率应为 1/2。定义 $X_i$ 表示第一个算法在第 $i$ 个数据集上误差更小的情况,$X = \sum_{i = 1}^{N} X_i$。根据 $X$ 的值进行假设检验。
- Wilcoxon 符号秩检验 :除了考虑差异的符号,还考虑差异的大小。计算差异的绝对值并排序,赋予秩,计算正秩和 $w^+$ 和负秩和 $w^-$。若 $w = \min(w^+, w^-)$ 很小,则拒绝原假设。
13.3 比较多个算法
Kruskal - Wallis 检验是 ANOVA 的非参数版本。对所有观察值排序并赋予秩,计算检验统计量 $H$。若 $H$ 超过 $\chi^2_{\alpha, L - 1}$,则拒绝原假设。若原假设被拒绝,可使用 Tukey 检验进行事后检验。
以下是跨多个数据集比较算法的方法总结表格:
| 比较情况 | 检验方法 | 特点 |
| — | — | — |
| 两个算法 | 符号检验 | 仅考虑差异符号 |
| 两个算法 | Wilcoxon 符号秩检验 | 考虑差异符号和大小 |
| 多个算法 | Kruskal - Wallis 检验 | ANOVA 的非参数版本 |
超级会员免费看
4180

被折叠的 条评论
为什么被折叠?



