• 人工智能安全-2-非平衡数据处理(2)


    5 算法层面

    代价敏感:设置损失函数的权重,使得少数类判别错误的损失大于多数类判别错误的损失;
    单类分类器方法:仅对少数类进行训练,例如运用SVM算法;
    集成学习方法:即多个分类器,然后利用投票或者组合得到结果。

    6 代价敏感算法

    6.1 相关问题

    经典分类方法一般假设各个类别的错分代价是相同的,并且以全局错分率最低为优化目标。
    以入侵检测为例,“将入侵行为判别为正常行为的代价”与“将正常行为判别为入侵行为的代价”是不同的,前者会引起安全问题,后者只是影响了正常行为。

    基于代价敏感学习分类方法以分类错误总代价最低为优化目标,能更加关注错误代价较高类别的样本,使得分类性能更加合理。

    实现方法:

    • 改变原始的数据分布来得到代价敏感的模型;
    • 对分类的结果进行调整,以达到最小损失的目的;
    • 直接构造一个代价敏感的学习模型。

    代价矩阵:
    在这里插入图片描述

    • 错误分类造成的代价要大于正确分类所需要的代价,即 C 10 > C 11 C_{10} > C_{11} C10>C11 C 01 > C 00 C_{01} > C_{00} C01>C00,通常情况下,可以设置 C 11 = C 00 = 0 C_{11} = C_{00} = 0 C11=C00=0 C 10 C_{10} C10 C 01 C_{01} C01设置一个大于0的值;
    • 在非平衡分类的代价敏感学习中,为了提高少数类样本的识别准确率,少数类的错分代价应当大于多数类的错分代价,假设这里的正类(1)是少数类,负类(0)是多数类,那么要求 C 10 > C 01 C_{10} > C_{01} C10>C01

    6.2 MetaCost算法(bagging)

    在这里插入图片描述
    具体步骤如下:

    1. 对原始训练集进行 m m m次随机采样得到 m m m个子数据集 { S 1 , S 2 , … , S m } \{\mathrm{S}_1, \mathrm{S}_2, \dots, \mathrm{S}_m\} {S1,S2,,Sm}
    2. 对每一个子数据集训练一个基分类器,得到 m m m个基分类器 { M 1 , M 2 , … , M m } \{\mathrm{M}_1, \mathrm{M}_2, \dots, \mathrm{M}_m\} {M1,M2,,Mm}
    3. 所有基分类器对原始数据进行预测,将所有预测概率值进行平均,以样本 X 1 \mathrm{X}_1 X1为例,所有基分类器得到的预测概率集合为 { P ( 1 ∣ X 1 ) , P ( 2 ∣ X 1 ) , … , P ( j ∣ X 1 ) , … , P ( m ∣ X 1 ) } \{\mathrm{P}(1|\mathrm{X}_1), \mathrm{P}(2|\mathrm{X}_1), \dots, \mathrm{P}(j|\mathrm{X}_1), \dots, \mathrm{P}(m|\mathrm{X}_1)\} {P(1∣X1),P(2∣X1),,P(jX1),,P(mX1)}
    4. 参数 q q q如果设置为True,则所有模型都直接预测所有数据,如果设置为False,只预测自己的训练数据(也就是第 i i i个模型对应的第 i i i个子数据集);
    5. 样本的预测概率乘上代价敏感矩阵,然后取其中损失最小的类别作为这个样本的新标签。

    在这里插入图片描述
    对于二分类问题,标签为[0 1], 假设样本A的预测概率的均值为[0,8 0.2], 代价敏感矩阵设置为:
    [ 0 1 5 0 ] \left[\begin{array}{ll} 0 & 1 \\ 5 & 0 \end{array}\right] [0510]
    其中1对应的是大类样本分错的损失,5表示少数类样本分错的损失。
    [ 0.8 0.2 ] × [ 0 1 5 0 ] = [ 1 0.8 ] \left[\begin{array}{ll}0.8 & 0.2\end{array}\right] \times\left[\begin{array}{ll} 0 & 1 \\ 5 & 0 \end{array}\right] = \left[\begin{array}{ll}1 & 0.8\end{array}\right] [0.80.2]×[0510]=[10.8]
    此时最小值为0.8,我们将这个样本的标签改为0.8所对应的类别 “1”。

    6.3 代价敏感SVM

    对SVM进行代价敏感学习改造的关键在于其惩罚因子 C C C,该参数的作用是表征每个样本在分类器构造过程中的重要程度。如果分类器认为某个样本对于其分类性能很重要,那么可以设置较大的值;反之,就设置较小的值。一般情况下, C C C的值不能太大,也不能太小。根据这个原理,对于不平衡分类而言,少数类样本应当具有更大的惩罚值,表示这些样本在决定分类器参数时很重要。因此,应用于非平衡数据分类,对SVM的最简单、最常见的扩展就是根据每个类别的重要性用 C C C值进行加权。权重的值可以根据类之间的不平衡比或单个实例复杂性因素来给出。

    对于一个给定的训练数据集 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(x_1, y_1), \dots, (x_n, y_n)\} {(x1,y1),,(xn,yn)},标准的非代价敏感支持向量机学习出一个决策边界:
    f ( x ) = w T ϕ ( x ) + b f(x)=w^{T} \phi(x)+b f(x)=wTϕ(x)+b
    其中 ϕ \phi ϕ表示一个映射函数,将样本的特征空间映射到一个更高维的空间,甚至是无限维的空间。参数 w w w b b b的优化目标为:
    min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i ξ i  s.t.  y i ( w T x i + b ) ≥ 1 − ξ i \begin{array}{cl} \min _{w, b, \xi} & \frac{1}{2}\|w\|^{2}+C \sum_{i} \xi_{i} \\ \text { s.t. } & y_{i}\left(w^{T} x_{i}+b\right) \geq 1-\xi_{i} \end{array} minw,b,ξ s.t. 21w2+Ciξiyi(wTxi+b)1ξi
    最小化目标函数中包括两部分,即正则项和损失函数项。标准的支持向量机最小化一个对称的损失函数,称为合页损失函数。

    在标准SVM上实现代价敏感有两种方法,分别是偏置惩罚支持向量机(BP-SVM)和代价敏感合页损失支持向量机。
    (1)偏置惩罚支持向量机(BP-SVM):
    min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C [ C + ∑ i ∈ S + ξ i + C − ∑ i ∈ S − ξ i ]  s.t.  y i ( w T x i + b ) ≥ 1 − ξ i \begin{array}{ll} \min _{w, b, \xi} & \frac{1}{2}\|w\|^2+C\left[C_{+} \sum_{i \in S_{+}} \xi_i+C_{-} \sum_{i \in S_{-}} \xi_i\right] \\ \text { s.t. } & y_i\left(w^T x_i+b\right) \geq 1-\xi_i \end{array} minw,b,ξ s.t. 21w2+C[C+iS+ξi+CiSξi]yi(wTxi+b)1ξi
    其中 S + S_+ S+是训练数据集 S S S中包含全部阳性样本的子集, S − S_- S是包含全部阴性样本的子集。
    引入了针对阳性和阴性样本的松弛变量 C + C_{+} C+ C − C_{-} C,用来分别处理假阳性和假阴性不同的误分类代价。
    缺点:BP-SVM在训练稀疏数据时,会加大惩罚参数 C C C C C C非常大时, ξ i \xi_i ξi将为会变为0,BP-SVM将退化为标准SVM。

    (2)代价敏感合页损失支持向量机(CSHL-SVM),可以避免BP-SVM在训练稀疏数据时的缺点:
    min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C [ β ∑ i ∈ S + ξ i + γ ∑ i ∈ S − ξ i ]  s.t.  y i ( w T x i + b ) ≥ 1 − ξ i , i ∈ S + y i ( w T x i + b ) ≥ k − ξ i , i ∈ S − \begin{array}{ll} \min _{w, b, \xi} & \frac{1}{2}\|w\|^2+C\left[\beta \sum_{i \in S_{+}} \xi_i+\gamma \sum_{i \in S_{-}} \xi_i\right] \\ \text { s.t. } & y_i\left(w^T x_i+b\right) \geq 1-\xi_i, \quad i \in S_{+} \\ & y_i\left(w^T x_i+b\right) \geq k-\xi_i, \quad i \in S_{-} \end{array} minw,b,ξ s.t. 21w2+C[βiS+ξi+γiSξi]yi(wTxi+b)1ξi,iS+yi(wTxi+b)kξi,iS
    其中 β = C + , γ = 2 C − − 1 , k = 1 2 C − − 1 \beta = C_{+}, \gamma = 2C_{-} -1, k = \frac{1}{2C_{-} -1} β=C+,γ=2C1,k=2C11。在CSHL-SVM中,代价敏感由参数 β , γ , k \beta, \gamma, k β,γ,k控制, β , γ \beta, \gamma β,γ可以控制边界违反的相对权重,在稀疏的训练数据集上, k k k依然可以控制代价敏感性。

    7 单分类器方法

    当二分类的非平衡数据的类别差异很大时,采用数据采样或代价敏感学习都难以有效提升少数类的分类性能。在这种情况下,可以考虑使用单类分类器。
    基于单类学习的非平衡数据分类方法的主要思想是只对多数类样本进行训练,形成一个对该类别的数据模型。对新样本进行分类时,可以通过计算相似度度量并设定阈值来判断新样本是否属于多数类。
    在这里插入图片描述
    如上图所示,在构建单类分类器时,只需要考虑多数类的数据样本,其轮廓就是分类器,新样本只需要计算它与多数类的距离,根据阈值来确定是多数类还是少数类。
    缺点:单类分类器易受噪声样本干扰,容易陷入对训练集中少数类样本的过拟合而导致泛化能力下降,如何选取合适的阈值是实际应用中的一个主要问题。

    针对单类分类问题的解决方法有多种,根据其原理可分为三类:

    • 密度估计法
    • 基于支持域的方法
    • 基于聚类的方法

    7.1 密度估计法

    描述某个类别样本的最简单方法是构建该类别样本的轮廓,而基于密度的轮廓表示就是构建该类样本的密度模型。例如,可以假设该类样本服从 n n n元高斯分布,即
    f ( x ) = 1 ( 2 π ) n ∣ Σ ∣ exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } f(x)=\frac{1}{\sqrt{(2 \pi)^{n}|\Sigma|}} \exp \left\{-\frac{1}{2}(x-\mu)^{T} \Sigma^{-1}(x-\mu)\right\} f(x)=(2π)n∣Σ∣ 1exp{21(xμ)TΣ1(xμ)}
    其中, μ \mu μ是均值, Σ \Sigma Σ是协方差矩阵。对于新样本,在概率计算的基础上结合给定的阈值就可以判定是多数类还是少数类,即
    h ( x ) = { 1 , f ( x ) ≥ θ 0 , f ( x ) < θ h(x) =\left\{\begin{array}{l} 1, f(x) \geq \theta\\ 0, f(x) < \theta \end{array}\right. h(x)={1,f(x)θ0,f(x)<θ
    其中 h ( x ) h(x) h(x)为判别函数。1是目标类或多数类,0为异常点或少数类。

    优点:如果训练样本特征维数较低,且训练样本较多,基于密度的单类分类器方法比较有效。
    缺点:随着维数增加,数据的稀疏性越发明显,基于密度估计的方法不能很好地反映此类模式的特征。另外,概率密度函数的估计也是一个难以解决的问题,特别是当密度区域不规则时。

    7.2 基于支持域的方法

    使用该方法,训练数据的轮廓是用边界或区域来描述,例如超平面、超球等。训练的目标是获得最小化训练数据的支撑域的体积,从而使错误率可接受。
    代表性方法主要有:单类支持向量机(One-Class SVM,OCSVM)、支持向量数据描述(Support Vector Data Description,SVDD)。
    OCSVM的核心思想如下:

    • (1)把特征空间的坐标原点当作一个虚构类;
    • (2)把输入空间通过核函数映射到高维空间;
    • (3)在高维空间将多数类的样本与原点尽可能分开。
      在这里插入图片描述

    SVDD的核心思想如下:

    • (1)把输入空间通过核函数映射到高维空间;
    • (2)在高维特征空间中寻找一个尽可能小的超球体,即包含所有训练样本点的最小球体;
    • (3)球面上的样本点即为SVDD的支持向量,可以用来描述多数类样本的边界分布情况。

    7.3 基于聚类的方法

    针对非平衡数据分类,假定训练样本中的多数类满足某种聚类假设,那么可以对这些数据执行聚类,得到的聚类结构作为多数类样本的轮廓描述。对新样本进行分类时,计算它到最近聚类中心的距离,超过该阈值的就判为少数类。
    在这里插入图片描述
    上图构建了多数类轮廓的示例,当多数类中存在明显簇结构时,使用聚类方法获得聚类结构有利于提高多数类轮廓描述的精度。

    8 集成学习的方法

    集成学习中嵌入了对数据采样、数据样本权重调整等操作,这与非平衡数据分类在数据层的思路一致。基于集成学习的非平衡分类方法的基本思想就是将集成学习算法与现有的不平衡数据分类方法相结合,使得数据采样方式更加灵活,提高非平衡数据分类效果。

    典型的集成学习方法有:

    • Bagging
    • Boosting
    • Stacking
    • SMOTEBagging
    • SMOTEBoost

    在这里插入图片描述

    8.1 Bagging

    基于Bagging的非平衡数据分类方法,在Bagging中改变采样方式,提升每个子集的差异化,从而获得多样化的基分类器。目前的一些方法引入不同的采用方法,主要的算法有:

    • Over Bagging:每次采样时,在少数类数据上应用随机过采样;
    • Under Bagging:每次采样时,对多数类数据应用随机下采样;
    • SMOTEBagging:结合了SMOTE与bagging,先使用SMOTE生成更加全面的少数类样本数据,然后再应用bagging;
    • Asymmetric bagging:每次采样时,所有少数类样本都保留下来,从多数类样本数据中分离一个与少数类数据一样大的子集。

    8.2 Boosting

    与Bagging不同,Boosting算法中的采样是在基分类器迭代过程中,通过改变样本的权重来实现样本被选择的概率大小,使得分类错误的样本可以获得更多关注。主要的算法有:

    • SMOTEBoost : 每次迭代时,使用SMOTE生成新的样本,并且在某轮迭代训练好基分类器后,生成的少数类样本会被丢弃,不加入原始数据集中,这样可以使误分类的少数类样本获得较大的权重,并确保每个基分类器有一定的多样性;
    • BalanceCascade : 是典型的双重集成算法,采用Bagging作为基本的集成学习方法,并在训练每个Boostrap数据时,使用AdaBoost作为分类算法。
  • 相关阅读:
    SpringBoot整合MongoDB 并进行增删改查
    vue中 process.env 对象为空对象问题
    全国爱眼教育大会,2022第四届北京国际青少年眼健康产业展会
    【爬虫进阶】猿人学任务一之JS混淆(难度2.0)
    【C++面向对象程序设计】CH5 继承与派生(续)——虚基类
    库函数的模拟实现
    首个零售金融大模型落地,驱动金融业数字化进阶
    Python爬虫批量下载图片
    【刷题记录⑤】Java从0到1入门| 常用API练习
    数据库的性能监控和调优工具
  • 原文地址:https://blog.csdn.net/search_129_hr/article/details/133126512