一、图像数据不足时的处理方法
1.在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带来的问题?
图像分类任务上,训练数据不足带来的问题主要表现在过拟合方面,即模型在训练样本上的效果可能不错,但在测试集上的泛化效果不佳
对应的处理方法大致也可以分两类,一是基于模型的方法,主要是采用降低过拟合风险的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则顶)、集成学习、Dropout 超参数等;二是墓于数据的方法, 主要通过数据扩充( Data Augmentation ),即根据一些先验知识,在保持特定信息的前提下;对原始数据进行适当变换以达到扩充数据集的效果。具体到图像分类任务中,在保持圄像类别不变的前提下,可以对训练集中的每幅圄像进行以下变换。
- 一定程度内的随机旋转、平移、缩版、裁剪、填充、左右翻转等,这些变换对应着同一个目标在不同角度的观察结果。
- 对图像中的像素添加躁声扰动。
- 颜色变换
- 改变图像的亮度、清晰度、对比度、锐度等。
除了直接在图像空间进行变换,还可以先对图像进行特征提取,然后在图像的特征空间内进行变换,利用一些通用的数据扩充或上采样技术,例如SMOTE ( Synthetic Minority Over” sampling Technique )算法。抛开上述这些启发式的变换方法,使用生成模型也可以合成一些新样本,例如当今非常流行的生成式对抗网络模型。
此外,借助已有的其他模型或数据来进行迁移学习在深度学习中也十分常见。例如,对于大部分图像分类任务,并不需要从头开始训练模型,而是借用一个在大规模数据集上预训练好的通用模型,并在针对目标任务的小数据集上进行微调( fine-tune ) , 这种微调操作就可以看成是一种简单的迁移学习。
二、检验方法
1.KS检验
Kolmogorov-Smirnov检验是基于累计分布函数的,用于检验一个分布是否符合某种理论分布或比较两个经验分布是否有显著差异。
- 单样本K-S检验是用来检验一个数据的观测经验分布是否符合已知的理论分布。
- 两样本K-S检验由于对两样本的经验分布函数的位置和形状参数的差异都敏感,所以成为比较两样本的最有用且最常用的非参数方法之一。
检验统计量为:
其中 Fn(x) 为观察序列值, F(x) 为理论序列值或另一观察序列值。
2.T检验
T检验,也称student t检验,主要用户样本含量较小,总体标准差未知的正态分布。
t检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。
t检验分为单总体检验和双总体检验。
3.F检验
T检验和F检验的由来:为了确定从样本中的统计结果推论到总体时所犯错的概率。F检验又叫做联合假设检验,也称方差比率检验、方差齐性检验。是由英国统计学家Fisher提出。通过比较两组数据的方差,以确定他们的精密度是否有显著性差异。
4.Grubbs检验
一组测量数据中,如果个别数据偏离平均值很远,那么称这个数据为“可疑值”。用格拉布斯法判断,能将“可疑值”从测量数据中剔除。
5.卡方检验
卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。
- 提出原假设H0:总体X的分布函数F(x);
- 将总体x的取值范围分成k个互不相交的小区间A1-Ak;
- 把落入第i个区间Ai的样本的个数记做fi,成为组频数,f1+f2+f3+...+fk = n;
- 当H0为真时,根据假设的总体理论分布,可算出总体X的值落入第i个小区间Ai的概率pi,于是n*pi就是落入第i个小区间Ai的样本值的理论频数;
- 当H0为真时,n次试验中样本落入第i个小区间Ai的频率fi/n与概率pi应该很接近。基于这种思想,皮尔逊引入检测统计量:
在H0假设成立的情况下服从自由度为k-1的卡方分布。
KS检验与卡方检验
相同点:都采用实际频数和期望频数只差进行检验
不同点:
- 卡方检验主要用于类别数据,而KS检验主要用于有计量单位的连续和定量数据。
- 卡方检验也可以用于定量数据,但必须先将数据分组才能获得实际的观测频数,而KS检验能直接对原始数据进行检验,所以它对数据的利用比较完整。
三、不均衡样本集的重采样
在训练二分类模型时,例如医疗诊断、网络入侵检测、信用卡反诈骗等,经常会遇到正负样本不均衡的问题。对于很多分类算法,如果直接采用不均衡的样本集来进行训练学习,会存在一些问题。例如如果正负样本比例达到1 : 99,则分类器简单地将所有样本都判为负样本就能达到99% 的正确率,显然这并不是我们想要的,我们想让分类器在正样本和负样本上都有足够的准确率和召回率。
1.对于二分类问题,当训练集中正负样本非常不均衡肘,如何处理数据以更好地训练分类模型?
对数据进行重采样,使原本不均衡的样本变得均衡。首先,记样本数大的类别为 Cmax ,样本数小的类别为 Cmin,它们对应的样本集分别为 Smax 和 Smin 。根据题设,有 |Smax|>>|Smin| 。
虽然目前有些机器学习算法会解决失衡问题,比如XGBoost,但是很多时候还是需要我们去根据业务实际情况,对数据进行采样处理。最简单的处理不均衡样本集的方法是随机采样。采样一般分为过采样( Over-sampling )和欠采样( Under-sampling )。随机过采样是从少数类样本集Smin中随机重复抽取样本(有放回)以得到更多样本;随机欠采样则相反,从多数类样本集Smax中随机选取较少的样本(有放回或无放回)。
直接的随机采样虽然可以使样本集变得均衡,但会带来一些问题,比如,过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练的复杂度, 同时也容易造成过拟合;欠采样会丢弃一些样本,可能会损失部分有用信息,造成模型只学到了整体模式的一部分。
为了解决上述问题,通常在过采样时并不是简单地复制样本,而是采用一些方法生成新的样本。例如, SMOTE 算法对少数类样本集 Smin 中每个样本x ,从它在Smin中的K近邻(k值需要提前指定)中随机选一个样本y ,然后在x,y连线上随机选取一点作为新合成的样本(根据需要的过采样倍率重复上述过程若干次),如图所示。这种合成新样本的过采样方法可以降低过拟合的风险。
SMOTE 算法为每个少数类样本合成相同数量的新样本,这可能会增大类间重量度(如果选取的少数类样本周围都是多数类样本,这类的样本可能是噪音,则新合成的样本会与周围的多数类样本产生大部分重叠,致使分类困难),并且会生成一些不能提供有益信息的样本。为此出现Borderline-SMOTE 、ADASYN 等改进算法。Borderline - SMOTE只给那些处在分类边界上的少数类样本合成新样本,而ADASYN则给不同的少数类样本合成不同个数的新样本。此外,还可以采用一些数据清理方法(如基于Tomek Links )来进一步降低合成样本带来的类间重量,以得到更加良定义( well-defined )的类簇,从而更好地训练分类器。
同样地,对于欠采样,可以采用Infomed Undersampling 来解决由于随机欠采样带来的数据丢失问题。常见的Informed Undersampling 算法有:
- Easy Ensemble 算法。每次从多数类 Smax 中上随机抽取一个子集E( |E|≈|Smin| ),然后用 |E|+Smin 训练一个分类器;重复上述过程若干次,得到多个分类器,最终的分类结果是这多个分类器结果的融合。
- Balance Cascade 算法。级联结构,在每一级中从多数类Smax中随机抽取子集E,用 E+Smin 训练该集的分类器;然后将 Smax 中能够被当前分类器正确判别的样本剔除掉,继续下一级的操作,重复若干次得到级联结构;最终的输出结果也是各级分类器结果的融合。
- 其他诸如NearMiss(利用K近邻信息挑选具有代表性的样本)、One-sided Selection (采用数据清理技术)等算法。
在实际应用中,具体的采样操作可能并不总是如上述几个算法一样,但基本思路很多时候还是一致的。例如基于聚类的采样方法,利用数据的类簇信息来指导过采样/欠采样操作;经常用到的数据扩充方法也是一种过采样,对少数类样本进行一些噪声扰动或变换(如圄像数据集中对圄片进行裁剪、翻转、旋转、加光照等)以构造出新的样本;而Hard Negative Mining 则是一种欠采样,把比较难的样本抽出来用于迭代分类器。
四、数据集分布是否一致?
训练集 vs 验证集 vs 测试集
6.1数据一致性分析
1、数据可视化、统计方法......
1.KDE(核密度估计)分布图
核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,通过核密度估计图可以比较直观的看出数据样本本身的分布特征。
seaborn中的kdeplot可用于对单变量和双变量进行核密度估计并可视化。
2.KS检验(Kolmogorov-Smirnov)
KS检验是基于累计分布函数,用于检验一个分布是否符合某种理论分布或比较两个经验分布是否有显著差异。两样本K-S检验由于对两样本的经验分布函数的位置和形状参数的差异都敏感,所以成为比较两样本的最有用且最常用的非参数方法之一。
可以使用scipy.stats 库中的ks_2samp,进行KS检验。
2、Adversarial Validation(对抗验证)
具体做法:
- 将训练集、测试集合并成一个数据集,新增一个标签列,训练集的样本标记为 0 ,测试集的样本标记为 1 。
- 重新划分一个新的train_set和test_set(区别于原本的训练集和测试集)。
- 用train_set训练一个二分类模型,可以使用 LR、RF、XGBoost、 LightGBM等等,以AUC作为模型指标。
- 如果AUC在0.5左右,说明模型无法区分原训练集和测试集,也即两者分布一致。如果AUC比较大,说明原训练集和测试集差异较大,分布不一致。
- 利用第 2 步中的分类器模型,对原始的训练集进行打分预测,并将样本按照模型分从大到小排序,模型分越大,说明与测试集越接近,那么取训练集中的 TOP N 的样本作为目标任务的验证集,这样即可将原始的样本进行拆分得到训练集,验证集,测试集。
笔试题:
1、在相同样本量下,不重复抽样和重复抽样的抽样平均误差大小关系是怎样的?重复抽样误差大
2、simple random sampling简单随机抽样、systematic sampling系统抽样和stratified sampling分层抽样的共同特点是(抽样过程中每个个体被抽到的可能性相等、都是不放回抽样)
3、给定n个数据点,如果其中一半用于训练,一半用于测试,则训练误差与测试误差之间的差别会随着n 的增加而减少。