机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样

一、图像数据不足时的处理方法

1.在图像分类任务中,训练数据不足会带来什么问题?如何缓解数据量不足带来的问题?

图像分类任务上,训练数据不足带来的问题主要表现在过拟合方面,即模型在训练样本上的效果可能不错,但在测试集上的泛化效果不佳

对应的处理方法大致也可以分两类,一是基于模型的方法,主要是采用降低过拟合风险的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则顶)、集成学习、Dropout 超参数等;二是墓于数据的方法, 主要通过数据扩充( Data Augmentation ),即根据一些先验知识,在保持特定信息的前提下;对原始数据进行适当变换以达到扩充数据集的效果。具体到图像分类任务中,在保持圄像类别不变的前提下,可以对训练集中的每幅圄像进行以下变换。

  1. 一定程度内的随机旋转、平移、缩版、裁剪、填充、左右翻转等,这些变换对应着同一个目标在不同角度的观察结果。
  2. 对图像中的像素添加躁声扰动。
  3. 颜色变换
  4. 改变图像的亮度、清晰度、对比度、锐度等。

除了直接在图像空间进行变换,还可以先对图像进行特征提取,然后在图像的特征空间内进行变换,利用一些通用的数据扩充或上采样技术,例如SMOTE ( Synthetic Minority Over” sampling Technique )算法。抛开上述这些启发式的变换方法,使用生成模型也可以合成一些新样本,例如当今非常流行的生成式对抗网络模型。

此外,借助已有的其他模型或数据来进行迁移学习在深度学习中也十分常见。例如,对于大部分图像分类任务,并不需要从头开始训练模型,而是借用一个在大规模数据集上预训练好的通用模型,并在针对目标任务的小数据集上进行微调( fine-tune ) , 这种微调操作就可以看成是一种简单的迁移学习。

二、检验方法

1.KS检验

Kolmogorov-Smirnov检验是基于累计分布函数的,用于检验一个分布是否符合某种理论分布或比较两个经验分布是否有显著差异。

  • 单样本K-S检验是用来检验一个数据的观测经验分布是否符合已知的理论分布。
  • 两样本K-S检验由于对两样本的经验分布函数的位置和形状参数的差异都敏感,所以成为比较两样本的最有用且最常用的非参数方法之一。

检验统计量为:


1698844249874.png

其中 Fn(x) 为观察序列值, F(x) 为理论序列值或另一观察序列值。

2.T检验

T检验,也称student t检验,主要用户样本含量较小,总体标准差未知的正态分布。

t检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。

t检验分为单总体检验和双总体检验。

3.F检验

T检验和F检验的由来:为了确定从样本中的统计结果推论到总体时所犯错的概率。F检验又叫做联合假设检验,也称方差比率检验、方差齐性检验。是由英国统计学家Fisher提出。通过比较两组数据的方差,以确定他们的精密度是否有显著性差异。

4.Grubbs检验

一组测量数据中,如果个别数据偏离平均值很远,那么称这个数据为“可疑值”。用格拉布斯法判断,能将“可疑值”从测量数据中剔除。

5.卡方检验

卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。

  1. 提出原假设H0:总体X的分布函数F(x);
  2. 将总体x的取值范围分成k个互不相交的小区间A1-Ak;
  3. 把落入第i个区间Ai的样本的个数记做fi,成为组频数,f1+f2+f3+...+fk = n;
  4. 当H0为真时,根据假设的总体理论分布,可算出总体X的值落入第i个小区间Ai的概率pi,于是n*pi就是落入第i个小区间Ai的样本值的理论频数;
  5. 当H0为真时,n次试验中样本落入第i个小区间Ai的频率fi/n与概率pi应该很接近。基于这种思想,皮尔逊引入检测统计量:

1698844283510.png

在H0假设成立的情况下服从自由度为k-1的卡方分布。

KS检验与卡方检验

相同点:都采用实际频数和期望频数只差进行检验

不同点:

  • 卡方检验主要用于类别数据,而KS检验主要用于有计量单位的连续和定量数据。
  • 卡方检验也可以用于定量数据,但必须先将数据分组才能获得实际的观测频数,而KS检验能直接对原始数据进行检验,所以它对数据的利用比较完整。

三、不均衡样本集的重采样

在训练二分类模型时,例如医疗诊断、网络入侵检测、信用卡反诈骗等,经常会遇到正负样本不均衡的问题。对于很多分类算法,如果直接采用不均衡的样本集来进行训练学习,会存在一些问题。例如如果正负样本比例达到1 : 99,则分类器简单地将所有样本都判为负样本就能达到99% 的正确率,显然这并不是我们想要的,我们想让分类器在正样本和负样本上都有足够的准确率和召回率。

1.对于二分类问题,当训练集中正负样本非常不均衡肘,如何处理数据以更好地训练分类模型?

对数据进行重采样,使原本不均衡的样本变得均衡。首先,记样本数大的类别为 Cmax ,样本数小的类别为 Cmin,它们对应的样本集分别为 SmaxSmin 。根据题设,有 |Smax|>>|Smin|

