论文阅读-2-DeepSMOTE Fusing Deep Learning and SMOTE for Imbalanced Data
文章目录
- Abstract
- 1. Introduction
- 2. Learning From Imbalanced Data
- 1. 数据级
- 2. 算法级
- 3. 集成方法
- 3. Deep Learning From Imbalanced Data
- 基于深度神经网络的实例生成
- 损失函数适应
- 长尾识别
- 4. DeepSMOTE
- A. 动机
- B. 描述
- C. encoder-decoder框架
- D. 增强的损失函数
- E. 人工图像生成
- 5. Experimental Study
- A. Setup
- 1. 数据集概述
- 2. 类不平衡
- 3. 参考重采样方法
- 4. 分类模型
- 5. 性能度量
- 6. 测试程序
- 7. 结果的统计分析
- 8. DeepSMOTE实现细节
- B. 实验1:与现有技术水平的比较
- 1. 人工实例的放置:
- 2. 与基于像素的过采样方法的比较:
- 3. 与基于gan的过采样的比较:
- 4. 对模式崩溃的鲁棒性
- 5. 测试集分布的影响
- C. 实验2:人工生成的图像的质量
- 1. 由DeepSMOTE生成的图像质量
- 2. 对DeepSMOTE图像生成的见解
- D. 实验3:不同不平衡比条件下的鲁棒性和稳定性
- 1. 对不同不平衡比率的稳健性
- 2. 不同不平衡比条件下的模型稳定性:
- 6. Discussion
- 7. Conclusion
- **总结**
- **展望**
参考 2-SMOTE算法
Abstract
尽管经过了20多年的进步,不平衡的数据仍然被认为是当代机器学习模型面临的一个重大挑战。深度学习的现代进步进一步放大了不平衡数据问题的重要性,特别是在从图像中学习时。因此,需要一种专门针对深度学习模型的过采样方法,可以在保留原始图像属性的同时处理原始图像,并且能够生成高质量的人工图像,可以增强少数类和平衡训练集。
我们提出了深度合成少数过采样技术(SMOTE),一种新的深度学习模型的过采样算法,利用了成功的打击算法的特性。它很简单,但在设计上却很有效。它由三个主要部分组成:
1)编码器/解码器框架;
2)基于SMOTE的过采样;
3)是一个专用的损失函数,它通过一个惩罚项进行了增强。
与基于生成对抗网络(GAN)的过采样相比,DeepSMOTE的一个重要优势是DeepSMOTE不需要鉴别器,它生成的高质量的人工图像,既信息丰富,又适合视觉检查。DeepSMOTE代码可以在https://github.com/dd1github/DeepSMOTE上公开获得。
1. Introduction
从不平衡的数据中学习是机器学习社区[1]所面临的最关键的问题之一。不平衡的类分布影响了分类器的训练过程,导致了对大多数类(es)的不利偏差。这可能导致高错误,甚至完全遗漏,少数类(es)。这种情况在大多数现实应用中都不能在(例如,医学或入侵检测)中被接受,因此对抗类不平衡问题的算法一直是20多年来[2]研究的焦点。当代的应用程序扩展了我们对数据不平衡问题的看法,证实了不平衡的类
并不是学习问题的唯一来源。倾斜的类不平衡比率往往伴随着其他因素,如困难和边界实例,小的间断,小样本量[2],或流媒体数据的漂移性质,[3],[4]
。这些不断出现的挑战使该领域不断扩大,需要找到新而有效的解决方案,可以分析、理解和解决这些数据级的困难。
深度学习目前被认为是机器学习中最有前途的分支,能够实现卓越的认知和识别潜力。然而,尽管其强大的功能,深架构仍然非常容易受到不平衡数据分布[5],[6]和受到新的挑战如复杂的数据表示[7],不平衡数据之间的关系和提取嵌入[8],数据[9]的不断漂移性质,从大量的类[10]学习。
A. 研究目标:提出一种新的过采样方法
,专门针对深度学习模型,利用合成少数过采样技术的优势[11],而嵌入在一个深度架构能够有效地操作复杂的数据表示,如图像。
B. 动机:尽管不平衡数据问题强烈地影响了深度学习模型[12]和浅层模型,但在深度学习领域如何应对这一挑战的研究有限。在过去,克服这一挑战的两个主要方向是损失函数修改
和重采样
方法。深度学习重采样方案要么是基于像素的,要么是使用生成式对抗网络(GANs)进行人工实例生成
。这两种方法都有很强的局限性。基于像素的解决方案通常不能捕获图像的复杂数据属性,也不能生成有意义的人工图像。基于GAN的解决方案需要大量的数据,难以调优,并可能出现模式崩溃[13]-[16]。因此,需要一种新颖的过采样方法,专门针对深度学习模型的本质,可以在原始图像,同时保留他们的属性,并能够生成人工图像的高视觉质量和丰富深度模型的鉴别能力。
C. 概要:我们提出了一种新的DeepSMOTE,一种基于高度流行的深度学习模型的过采样算法。我们的方法结合了"基于度量的重采样方法"
的优点:使用数据特性利用他们的性能,使用一个能够处理复杂和高维数据的深度架构。
三个主要组成:1)编码器/解码器框架;2)基于SMOTE的过采样;3)专用损失函数增强。这种方法允许我们将基于SMOTE生成的有效人工实例嵌入到一个深度编码器/解码器模型中
,用于流线型和端到端过程,包括低维嵌入、人工图像生成和多类(MC)分类。
D. 主要贡献:为了使过采样方法成功地应用于深度学习模型,它应该满足三个基本标准: 1)以端到端方式操作;2)学习原始数据的表示,并将数据嵌入低维特征空间;3)很容易生成可以视觉检查的输出(如图像)
。提出了满足这三个标准的DeepSMOTE,并为类不平衡下的深度学习领域提供了以下科学贡献:1)深度过采样体系结构:我们引入了DeepSMOTE,这是一种用于过采样和人工实例生成
的自包含深度架构,允许高效处理复杂不平衡的高维数据,如图像。2)简单有效的解决类不平衡:我们的框架简单,但设计有效。它只包括三个主要组件,分别负责原始数据的低维表示、重采样和分类
。3)在训练过程中不需要鉴别器:与基于GAN的过采样相比,DeepSMOTE的过采样的一个重要优势在于,在人工实例生成过程中,DeepSMOTE不需要鉴别器。我们提出了一个惩罚函数
,以确保有效地使用训练数据来初始化生成器。4)高质量的图像生成:DeepSMOTE生成高质量的人工图像,既适合视觉检查(它们与真实对应图像的质量相同),又信息丰富,允许类的有效平衡,减轻了不平衡分布的影响。5)广泛的实验研究:我们提出了一个精心设计和彻底的实验研究,将DeepSMOTE与最先进的过采样和基于GAN方法进行比较
。在两种不同的测试协议上,我们使用5个流行的图像基准测试和3个专用的不平衡不敏感度量,通过经验证明了DeepSMOTE相对于参考算法的优点。此外,我们还证明了DeepSMOTE对不断增加的不平衡比率表现出了极好的鲁棒性,能够有效地处理即使是极端倾斜的问题。
E.文章大纲: 在本文中,我们首先概述了不平衡的数据问题和被用来解决这个问题的传统方法。接下来,我们将讨论如何使用深度学习方法来生成数据和增强不平衡的数据集。然后,我们介绍了我们的不平衡学习的方法,它结合了深度学习和打击。最后,我们讨论了我们广泛的实验,它验证了Deep SMOTE的好处。
2. Learning From Imbalanced Data
关于不平衡数据的第一个工作来自于二元分类问题。这里假设存在多数类和少数类,具有特定的不平衡比例。这种倾斜的类分布对机器学习模型提出了挑战,因为标准分类器是由一个0-1损失函数驱动的,该函数假设对两个类都有统一的惩罚。因此,任何由这个功能驱动的学习过程都会导致对大多数类的偏向
。与此同时,少数类通常更重要,因此不能得到不充分的认识。因此,致力于克服不平衡问题的方法旨在减轻类的倾斜或交替的学习过程。这三种主要的方法如下。
1. 数据级
这个解决方案应该被视为一个独立于分类器的预处理阶段。在这里,我们专注于在应用任何分类器训练之前平衡数据集。这通常通过三种方式之一实现:1)减少多数类的大小(欠采样);2)增加少数类的规模(过采样);或3)前两种解决方案的组合(混合方法)。欠采样和过采样都可以以随机的方式执行,这种方式的复杂度较低,但会导致潜在的不稳定行为(例如,删除重要实例或增强噪声实例)。因此,有人提出了指导解决方案,试图明智地选择实例进行预处理。虽然针对引导欠采样[17]-[19]的解决方案并不多,但由于渗透[11]的成功,过采样得到了更多的关注,这导致了[20]-[24]的引入。然而,最近的研究表明,基于SMOTE的方法不能正确地处理多模态数据和具有高类内重叠或噪声的情况。因此,不依赖于k-近邻的全新方法已经成功地开发出了[25],[26]。
2. 算法级
与前面讨论的方法相反,算法级解决方案直接在所考虑的分类器的训练过程中工作。因此,它们缺乏数据级方法所提供的灵活性,但用一种更直接和更强大的方法来减少学习算法的偏差。他们还需要深入了解一个给定的训练程序是如何进行的,以及它的哪些特定部分可能会导致对大多数阶层的偏见。该算法方法最常解决的问题是为决策树[27]-[29]开发新的倾斜不敏感分割标准,对支持向量机[30]-[32]使用实例加权,或在深度学习[33]-[35]中修改不同层的训练方式。此外,成本敏感的方案[36]-[38]和单类分类[39]-[41]也可以被认为是一种算法级方法的形式。
3. 集成方法
管理不平衡数据的第三种方法是使用集成学习[42]。在这里,我们要么将流行的集成体系结构(通常基于绑定或增强)与前面讨论的两种方法中的一种结合起来,要么开发一个全新的集成体系结构,在自己的[43]上倾斜不敏感。最成功的方法之一是将绑定与欠采样[44]-[46]结合,增强任何重采样技术[47]-[49],或使用多个分类器[50]-[52]进行成本敏感学习。数据级技术可以用于管理集成[53]的多样性,这是多重分类器系统预测能力背后的一个关键因素。此外,为了管理分类器的个体准确性和消除较弱的学习者,可以使用动态分类器选择[54]和动态集成选择[55],这确保最终决策将仅基于池[56]中最有能力的分类器。
3. Deep Learning From Imbalanced Data
由于数据不平衡问题越来越受到深度学习研究的关注,让我们讨论这一领域的三个主要趋势。
基于深度神经网络的实例生成
最近将深度学习与浅层过采样方法相结合的工作并没有给出理想的结果,而传统的重采样方法也不能有效地增强深度模型[2],[57]的训练集。这导致了对生成模型的兴趣,并将其以类似于过采样技术[58]的方式工作。编码器/解码器组合可以有效地将人工实例引入到给定的嵌入空间[59]中。GANs[60]、变分自动编码器(VAEs)[61]和瓦瑟斯坦自动编码器(WAEs)[62]已成功应用于计算机视觉(CV)[63]、[64]和机器人控制[65]、[66],以学习数据的潜在分布。这些技术还可以扩展到过采样(例如,医学成像)[67]的数据生成。
VAEs通过最大化数据对数似然值[68],[69]的变分下界来运作。VAE中的损失函数通常是通过将重建损失与库尔贝克-莱布勒(KL)散度相结合来实现的。KL散度可以解释为对重构损失的隐性惩罚。通过惩罚重建损失,该模型可以学习改变其对数据分布的重建,从而基于输入的潜在分布生成输出(如图像)。
WAEs也表现出生成的特点。与VAE类似,WAE的损失函数通常是通过将重构损失和惩罚项相结合来实现的。在WAE的情况下,惩罚项表示为鉴别器网络的输出。
GANs在计算机视觉领域、[70],[71].等领域取得了令人印象深刻的成果。GANs将图像生成表示为生成器和鉴别器网络[72]之间的最小-最大博弈。尽管它们的结果令人印象深刻,但GANs需要使用两个网络,有时很难训练,并且容易出现模式崩溃(即重复生成类似的例子)[13]-[16]。
损失函数适应
使神经网络倾斜不敏感的最流行的方法之一是修改它们的损失函数。这种方法成功地延续到了深度架构中,可以被视为一种算法级的修改。修改损失函数背后的想法是基于这样的假设,即实例在训练过程中不应该被统一处理,并且少数类上的错误应该受到更大的惩罚,使其与成本敏感的学习[38]平行。平均假误差[73]和焦点损失[74]是基于这一原理的最流行的两种方法。前者只是平衡了来自少数类和多数类的实例的影响,而后者则减少了简单的实例对损失函数的影响。最近,还提出了多个其他损失函数,如对数双线性损失[75]、交叉熵损失[76]和类平衡损失[77]
长尾识别
这个深度学习的子领域是从一些问题演变而来的,尽管这些问题的样本量很低,但它们仍然应该得到适当的识别。因此,长尾识别可以被视为MC不平衡问题的一个极端情况,其中我们处理非常多的类(数百个)和极高的不平衡比率。由于类的大小非常不成比例,直接重采样是不可取的,因为它要么会显著减少大多数类的大小,要么需要创建太多的人工实例。此外,分类器需要处理样本量小的问题,这使得从尾部类中学习非常具有挑战性。需要注意的是,这个领域中的大多数工作都假设测试集是平衡的。这个问题非常有趣的解决方案是基于深度神经网络中损失函数的自适应,如均衡损失[78]、无轮毂损失[79]和范围损失[80]。最近的研究建议仔细研究类分布,并将它们分解为平衡集——这是传统的不平衡分类中流行的一种方法。Zhou等人[81]提出了一种从全局数据属性到基于类的特征的累积学习方案。Sharma等人。[82]建议使用一个由三个分类器组成的小集成,每个分类器专注于类的大多数、中间或尾部组。元学习也通常用于改进尾类[83]的分布估计。
4. DeepSMOTE
A. 动机
我们提出了DeepSMOTE,一种新的和突破性的过采样算法,致力于增强深度学习模型和对抗不平衡类造成的学习偏差。如上所述,过采样是一种已被证明的对抗类不平衡的技术;然而,它传统上被用于经典的机器学习模型。人们已经尝试将过采样方法,如SMOTE扩展到深度学习模型,尽管结果是混合的[84]-[86]。为了使过采样方法成功地应用于深度学习模型,我们认为它应该满足三个基本标准。
1)它应该通过接受原始输入来以端到端方式操作,例如图像(即,类似于VAEs、WAEs和GANs)。2)学习原始数据的表示,并将数据嵌入低维特征空间,用于过采样。3)它应该很容易地生成输出(例如,图像),可以被视觉检查,而不需要广泛的操作。
B. 描述
DeepSMOTE由一个编码器/解码器框架、一个基于SMOTE的过采样方法和一个具有重构损失和惩罚项的损失函数组成。下面将讨论这些特征,图1
描述了DeepSMOTE方法的流程,而算法1
中给出了DeepSMOTE方法的伪代码概述。
图1:DeepSMOTE实现的说明。编码器/解码器结构的训练与不平衡的数据和重建和惩罚损失。在训练过程中,对数据进行采样、编码,并在解码前对例子的顺序进行排列。然后将训练好的编码器和解码器与SMOTE结合,产生过采样数据。
C. encoder-decoder框架
DeepSMOTE主干是基于已建立的深度卷积GAN(DCGAN)体系结构[87]。Radford等人[87]在GAN中使用了鉴别器/生成器,这从根本上类似于编码器/解码器,因为鉴别器有效地编码输入(没有最终的,完全连接的层),而生成器(解码器)产生输出。
编码器和解码器以端到端的方式进行训练。在DeepSMOTE训练过程中,一个不平衡的数据集被分批发送给编码器/解码器。根据批处理的数据计算重建损失。在训练过程中使用所有的类,以便编码器/解码器可以学习从不平衡的数据中重建多数类和少数类图像。由于少数类的例子很少,所以使用大多数类的例子训练模型,以学习数据中固有的基本重构模式。这种方法基于类共享一些相似特征的假设(eg:所有类都代表数字或面)。因此,例如,虽然数字9(少数类)与数字0(大多数类)居住在一个不同的类中,但该模型学习数字的基本轮廓。
D. 增强的损失函数
• 除了重建损失外,DeepSMOTE损失函数还包含一个惩罚项。惩罚项是基于对嵌入式图像的重建。DeepSMOTE的惩罚损失由以下方式产生。
• 在训练过程中,从所有类©的集合中随机选择一个类©然后从c中随机抽取一组样本,其数量等于批处理大小。因此,采样示例的数量与用于重建损失目的的示例的数量相同;然而,与在训练的重建损失阶段使用的图像不同,采样的图像都来自同一类。
• 通过编码器将采样后的图像简化为一个较低维的特征空间。在解码阶段,解码器不按照与编码的图像相同的顺序重建编码的图像。通过改变来自同一类的重建图像的顺序,我们有效地将方差引入到编码/解码过程中。例如,图像的编码顺序可以是D0、D1、D2,并且图像的解码顺序可以是D2、D0、D1。这种差异有助于在推理过程中生成图像(其中图像被编码、SMOTE、被解码)。
• 排列步骤是必要的,因为DeepSMOTE使用了一个自动编码器(一个编码器和一个解码器)。一个自动编码器的输出相对于它的输入是确定性的,在这个意义上,一个自动编码器只能解码或生成它所编码的内容。在一个标准的自动编码器中,被编码和解码的数据没有差异。因此,一个标准的自动编码器不能生成与输入数据不同的示例。我们的目标是在编码的特征空间中引入方差,从而使解码的例子与自动编码器的输入不同,但受到输入数据的约束。我们通过排列被编码数据的顺序,将方差引入到编码/解码过程中。因此,编码图像D0和解码图像D1之间必然存在一定的差异。差异不太可能非常大,因为D0和D1D0都来自同一个类;然而,会有些不同。这种差异就变成了惩罚项。 通过在编码过程中引入方差,解码器在不同于输入数据的解码例子中获得了“实践”(自动编码器中的标准解码器没有被训练去做)。这种“实践”是必要的,因为在推理过程中,一个例子被编码,然后它通过打击插值改变到一个不同的例子,解码器必须解码。
• 惩罚损失是基于D0和D1、D1和D2之间的均方误差(MSE)差,以此类推,就像图像被打击过采样(即,好像基于图像和图像的邻居之间的差生成图像)。这一步旨在在编码/解码过程中插入差异。因此,我们避免了对鉴别器的需要,因为我们使用训练数据来通过简单地改变编码/解码图像的顺序来训练生成器。
• SMOTE算法通过随机选择一个少数类的例子及其一个类邻居来生成合成实例。计算了该示例与其邻居之间的距离。将距离乘以一个随机百分比(即,在0到1之间),然后添加到示例实例中,以生成合成实例。我们在DeepSMOTE训练过程中通过选择一个类样本并计算实例与其邻居之间的距离(在嵌入或特征空间中)来模拟SMOTE的方法,除了训练过程中的距离(MSE)被用作重构损失的隐式惩罚。正如Arjovsky等人[16]所指出的,许多生成式深度学习模型有效地在其损失函数中加入了惩罚或噪声项,从而将多样性赋予模型分布。例如,VAEs和WAEs在其损失函数中都包含了惩罚项。我们在训练中使用排列,而不是刺激,因为它更提高记忆和计算效率。在推理阶段,使用惩罚项和SMOTE在插入合成样本时的保真度,允许我们避免使用鉴别器,这通常被GAN和WAE模型使用。
E. 人工图像生成
一旦DeepSMOTE被训练好,就可以使用编码器/解码器结构生成图像。编码器将原始输入减少到一个较低维的特征空间,这是被打击过采样。然后,解码器将SMOTED特征解码为图像,这可以增强深度学习分类器的训练集。
DeepSMOTE训练阶段和生成阶段的主要区别是,在数据生成阶段,SMOTE取代了顺序排列步骤。在数据生成过程中使用SMOTE来引入方差,而在训练过程中,方差是通过排列被编码和解码的训练例子的顺序以及通过惩罚损失来引入的。SMOTE本身不需要训练,因为它是非参数的。
5. Experimental Study
我们设计了以下实验研究,以回答以下研究问题:
RQ1:DeepSMOTE是否能够超越最先进的基于像素的过采样算法?
RQ2:DeepSMOTE能否超过用于处理复杂和不平衡的数据表示的最先进的基于gan的重采样算法?
RQ3:测试集分布对DeepSMOTE性能有什么影响?
RQ4:DeepSMOTE生成的人工图像的视觉质量如何?
RQ5:DeepSMOTE对不断增加的类不平衡比率是否稳健?
RQ6:DeepSMOTE能否在极端的类别不平衡情况下产生稳定的模型?
A. Setup
1. 数据集概述
我们选择了5个常用数据集作为评估不平衡数据过采样的基准:改进的国家标准研究和技术数据集(MNIST)[88],Fashion-MNIST数据集(FMNIST)[89],CIFAR-10[90],街景房屋号码(SVHNs)[91],和大规模的名人脸属性(CelebA)[92]。下面我们将讨论它们的细节,而它们的类分布如表I
所示。
表I:五个基准数据集的类分布
• MNIST/FMNIST:MNIST由手写数字组成,FMNISTZalando服装文章图像。这两个训练集都有6万张图像。两个数据集都包含灰度图像(1×28×28),每个图像都有10个类。
• CIFAR-10/SVHN:CIFAR-10由汽车、猫、狗、青蛙和鸟类等图像组成,而SVHN由谷歌街景图像中的房子编号的小数字组成。CIFAR-10有50 000 张训练图像。SVHN有73 257 位数字用于训练。这两个数据集都由彩色图像(3×32×32)组成,每个图像都有10个类。
• CelebA:CelebA数据集包含20万张名人图片,每张图片都有40个属性注释(即类)。该数据集中的彩色图像(3×178×218)覆盖了较大的姿态变化和背景杂波。为了本研究的目的,我们将图像的大小调整为3×32×32,并选择了5个类:黑头发、棕色头发、金色、灰色和秃头。
2. 类不平衡
通过从训练集中的每个类中随机选择样本来引入不平衡。对于MNIST和FMNIST,不平衡的例子数量为:[4000、2000、1000、750、500、350、200、100、60、40]。对于CIFAR-10和SVHN数据集,不平衡实例的数量为:[4500、2000、1000、800、600、500、400、250、150、80]。对于CelebA,不平衡的例子的数量是:[9000、4500、1000、500、160]。对于MNIST和FMNIST,各自的多数类与最小的少数类的不平衡比率为100:1;而对于CIFAR-10、SVHN和CelebA,该比例约为。56:1.在实验3中,我们在[20 400]中创建了每个数据集的20个版本。这种不平衡比率是最大和最小类之间的不比例,而所有其他不平衡比率都是根据类的数量成比例分布的。这被称为多数方法,我们有一个多数类,所有其他类都是少数类。
3. 参考重采样方法
为了评估DeepSMOTE的有效性,我们将其与目前最先进的浅层和深度重采样方法进行了比较。
- 我们选择了四种基于像素的现代过采样算法:SMOTE[11]、基于自适应的马氏距离的过采样(AMDO)[93]、组合清洗和重采样(MC-CCR)[94]和基于径向的过采样(MC-RBO)[95]。
- 我们还选择了两种性能最好的基于GAN的过采样方法:平衡GAN(BAGAN)[96]和生成式对抗性少数过采样(GAMO)[97]。BAGAN用自动编码器的解码器部分初始化其生成器,该部分在少数和多数图像上进行训练。GAMO是基于凸生成器、分类器网络和鉴别器之间的三人对抗博弈。
4. 分类模型
所有的重采样方法都使用相同的Resnet-18[98]作为它们的基本分类器。
5. 性能度量
以下度量用于评估各种模型的性能:平均类别特定精度(ACSA)、宏观平均几何平均值(GM)和宏观平均F1测度(FM)。索科洛娃和拉帕尔姆已经证明,这些措施对大多数[99]类没有偏见
6. 测试程序
采用五倍交叉验证的方法对评估方法进行训练和测试。因此,我们随机打乱每个训练集,并将训练集分成五份。然后选择每个折叠体作为一个测试组,并从剩下的组中抽取训练示例。采用了两种形成测试集的方法:不平衡测试和平衡测试。对于不平衡测试,测试示例的比例与训练集中存在的不平衡比例相同(这种方法在不平衡分类领域很常见)。对于平衡测试集,所有类的测试示例的数量近似相等(这种方法在长尾识别领域很常见)。例如,使用MNIST/FMNIST,有60 000 个例子。通过五倍交叉验证,每个分割由12 000 个示例组成,分为10个类或大约。每个类有1200个示例。
7. 结果的统计分析
为了评估DeepSMOTE是否在统计上显著优于参考重采样算法,我们使用弗里德曼检验与谢弗事后检验[100]和贝叶斯威尔克森符号秩检验[101]在多个数据集上进行统计比较。两种检验均采用了0.05的统计学显著性水平。
8. DeepSMOTE实现细节
如上所述,为了实现DeepSMOTE,我们使用了Radford等人[87]开发的DCGAN架构,并进行了一些修改。编码器结构由四个卷积层组成,然后是批处理归一化[102]和LeakyReLu激活函数[103]。每一层由具有指定的内核大小(K)和步幅(S)的卷积通道©组成。对于所有的数据集,卷积层都有以下参数:C=[64,128,256,512],K=[4,4,4,4],和S=[2,2,2,2]。最后一层是一个致密层,MNIST和FMNIST的潜在维度为300,CIFAR-10、SVHN和CelebA数据集的潜在维度为600。解码器结构由镜像卷积转置层组成,它使用批归一化和整流线性单元(ReLU)激活函数[104],除了最后一层使用Tanh。我们对模型进行了50-350个时期的训练,这取决于训练损失何时达到稳定状态。我们使用Adam优化器[105],学习率为0.0002。我们在PyTorch中使用NVIDIA GTX-2080GPU实现了DeepSMOTE。
B. 实验1:与现有技术水平的比较
1. 人工实例的放置:
基于人工实例生成的过采样算法的关键要素之一在于它们放置实例在特征空间中的位置。随机定位是远远不可取的,因为我们想要保持少数类的原始属性,并在不确定/困难的区域增强它们。这些区域大多是类边界、重叠区域和小的间断区域。因此,最好的过采样方法侧重于实例的智能放置,不仅能平衡类分布,而且还能降低学习难度。
图2:使用PCA和t-SNE说明MNIST实例在类中的分布。在应用t-SNE之前,首先使用PCA减少高维图像,其中X轴和y轴表示t-SNE分量。(a)原始不平衡训练集分布。(b)使用BAGAN进行均衡分配。(c)与GAMO平衡分配。(d)使用DeepSMOTE实现均衡分布。(a)数据不平衡。(b)巴根。(c)GAMO(d)DeepSMOTE。
图2
描述了一个不平衡的MNIST数据集的二维投影,以及使用BAGAN、GAMO和DeepSMOTE进行过采样后的类分布。在图2
中,我们采用主成分分析(PCA)对过采样数据集进行降维,然后采用t-分布随机邻域嵌入(t-SNE),以更好地可视化数据实例分布[106]。
我们可以注意到,BAGAN和GAMO都专注于独立地饱和每个类的分布,在每个类的主分布中生成一个绝对数量的人工实例。这种方法平衡了训练数据,可能有助于一些基于密度的分类器。然而,BAGAN和GAMO都没有关注以定向的方式引入人工实例来增强类边界,也没有提高在过采样数据上训练的分类器的识别能力。
DeepSMOTE将由类几何控制的过采样与我们的惩罚函数相结合,引入实例,以降低少数类的错误概率。我们假设这可以更好地放置人工实例,并结果在实验比较中看到,更准确的分类。
2. 与基于像素的过采样方法的比较:
第一组参考算法是四种最先进的过采样方法。表II和表III显示了它们三个指标和两种测试集分布类型的结果。
清楚地看到,基于像素的过采样不如基于gan的算法和DeepSMOTE。这使得我们可以得出结论,在处理复杂和不平衡的图像时,基于像素的过采样不是一个好的选择。不出所料,标准SMOTE在所有被评估的算法中表现最差,而其他三种方法试图抵消它们无法用高级实例生成模块处理数据的空间属性的能力。MC-CCR和MC-RBO都返回了所有四种测试算法的最佳结果,而MC-RBO则接近于基于gan的方法。这可以归因于它们的复合过采样解决方案,它分析实例的难度并优化新实例的放置,同时清理重叠区域。然而,这是以非常高的计算复杂度和具有挑战性的参数调整为代价的。
与基于像素的方法相比,DeepSMOTE返回了更好的平衡训练集,同时提供了一个直观和易于调优的架构,并且根据表4
中提供的非参数和贝叶斯检验,在统计上优于所有基于像素的方法(RQ1回答)。
3. 与基于gan的过采样的比较:
表II和表III显示,无论使用何种度量,DeepSMOTE在除两种情况外的所有情况下都优于基于gan的基线模型。这两种情况都发生在F1测量和不同的模型上(BAGAN在CELEBA上显示的F1值略高,而在CIFAR上显示的是GAMO)。值得注意的是,对于相同的基准测试,DeepSMOTE提供了比任何这些参考算法都更高的ACSA和GM值,这允许我们得出结论,F1级的性能变化并不能反映DeepSMOTE如何处理少数类。
我们假设DeepSMOTE的成功可以归因于更好地放置人工实例和增强不确定性区域。因为过采样是由我们的惩罚损失函数驱动的。DeepSMOTE具有增强决策边界的潜力,有效地减少了分类器对大多数类的偏差。由于DeepSMOTE是由选择和放置人工实例的基于SMOTE的方法驱动的,我们确保少数类是由具有高鉴别质量的不同训练数据组成的丰富。表4
显示,DeepSMOTE显著的方式上优于所有基于gan的方法(RQ2回答)。这也带来了直接生成更高质量的人工图像的额外好处(这将在下面的实验中讨论)。
我们注意到,CIFAR-10数据集是深度过采样算法中最具挑战性的基准测试。我们假设,与其他数据集相比,这些模型在CIFAR-10上没有表现出较高的准确性的原因是因为CIFAR-10类没有类似的属性。例如,在MNIST和SVHN中,所有的类都是数字的实例,在CelebA中,所有的类都代表脸;而在CIFAR-10中,类是多样的(例如,猫、狗、飞机、青蛙)。因此,模型不能利用它们从多数类(有更多的示例)学习到的信息影响到少数类(包含更少的示例)。此外,我们还注意到,在某些情况下,CIFAR-10类特征似乎有显著的重叠。
4. 对模式崩溃的鲁棒性
DeepSMOTE并不具有基于gan的过采样的一些局限性,比如模式崩溃。。一个广泛用于确定生成图像质量和测量模式崩溃的指标是Frechet初始距离(FID) [107]。
FID基于初始网络中的特征激活[108]来计算分数评估真实图像和生成图像的分布之间的距离。较低的分数或真实图像和生成图像之间的距离表示更真实的图像。
因此,在样本基础上,我们选择了训练图像(真实)和由DeepSMOTE、BAGAN和GAMO生成的图像用于CelebA数据集中的少数类(类别=bald)。我们计算了每个模型的FID分数,并注意到DeepSMOTE的FID分数(48.88)大大低于GAMO (213.66)和BAGAN (256.88)。
5. 测试集分布的影响
第一个实验的最后一部分集中于评估类分布在测试集中的作用。在不平衡数据学习领域,测试集遵循训练集的分布,以反映实际的类不比例[1]。这也影响了几个成本敏感方法的计算,这些方法更严重地惩罚少数类[2]的错误。然而,最近出现的长尾识别领域遵循了一个不同的测试协议[78]。在这种极端MC不平衡的情况下,训练集是倾斜的,但大多数基准测试的测试集是平衡的。由于DeepSMOTE的目标是成为一种处理不平衡数据预处理和重采样的通用方法,我们评估了它在这两种场景下的性能。
表2:DeepSMOTE实现的说明。编码器/解码器结构的训练与不平衡的数据和重建和惩罚损失。在训练过程中,对数据进行采样、编码,并在解码前对例子的顺序进行排列。然后将训练好的编码器和解码器与SMOTE结合,产生过采样数据。
表2
报告了传统的不平衡设置的结果,而表3
反映了长尾识别设置。我们可以看到DeepSMOTE在这两种情况下都很出色,这证实了我们之前关于基于像素和基于gan的方法的观察。
有趣的是,对于长尾设置,DeepSMOTE在CIFAR10和CelebA数据集上返回了稍微更好的F1性能。这可以用F1度量的计算方式来解释,因为它对精度和召回率同等重要。当处理平衡测试集时,DeepSMOTE能够在这两个指标上返回更好的性能。对于所有其他度量和数据集,DeepSMOTE显示了不平衡和不平衡测试集的类似趋势。这使得我们可以得出结论,DeepSMOTE是对不平衡和长尾识别场景的一个合适和有效的解决方案(RQ3回答)。
C. 实验2:人工生成的图像的质量
1. 由DeepSMOTE生成的图像质量
图3-7
展示了由BAGAN、GAMO和DeepSMOTE为所有五个基准数据集人工生成的图像。
我们可以看到由DeepSMOTE生成的图像的质量。这可以归因于DeepSMOTE使用了一种具有增强损失函数的高效编码/解码架构,以及通过基于度量的实例计算来保留类拓扑。我们注意到,在GAMO的情况下,我们提供了用于分类目的的图像,而不是由GAMO2PIX方法生成的图像,以便提供了GAMO训练图像与BAGAN和DeepSMOTE生成的训练图像的直接比较。这两个实验的结果都表明,DeepSMOTE生成的人工图像既信息丰富(即,它们提高了深度分类器的鉴别能力,它们对抗了大多数偏差),又具有高视觉质量(RQ4回答)。
2. 对DeepSMOTE图像生成的见解
图8
描述了通过将基本图像与其最近的邻居图像结合起来生成新的人工图像的过程。每幅图像影响组合过程的比率由SMOTE算法的比例因子随机确定(该算法根据新的人工图像与基础图像和相邻图像的相似程度得出0-1的值)
由于DeepSMOTE在图像的编码域上进行操作,因此新的人工图像是由目标图像及其最近邻的图像组合生成的
在图8中,我们可以看到不同的比例因子值如何导致不同类型的输出图像——有些更类似于基本图像,有些更类似于最近邻图像,以及一些具有两种图像的独特特征。我们假设,这种生成图像的多样性可能是导致DeepSMOTE出色性能的原因。为了获得最佳的人工丰富和多样化的数据集,在未来研究一种直接控制尺度因子的直接方法似乎是值得的。
D. 实验3:不同不平衡比条件下的鲁棒性和稳定性
1. 对不同不平衡比率的稳健性
从不平衡的数据中学习的最具挑战性的方面之一是创建能够解决多种数据级问题的鲁棒算法。许多现有的重采样方法只有在特定条件下或在有限的不平衡比范围下才能得到很好的结果。因此,为了全方面了解DeepSMOTE性能,我们分析了它的不平衡比在[20,400]范围内的鲁棒性。
图9
描述了这三个性能指标与所使用的五个基准测试上不断增加的不平衡比率之间的关系。该实验不仅允许我们评估DeepSMOTE和各种倾斜场景下的参考方法,而且还提供了每种重采样方法显示的性能曲线特征。
理想的重采样算法的特征应该是对增加的不平衡比率具有高鲁棒性,显示稳定,或者随着类不平衡的增加性能下降很小。急剧和显著的性能下降表明了重采样方法的临界点,并显示了一个给定的算法何时停止能够生成有用的实例和对抗类的不平衡。
通过分析图9
,我们可以得出几个有趣的结论。首先,实验1表明,基于像素的解决方案不如基于gan的解决方案。然而,我们可以看到,这种观察结果并不适用于不平衡比率的极端值。当类之间的不占比例增加时,基于像素的方法(特别是MC-CCR和MC-RBO)开始显示出更强的鲁棒性。相反,这两种基于gan的方法对增加的不平衡比率更为敏感,我们可以观察到它们的预测能力下降得更快。这可以用两个因素来解释:重采样方法使用原始实例的方法和样本量小的问题。前一个因素显示了基于gan的方法的局限性。虽然它们专注于实例生成和创建高质量的图像,但它们并没有更复杂的机制来精确地注入新的人工实例。随着较高的不平衡比率,这部分开始发挥至关重要的作用,因为分类器需要处理越来越困难的偏差。目前基于gan的模型对这个问题使用了相对简单的机制。相反,基于像素的方法依赖于更复杂的机制(例如,MC-CCR使用基于能量的函数,而MC-RBO使用局部优化来定位它们的人工实例)。随着不平衡比率的增加,这种机制开始主导更简单的基于gan的解决方案,使基于像素的方法对极端的不平衡比率更健壮。下一个因素小样本量也强烈影响基于GAN的算法。在极度不平衡的情况下,我们拥有的少数类实例越来越少,这使得训练有效的GANs变得更加困难。
与基于像素和基于gan的方法相比,DeepSMOTE即使对最高的不平衡比率也显示出极好的鲁棒性。我们可以看到,DeepSMOTE能够有效地处理这样一个具有挑战性的场景,在所有评估指标上显示出最低的性能下降。这可以归因于SMOTE在类几何图形之后生成人工实例,而且只使用最近的邻居来生成实例。这使得我们可以得出结论,DeepSMOTE不像基于gan的方法那样受到小样本量和智能放置人工实例的影响,从而导致良好的鲁棒性(RQ5回答)。
2. 不同不平衡比条件下的模型稳定性:
评估现代重采样算法的另一个重要方面是它们的稳定性。我们需要评估一个给定的模型如何对数据中的小扰动做出反应,因为我们想评估它的泛化能力。在如此小的变化下显示出高方差的模型不能被视为稳定的,因此不应该被首选。这在从不平衡数据区域学习时尤为重要,因为我们希望选择一种重采样算法,在任何数据排列下生成信息丰富的人工实例
为了评估这一点,我们测量了DeepSMOTE和基于gan的算法在20次重复的5倍交叉验证下的性能指标的扩展。在每次重复实验中,少数类是从原始的平衡基准中随机创建的。这确保了我们不仅测量了在单个数据集实例中训练数据排列的稳定性,而且还测量了使用不同困难的实例创建少数类的可能性。
图10
为三种重采样方法的图,阴影区域表示结果的标准差。在较高的不平衡比率下基于gan的方法显示出越来越大的差异,表明这些方法不能被认为是挑战不平衡数据问题的稳定模型。
DeepSMOTE在这些指标中返回了最低的方差,显示了我们的重采样算法的高稳定性。这一信息丰富了我们之前关于DeepSMOTE的鲁棒性的观察。图中的联合分析。9和10允许我们得出这样的结论:DeepSMOTE可以处理类之间的极端不平衡,同时在具有挑战性的条件下生成稳定的模型(RQ6回答)。
6. Discussion
- 简单的设计是有效的:DeepSMOTE是一种对抗类不平衡和训练倾斜不敏感的深度学习分类器的有效方法。它优于最先进的解决方案,并能够工作在原始图像表示。DeepSMOTE由三个组件组成:一个编码器/解码器与一个专用的损失函数和基于SMOTE的重采样相结合。这种简单性使它成为处理深度学习中的类不平衡的一种易于理解、透明但又非常强大的方法。
- 用于人工实例生成的专用数据编码:DeepSMOTE使用一种两阶段的方法,首先训练一个专用的编码器/解码器架构,然后使用它来获得过采样过程的高质量嵌入。这使得我们能够为过采样找到最佳的数据表示,允许基于SMOTE的生成来丰富少数类的训练集。
- 人工实例的有效放置:DeepSMOTE遵循少数类的几何属性,在类之间的边界上创建人工实例。我们假设这在平衡的数据集上使用DeepSMOTE导致了判别模型的训练的改进,这反过来导致了分类准确性的改进和对多数类的偏差的减少
- 优于基于像素和基于gan的算法:DeepSMOTE优于最先进的重采样方法。能够通过处理原始图像并从中提取特征,DeepSMOTE可以生成比基于像素的方法生成更有意义的人工实例,即使使用相对更简单的实例生成规则也是如此。通过使用高效和专用的数据嵌入,DeepSMOTE可以在不同的不平衡比率下比基于gan的解决方案更好地丰富少数类
- 易于使用:原始SMOTE算法巨大成功的原因之一是它简单直观的使用。DeepSMOTE遵循这些步骤,因为它不仅准确,而且是一个有吸引力的现成解决方案。我们的方法很容易在任何数据上进行调整和使用,既作为黑盒解决方案,也作为开发新颖和健壮的深度学习架构的基石。随着深度学习被越来越广泛的跨学科受众所使用,这种特征受到了高度的追捧。
- 高质量的生成图像:DeepSMOTE可以返回高质量的人工图像,在视觉检查下与真实图像没有区别。这使得DeepSMOTE成为一种全面的方法,因为生成的图像既清晰又信息丰富。
- 优秀的鲁棒性和稳定性:DeepSMOTE可以处理极端的不平衡比率,同时对小样本量和数据内的方差具有鲁棒性。DeepSMOTE比任何一种参考方法都更不容易发生训练数据的变化。它是一种稳定的过采样方法,适用于增强在现实应用程序中部署的深度学习模型
7. Conclusion
总结
我们提出了DeepSMOTE,一个新的和变革性的不平衡数据模型,它融合了高度流行的SMOTE算法和深度学习方法。DeepSMOTE是一种有效的过采样解决方案,用于训练不平衡数据分布上的深度架构。它可以被看作是类不平衡的数据级解决方案,因为它创建了平衡训练集的人工实例,然后可以用来训练任何深度分类器而不受偏差。DeepSMOTE独特地满足了一个成功的重采样算法的三个关键特征:对原始图像进行操作的能力,创建高效的低维嵌入,以及生成高质量的人工图像。这是通过一种新的架构而实现的,该架构将编码器/解码器框架与基于烟雾的过采样和增强的损失函数相结合。大量的实验研究表明,DeepSMOTE不仅优于最先进的基于像素和基于gan的过采样算法,而且在生成人工模型稳定性的同时,提供了无与伦比的鲁棒性
展望
下一个工作将集中于使用关于类级和实例级困难的信息来增强DeepSMOTE,这将使它能够更好地解决特征空间中具有挑战性的区域。我们计划通过实例级惩罚来增强我们的专用损失函数,以便将编码器/解码器训练集中在显示边界/重叠特征的实例上,同时丢弃异常值和噪声实例。这种复合的倾斜不敏感损失函数将建立在数据级和算法级方法之间的桥梁,从不平衡的数据中学习。此外,我们希望使DeepSMOTE适合于持续和终身学习场景,因为这些场景需要处理动态类比率和生成新的人工实例。我们设想,DeepSMOTE可能不仅有助于对抗在线课程的不平衡,而且还有助于提高终身学习模型对灾难性遗忘的健壮性。最后,我们计划扩展DeepSMOTE,以合并其他数据模式,如图形和文本数据。
相关文章:

