LOOCV 是 K 折交叉验证的极端情况(K=N),适用于超小数据集,最大化数据利用率。
基本流程
将 N 个样本划分为 N 份,每次取 1 个验证,N-1 个训练,循环 N 次。
示例(N=5):
数据集: [1, 2, 3, 4, 5]
第1次: 训练 [2,3,4,5], 验证 [1]
第2次: 训练 [1,3,4,5], 验证 [2]
...代码实现
from sklearn.model_selection import LeaveOneOut, cross_val_score
loo = LeaveOneOut()
scores = cross_val_score(model, X, y, cv=loo, scoring='accuracy')
print("LOOCV 平均准确率:", scores.mean())优缺点
| 优点 | 缺点 |
|---|---|
| 最大化数据利用 | 计算成本高(N 次训练) |
| 评估稳定 | 方差可能较大 |
| 避免过拟合 | 不适合大数据集 |
适用场景
- ✅ 医学诊断(样本稀缺)
- ✅ 实验数据
- ❌ 大数据集
与 K-Fold 对比
| 方法 | 训练集 | 验证次数 | 计算开销 |
|---|---|---|---|
| K-Fold | K-1 份 | K 次 | 中等 |
| LOOCV | N-1 份 | N 次 | 高 |
K=5 或 K=10 是更常用的选择。