虽然目前有些机器学习算法会解决失衡问题,比如XGBoost,但是很多时候还是需要我们去根据业务实际情况,对数据进行采样处理。最简单的处理不均衡样本集的方法是随机采样。采样一般分为过采样( Over-sampling )和欠采样( Under-sampling )。随机过采样是从少数类样本集Smin中随机重复抽取样本(有放回)以得到更多样本;随机欠采样则相反,从多数类样本集Smax中随机选取较少的样本(有放回或无放回)。

直接的随机采样虽然可以使样本集变得均衡,但会带来一些问题,比如,过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练的复杂度, 同时也容易造成过拟合;欠采样会丢弃一些样本,可能会损失部分有用信息,造成模型只学到了整体模式的一部分。

为了解决上述问题,通常在过采样时并不是简单地复制样本,而是采用一些方法生成新的样本。例如, SMOTE 算法对少数类样本集 Smin 中每个样本x ,从它在Smin中的K近邻(k值需要提前指定)中随机选一个样本y ,然后在x,y连线上随机选取一点作为新合成的样本(根据需要的过采样倍率重复上述过程若干次),如图所示。这种合成新样本的过采样方法可以降低过拟合的风险。

1698844295484.jpg

SMOTE 算法为每个少数类样本合成相同数量的新样本,这可能会增大类间重量度(如果选取的少数类样本周围都是多数类样本,这类的样本可能是噪音,则新合成的样本会与周围的多数类样本产生大部分重叠,致使分类困难),并且会生成一些不能提供有益信息的样本。为此出现Borderline-SMOTE 、ADASYN 等改进算法。Borderline - SMOTE只给那些处在分类边界上的少数类样本合成新样本,而ADASYN则给不同的少数类样本合成不同个数的新样本。此外,还可以采用一些数据清理方法(如基于Tomek Links )来进一步降低合成样本带来的类间重量,以得到更加良定义( well-defined )的类簇,从而更好地训练分类器。

同样地,对于欠采样,可以采用Infomed Undersampling 来解决由于随机欠采样带来的数据丢失问题。常见的Informed Undersampling 算法有:

  1. Easy Ensemble 算法。每次从多数类 Smax 中上随机抽取一个子集E( |E|≈|Smin| ),然后用 |E|+Smin 训练一个分类器;重复上述过程若干次,得到多个分类器,最终的分类结果是这多个分类器结果的融合。
  2. Balance Cascade 算法。级联结构,在每一级中从多数类Smax中随机抽取子集E,用 E+Smin 训练该集的分类器;然后将 Smax 中能够被当前分类器正确判别的样本剔除掉,继续下一级的操作,重复若干次得到级联结构;最终的输出结果也是各级分类器结果的融合。
  3. 其他诸如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(对抗验证)

1698844310946.jpg

具体做法:

  1. 将训练集、测试集合并成一个数据集,新增一个标签列,训练集的样本标记为 0 ,测试集的样本标记为 1 。
  2. 重新划分一个新的train_set和test_set(区别于原本的训练集和测试集)。
  3. 用train_set训练一个二分类模型,可以使用 LR、RF、XGBoost、 LightGBM等等,以AUC作为模型指标。
  4. 如果AUC在0.5左右,说明模型无法区分原训练集和测试集,也即两者分布一致。如果AUC比较大,说明原训练集和测试集差异较大,分布不一致。
  5. 利用第 2 步中的分类器模型,对原始的训练集进行打分预测,并将样本按照模型分从大到小排序,模型分越大,说明与测试集越接近,那么取训练集中的 TOP N 的样本作为目标任务的验证集,这样即可将原始的样本进行拆分得到训练集,验证集,测试集。

笔试题:

1、在相同样本量下,不重复抽样和重复抽样的抽样平均误差大小关系是怎样的?重复抽样误差大

2、simple random sampling简单随机抽样、systematic sampling系统抽样和stratified sampling分层抽样的共同特点是(抽样过程中每个个体被抽到的可能性相等、都是不放回抽样)

3、给定n个数据点,如果其中一半用于训练,一半用于测试,则训练误差与测试误差之间的差别会随着n 的增加而减少。

相关文章
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
模型训练数据-MinerU一款Pdf转Markdown软件
MinerU是由上海人工智能实验室OpenDataLab团队开发的开源智能数据提取工具,专长于复杂PDF文档的高效解析与提取。它能够将含有图片、公式、表格等多模态内容的PDF文档转化为Markdown格式,同时支持从网页和电子书中提取内容,显著提升了AI语料准备的效率。MinerU具备高精度的PDF模型解析工具链,能自动识别乱码,保留文档结构,并将公式转换为LaTeX格式,广泛适用于学术、财务、法律等领域。
120 4
|
2天前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
1月前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
34 2
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
134 4
|
2月前
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
75 3
|
2月前
|
机器学习/深度学习 算法 Python
“探秘机器学习的幕后英雄:梯度下降——如何在数据的海洋中寻找那枚失落的钥匙?”
【10月更文挑战第11天】梯度下降是机器学习和深度学习中的核心优化算法,用于最小化损失函数,找到最优参数。通过计算损失函数的梯度,算法沿着负梯度方向更新参数,逐步逼近最小值。常见的变种包括批量梯度下降、随机梯度下降和小批量梯度下降,各有优缺点。示例代码展示了如何用Python和NumPy实现简单的线性回归模型训练。掌握梯度下降有助于深入理解模型优化机制。
40 2
|
2月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
42 0
|
1月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
99 4
|
9天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
25 2
|
27天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
44 1