论文阅读-2-DeepSMOTE Fusing Deep Learning and SMOTE for Imbalanced Data
文章目录 Abstract1. Introduction2. Learning From Imbalanced Data1. 数据级2. 算法级3. 集成方法 3. Deep Learning From Imbalanced Data基于深度神经网络的实例生成损失函数适应长尾识别 4. DeepSMOTEA. 动机B. 描述C. encoder-decoder框架D. 增强的损失函数E. 人工图像生…...

三种方法教你让模糊照片秒变高清图
现在随着数字相机和智能手机的普及,我们拍摄的照片数量越来越多,但是有些照片可能因为环境或技术等原因导致模糊不清,这时候我们就需要使用一些软件或工具来让照片变得清晰,以满足我们的需求。 下面介绍三种常用的照片变清晰的方…...

PyTorch深度学习实战 | 基于线性回归、决策树和SVM进行鸢尾花分类
鸢尾花数据集是机器学习领域非常经典的一个分类任务数据集。它的英文名称为Iris Data Set,使用sklearn库可以直接下载并导入该数据集。数据集总共包含150行数据,每一行数据由4个特征值及一个标签组成。标签为三种不同类别的鸢尾花,分别为&…...

服务端接口优化方案
一、背景 针对老项目,去年做了许多降本增效的事情,其中发现最多的就是接口耗时过长的问题,就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。 二、接口优化方案总结 1. 批处理 批量思想:批量操作数据…...

【并发基础】Happens-Before模型详解
目录 一、Happens-Before模型简介 二、组成Happens-Before模型的八种规则 2.1 程序顺序规则(as-if-serial语义) 2.2 传递性规则 2.3 volatile变量规则 2.4 监视器锁规则 2.5 start规则 2.6 Join规则 一、Happens-Before模型简介 除了显示引用vo…...

Kubernetes系列---Kubernetes 理论知识 | 初识
Kubernetes系列---Kubernetes 理论知识 | 初识 1.K8s 是什么?2.K8s 特性3.小拓展(业务升级)4.K8s 集群架构与组件①架构拓扑图:②Master 组件③Node 组件 五 K8s 核心概念六 官方提供的三种部署方式总结 1.K8s 是什么?…...

KingbaseES 原生XML系列三--XML数据查询函数
KingbaseES 原生XML系列三--XML数据查询函数(EXTRACT,EXTRACTVALUE,EXISTSNODE,XPATH,XPATH_EXISTS,XMLEXISTS) XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的一种公共语言。在不同平台下产生的信息,可以很容易加载XML数据到程序…...

【51单片机】点亮一个LED灯(看开发板原理图十分重要)
🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The Right Path】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔基础内容 🏳…...

数据可视化工具 - ECharts以及柱状图的编写
1 快速上手 引入echarts 插件文件到html页面中 <head><meta charset"utf-8"/><title>ECharts</title><!-- step1 引入刚刚下载的 ECharts 文件 --><script src"./echarts.js"></script> </head>准备一个…...

【AI绘画】——Midjourney关键词格式解析(常用参数分享)
目前在AI绘画模型中,Midjourney的效果是公认的top级别,但同时也是相对较难使用的,对小白来说比较难上手,主要就在于Mj没有webui,不能选择参数,怎么找到这些隐藏参数并且触发它是用好Mj的第一步。 今天就来…...

操作符知识点大全(简洁,全面,含使用场景,演示,代码)
目录 一.算术操作符 1.要点: 二.负数原码,反码,补码的互推 1.按位取反操作符:~(二进制位) 2.原反补互推演示 三.进制位的表示 1.不同进制位的特征: 2.二进制位表示 3.整型的二进制表…...

华工研究生语音课
这门课讲啥 语音蕴含的信息、语音识别的目的 语音的准平稳性、分帧、预加重、时域特征分析(能量和过零率)、端点检测(双门限法) 语音的基频及检测(主要是自相关法、野点的处理) 声音的产生过程…...

KingbaseES 原生XML系列二 -- XML数据操作函数
KingbaseES 原生XML系列二--XML数据操作函数(DELETEXML,APPENDCHILDXML,INSERTCHILDXML,INSERTCHILDXMLAFTER,INSERTCHILDXMLBEFORE,INSERTXMLAFTER,INSERTXMLBEFORE,UPDATEXML) XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的一种公共语言。…...

【Flink】DataStream API使用之源算子(Source)
源算子 创建环境之后,就可以构建数据的业务处理逻辑了,Flink可以从各种来源获取数据,然后构建DataStream进项转换。一般将数据的输入来源称为数据源(data source),而读取数据的算子就叫做源算子(…...

树莓派硬件介绍及配件选择
目录 树莓派Datasheet下载地址: Raspberry 4B 外观图: 技术规格书: 性能介绍: 树莓派配件选用 电源的选用: 树莓派外壳选用: 内存卡/U盘选用 树莓派Datasheet下载地址: Raspberry Pi …...

O2OA (翱途) 平台 V8.0 发布新增数据台账能力
亲爱的小伙伴们,O2OA (翱途) 平台开发团队经过几个月的持续努力,实现功能的新增、优化以及问题的修复。2023 年度 V8.0 版本已正式发布。欢迎大家到 O2OA 的官网上下载进行体验,也希望大家在藕粉社区里多提宝贵建议。本篇我们先为大家介绍应用…...

数控解锁怎么解 数控系统解锁解密
Amazon Fargate 在中国区正式落地,因 数控解锁使用 Serverless 架构,更加适合对性能要求不敏感的服务使用,Pyroscope 是一款基于 Golang 开发的应用程序性能分析工具,Pyroscope 的服务端为无状态服务且性能要求不敏感,…...

3.0 响应式系统的设计与实现
1、Proxy代理对象 Proxy用于对一个普通对象代理,实现对象的拦截和自定义,如拦截其赋值、枚举、函数调用等。里面包含了很多组捕获器(trap),在代理对象执行相应的操作时捕获,然后在内部实现自定义。 const…...

Rust 快速入门60分① 看完这篇就能写代码了
Rust 一门赋予每个人构建可靠且高效软件能力的语言https://hannyang.blog.csdn.net/article/details/130467813?spm1001.2014.3001.5502关于Rust安装等内容请参考上文链接,写完上文就在考虑写点关于Rust的入门文章,本专辑将直接从Rust基础入门内容开始讲…...

【5.JS基础-JavaScript的DOM操作】
1 认识DOM和BOM 所以我们学习DOM,就是在学习如何通过JavaScript对文档进行操作的; DOM Tree的理解 DOM的学习顺序 DOM的继承关系图 2 document对象 3 节点(Node)之间的导航(navigator) 4 元素࿰…...

【大数据之Hadoop】二十九、HDFS存储优化
纠删码和异构存储测试需要5台虚拟机。准备另外一套5台服务器集群。 环境准备: (1)克隆hadoop105为hadoop106,修改ip地址和hostname,然后重启。 vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/hostname r…...

SuperMap GIS基础产品组件GIS FAQ集锦(2)
SuperMap GIS基础产品组件GIS FAQ集锦(2) 【iObjects for Spark】读取GDB参数该如何填写? 【解决办法】可参考以下示例: val GDB_params new util.HashMapString, java.io.Serializable GDB_params.put(FeatureRDDProviderParam…...

C语言printf()函数中整型格式说明符详解
每个整型在printf()函数中对应不同的格式说明符,以实现该整型的打印输出。格式说明符必须使用小写。现在让我们看看各个整型及其格式说明符: 短整型(short) 10进制:%hd16进制:无负数格式,正数使用%hx8进制:无负数格式,正数使用%ho c short s 34; printf("%hd", s…...

阿里云服务器地域和可用区怎么选择合适?
阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…...

Java序列化引发的血案
1、引言 阿里巴巴Java开发手册在第一章节,编程规约中OOP规约的第15条提到: **【强制】**序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱&#x…...

为Linux系统添加一块新硬盘,并扩展根目录容量
我的原来ubuntu20.04系统装的时候不是LVM格式的分区, 所以先将新硬盘转成LVM,再将原来的系统dd到新硬盘,从新硬盘的分区启动,之后再将原来的分区转成LVM,在融入进来 1:将新硬盘制作成 LVM分区 我的新硬盘…...

树莓派Opencv调用摄像头(Raspberry Pi 11)
前言:本人初玩树莓派opencv,使用的是树莓派Raspberry Pi OS 11,系统若不一致请慎用,本文主要记录在树莓派上通过Opencv打开摄像头的经验。 1、系统版本 进入树莓派,打开终端输入以下代码(查看系统的版本&…...

国产ChatGPT命名图鉴
很久不见这般热闹的春天。 随着ChatGPT的威名席卷全球,大洋对岸的中国厂商也纷纷亮剑,各式本土大模型你方唱罢我登场,声势浩大的发布会排满日程表。 有趣的是,在这些大模型产品初入历史舞台之时,带给世人的第一印象其…...

操作系统——进程管理
0.关注博主有更多知识 操作系统入门知识合集 目录 0.关注博主有更多知识 4.1进程概念 4.1.1进程基本概念 思考题: 4.1.2进程状态 思考题: 4.1.3进程控制块PCB 4.2进程控制 思考题: 4.3线程 思考题: 4.4临界资源与临…...

第四十一章 Unity 输入框 (Input Field) UI
本章节我们学习输入框 (Input Field),它可以帮助我们获取用户的输入。我们点击菜单栏“GameObject”->“UI”->“Input Field”,我们调整一下它的位置,效果如下 我们在层次面板中发现,这个InputField UI元素包含两个子元素&…...