精华内容
下载资源
问答
  • 代价敏感学习

    万次阅读 2020-07-13 04:32:40
    关于代价敏感学习及自己的不成熟想法

    介绍

    代价敏感的学习是分类中错误产生导致不同的惩罚力度时该如何训练分类器。通常,不同的代价用一个N×NN×N的矩阵CostCost表示,其中NN 是类别的个数。Cost[i,j]Cost_{[i, j]}表示将一个$i 类的对象错分到j$ 类中的代价。代价敏感分类就是为不同类型的错误分配不同的代价,使得在分类时,高代价错误产生的数量和错误分类的代价总和最小。常用的方法有如下几种。

    1. 调整样本分布(Stratification)。这是一种传统的方法,它根据错误分类的代价,按照比例变换训练集中类别的频率。其缺点是改变了样本的分布情况,有时会影响算法的性能。
    2. 元代价(MetaCost)。这是一种将一般分类模型转换成代价敏感模型的方法。它通过一个“元学习”过程,根据最小期望代价修改训练样本的类标记,并使用修改过的训练集重新学习新的模型。
    3. 代价敏感决策。首先在训练集中多次采样,生成多个模型;再根据多个模型,得到测试样本属于每个类别的概率;然后计算测试样本的所有错误分类代价,并根据最小代价得到类标记。一种典型的做法是利用集成学习技术。

    类别

    其中 按照对问题的解决方法的不同,代价敏感学习的算法研究又可以分成三类。

    第一类

    第一类代价敏感的学习方法关注于如何直接构造一个代价敏感的学习模型,对不同的分类器模型研究者们提出了不同的解决办法,它们包括
    (1)决策树:Knoll 等和Bradford 等为决策树提出了代价敏感的剪枝方法,Bradford 等研究了在代价敏感的条件下如何对决策树进行剪枝使得损失达到最小,研究表明基于拉普拉斯方法的剪枝方法能够取得最好的
    效果,Drummond 和Holte 研究了代价敏感学习的决策树的节点分裂
    方法。
    (2) Boosting:Fan 等研究着提出了代价敏感的Boosting 算法Ada-Cost
    (3)神经网络:Geibel 和Wysotzki 提出了基于Perceptron 分类算法的代价敏感的学习方法,在文章中作者对不可分的类提出了代价敏感的参数更新规则。例如Kukar和Kononenko为神经网络提出了新的后向传播算法,使之能够满足代价敏感学习的要求。
    (4) Fumera 和Roli[37]以及Bradford 等从结构风险最小的角度来看代价敏感问题,提出了代价敏感的支持向量机分类算法。

    第二类

    第二类代价敏感的学习方法基于对分类结果的后处理,即按照传统的学习方法学习一个分类模型,然后对其分类结果按照贝叶斯风险理论对结果进行调整,以达到最小的损失。和第一类代价敏感学习方法相比,这种方法的优点在于其不依赖于所使用的具体的分类器。Domingos 提出了一种叫做MetaCost 的过程,它把底层的分类器看成一个黑箱子,不对分类器做任何的假设和改变,MetaCost可以应用到任何个数的基分类器和任何形式的代价矩阵上。给定一个样例x,基分类器得出它属于第j个类的概率为Pr(j|x),这样,认为x 属于第i个类的贝叶斯最优预测的风险为:R(i|x) = ΣP(j|x)C(i,j)(C(i,j)是把属于类别j的分为类别i的代价)。

    第三类

    第三种代价敏感的学习方法基于传统的学习模型,通过改变原始训练数据的分布来训练得到代价敏感的模型。Chan 和Stolfo 提出了层次化模型(Stratification),把分布不均匀的训练数据调整为正负例均匀分布的数据。Zadrozny等研究者基于cost-proportionate 的思想,对训练数据调节权值,在实际应用中,其类似于Boosting 算法,可以通过为分类模型调节权值来进行实现,又可以通过采样(subsampleing)来实现。Abe 等提出了对多类分类问题中如何实现代价敏感的学习进行了探讨,提出了一种新的迭代学习方法。

    开始表演

    下面是本人瞎写的一种基于代价敏感学习的防作弊方法

    用较为常见的一维度数据展示基于代价敏感的卷积神经网络:
    η=an1bn2n=n1+n2 \eta=\frac{\frac{a}{n_1}}{\frac{b}{n_2}} \\ n=n_1+n_2
    其中n为样本总数,n1n_1n2n_2分别表示一维样本中的两个不同群体,其中aabb又分别是n1n_1n2n_2中符合某种条件/不符合某种条件的样本。

    但是其中是由于数据不准确导致aa存在虚假数据,因此以上公式可以认定是不正确的,使用代价敏感卷积神经网络的将其正确分类的其步骤是:

    • 获取一维特征数据集的步骤:对包含样本群体与是否符合条件的原始数据集进行分析,利用统计方法提取样每个样本的特征,获得一维特征数据集;

    • 构造特征矩阵的步骤:利用多粒度的时间窗口将一维特征转换成特征矩阵;

    • 分类预测训练的步骤:将特征矩阵数据集作为输入,选择卷积神经网络结构进行分类
      预测训练;在输出层引入代价敏感机制,利用阈值移动进行反向传播;

    • 利用训练好的分类预测。

    代价敏感卷积神经网络

    (全连接层以及层数表示有点问题)

    展开全文
  • 1. 代价敏感学习简介 0x1:如何将业务场景中对FP和FN损失的不同接受程度,调整我们的损失函数 1. 什么场景下需要代码敏感学习 在很多真实业务场景中,包括笔者所在的网络安全领域,误报造成的损失常常比漏报来的...

    1. 代价敏感学习简介

    0x1:如何将业务场景中对FP和FN损失的不同接受程度,调整我们的损失函数

    1. 什么场景下需要代码敏感学习

    在很多真实业务场景中,包括笔者所在的网络安全领域,误报造成的损失常常比漏报来的要大,原因很简单,如果一个IDS系统每天都在产生大量虚警,那么对事件响应处理人员的压力就会非常大,时间久了,大家对IDS的信任度就会下降,同时真实的有效告警也可能被淹没在海量的虚警中,反而导致更多和更严重的漏报。

    但另一方面,可能有人会质疑说漏报的影响不是更恶劣吗?难道不应该秉着”宁可错杀一千,不可放过一个可疑“的方针吗?

    根据笔者目前的从业经验来看,没有必要这样。一个好的做法是构建多层次的纵深检测体系,大白话就是在一个KILLCHAIN的每一个环节都有针对性地部署一个IDS,同时追求每个IDS的精确度,对于单个IDS来说,尽量少误报,对于整体系统来说,所有IDS综合起来构成了一个纵深体系,攻击者想要穿透这个体系而不引发任何的告警,就需要非常高超的技巧和小心翼翼的动作,而这有时候也反过来限制了攻击者所能做的动作,例如内网扫描这件事。

    说完了代码敏感学习的应用场景,接下来的问题肯定是:代价敏感函数是什么?简单的回答是:代价敏感学习是在原始标准代价损失函数的基础上,增加了一些约束和权重条件,使得最终代价的数值计算朝向一个特定的方向偏置(bias),而这个偏置就是具体业务场景更关注的部分

    我们先来看一下常规的代价函数是如何计算的。

    2. 常规损失函数的数值计算

    一般来说,机器学习领域的检测分类算法所关注的仅仅是如何得到最高的正确率(acc),以2-class分类为例,我们可以使用一个二维矩阵来描述分类算法的预测结果,如下图所示:

    表中的列表示实际数据所属类别,行表示分类算法的预测类别

    不管使用了损失函数是何种形式,形式上,算法的预测错误的即是 FPFN 两部分所表示,即:Loss = Loss(FP)+ Loss(FN)

    从损失函数的通用数学公式角度来看,损失函数的求导优化对 FP 和 FN 是没有任何偏置的。分类算法所关心的是如何使得 FP+FN 的值尽可能的小,从而获得较高的分类准确率。对于 FP、FN 两部分各自在错误实例中所占的比重,传统损失函数并没有加以任何的考虑和限制。

    换句话说,传统损失函数实际上是建立在下述假设的基础之上的:

    在所有情况下,分类算法做出 FN 判断和做出 FP 判断对于实际结果的影响因子是完全相同的。所以我们可以不对两种误判所占的比例加以约束

    3. 业务场景中的损失函数计算

    然而在现实世界中,这一假设往往是并不成立的,在实际的业务场景中,FN 和 FN 所带来的实际损失往往是不同的。一个被广为接受的上述假设的反例就是银行借贷问题。

    • 从机器学习算法的角度考虑,算法的分类结果应该使得错误分类率降到最低;

    • 而在实际应用中,算法的分类结果应该保证分类结果给银行造成的损失较小;

    在实际情况中,银行做出 FP 判断(即没有将贷款贷给符合条件的申请人),所造成的损失要远小于其做出 FN 判断(即将贷款贷给不符合条件的申请人所造成的损失的)

    如果我们用下图来描述银行做出不同决定所造成的不同的代价的的cost matrix:

    分类算法导致的实际损失等于:

    Loss-real = FP * C01 + FN * C10

    假设现在有两个分类已训练好的算法 A 和 B,对于 10 个贷款申请人进行分类。

    我们令:

    loss(FN)c10 = 10;
    loss(FP)c01 = 1

    若 A/B 算法的分类结果为下图

    从数值计算的角度,A 算法的分类正确性要优于 B 算法:Acc(A)= 80% > Acc(B)= 60%

    但是从实际业务场景角度,银行实际损失,A 算法的性能却不如 B 算法:Loss(A)= 20 > Loss(B)= 4

    这就是 cost-sensitive 分类算法所关注和研究的问题。

    0x2:代价敏感学习公式

    利用 cost matrix,我们可以将 cost-sensitive 分类问题转化一个最优化问题,对于二分类分类算法来说只有2种判断结果,所以优化目标为让下式 L(x, i)达到最小值:

    • 其中 x 是一个实例;

    • (x, i)表示将其分为 i 类;

    • P(j | x) 表示在算法 A 中获得的 x 属于类别 j 的后验概率,这个概率越小,反之 P(i | x) 就越大,这就是求对偶问题的反面;
    • c(i,j) 表示算法 A 将类别 i 的样本错判为类别 j 的实际损失(real-cost)

    上述公式中,因为损失权重偏置因子c(i,j)的加入,使得我们的目标使得模型不再单纯关注如何获得 P(j|x)的最大值,而是要综合考虑预测结果P(j | x)以及不同预测结果造成的损失c(i,j)。这两个因子互相牵制。

    1. Cost-sensitive中cost的定义与表示

    通常情况下,我们使用 cost matrix 描述待分类数据集上的 cost 信息。Cost matrix C 是一个N × N的矩阵,其中 N 代表待分类数据集中的类别的数量。

    C 中的条目 c(i, j)表示分类算法将实际属于 j 类得到实例分为 i 类所造成的 cost。当 i = j 时代表分类算法正确预测了实例的类别,而i ≠ j的条目对应于不正确的分类结果。

    在对 c(i, j)进行赋值的过程中,一般会遵循合理性原则:

    • 即错误分类的造成的 cost 肯定要大于正确分类造成的 cost;

    • cost matrix 中的 c(i, j) = 0 , when i = j,而对于其他错误的分类结果对应的条目 c(i, j), 我们赋其值为正数,用于表示其代价;

    • 而具体FN和FP如何赋值,取决于具体业务场景。例如如果我们认为误报的损失大于漏报的损失,则赋值:cFN > cFP;

    2. Cost-sensitive损失权重因子对损失函数的影响

    从宏观角度来看,代价损失权重因子c(i, j)可以理解为一种先验知识。加入损失权重因子c(i, j)后,目标函数L(x,i)从最大似然估计转变为了最大后验估计。

    笔者认为,cost sensitive的本质是“对不同的后验预测结果,的条件概率 P(y|x) 赋予不同的惩罚因子”。

    在 2-class 分类中,cost-sensitive 分类算法将实例 x 分为 1 类的条件是当且仅当将 x 分为 1 类所造成的预期 cost,不大于将 x 分为 0 类的损失。即

    当式子取等号时,这就是所谓的分类器最优决策面(auc曲线本身)。可以看到,cost matrix的不同取值,影响了这个分类器最优决策面的位置,具体如何分析这种影响,我们文章的后面会继续深入讨论。

    0x3:代价敏感损失的泛化讨论

    笔者希望和大家一起更深入思考一下,代价敏感损失的本质是什么。

    虽然大量的paper上都提出了cost-sensitive是对不同的predict result给予不同的损失因子,这是离散的范畴。但是笔者认为这个概念可以继续延展到连续无限的范畴,即对对数几率回归损失(sigmoid)这种损失函数也同样起作用,sigmoid本质上也体现了cost sensitive的思想。

    一个标准的sigmoid函数如下:

    sigmoid函数的输出代表了对发生几率的预测,目标y为 {1,0},即发生于不发生,而sigmoid的输出介于【0,1】之间。

    从函数曲线上可以很容易看出:

    • 对于靠近【0,1】两侧的预测值,预测值和实际值的差值是比位于中间概率的差值要小的,因此这个区域中的1阶导数相对就较低,这进而导致了例如GD算法的最终损失较低;

    • 而位于【0,1】中间位置的地方,1阶导数相对较高,进而导致最终损失较高;

    通过这种函数特性,sigmoid函数会“驱使”模型将预测结果向靠近 0 或者靠近 1 的方向前进,或者说sigmoid函数不喜欢模糊地带,而偏爱(bias)确定性的结果。

    0x4:Cost-Sensitive的几何意义

    如果我们画出ROC曲线,横轴和纵轴分别是 acc 和 recall,可以现象,曲线是一个形如下图的曲线:

    损失函数的极值点就是最终的决策分界面ROC曲线的“切线点”(图中的绿点)。

    我们可以做一个直观的想象:cost() 函数起到的作用是“拉伸”原始的ROC曲线,使其向acc或者recall的方向拉伸,拉伸的结果会导致超分界面“提早”和 acc 或者 recall 方面相切。

    • 对误报的惩罚加大:cost()对FN的因子比例增大,则使roc曲线朝上图中 true positive rate 方向拉伸,即向上,则相切点会更靠下,最终的效果是获得更低的 true positive rate;

    • 对漏报的惩罚加大:cost()对FP的因子比例增大,则使roc曲线朝上图中 false positive rate 方向拉伸,即向左,则相切点会更靠右,最终的效果是获得更低的 false positive rate;

    以上的函数几何视角,启发我们一点:

    cost-sensitive Loss Function 的作用本质上是通过“拉伸”损失函数的函数形式,进而影响模型的最优决策面。对 acc 和 recall 的不同权重因子,最终影响了 roc 曲线中向 acc 和 recall 方向的偏离程度

    当然,cost-sensitive只是影响了模型最优决策面的位置,最优决策面并不是最终的决策函数。

    如果将auc函数看成是【x,y】坐标系的话,不同的x,y取值代表了最终决策不同的偏向,例如我们取x=0.1,即追求低误报,则相对的,y值肯定也低,即召回也低了。如果我们稍微放低一些对低误报的追求,则召回也能对应提高。在实际的tensorflow开发中,这通过对最终模型预测的p的threshold来实现。

    那cost-sensitive在这里又扮演了什么角色呢?

    简单来说可以这么理解,在相同的threshold前提下,误报敏感损失函数会使得模型获得更低的误报,漏报敏感损失函数会使得模型会的更低的漏报。

    但是要始终牢记的是:最终的模型效果是两部分组成的,AUC函数的形式+认为设定的threshold决策策略

    0x5:实现cost sensitive思想的不同方式

    解决 cost-sensitive 分类问题的核心在于解决的优化问题,即如何使得分类算法的结果能够获得有倾向性的L值。 

    目前,在如何获得有倾向性的分类算法这一问题上,目前有几种比较主流的方法:

    1. Train set sample rescaling

    通过有意调整,将训练数据集的正负例呈现不同数量比,以提高分类算法对于某些分类结果的敏感性。

    例如如果想获得更高的acc,更低的误报,我们在训练集中,调整反例的数量是正例的数倍。相关的讨论,可以参阅另一篇blog

    2. Class membership probability - cost matrix reweighted

    通过修改不同分类在算法中的 class membership probability,以获得具有一定数据倾向性的分类算法。这种算法被称为reweighted。这种方法也是本文主要讨论的。

    0x6:代价敏感函数在不同机器学习算法中的应用

    目前,分类决策树、神经网络、支持向量机(SVM)、boosting等常用学习算法都有其对应的代价敏感扩展算法。

    各个方法在具体形式上各不相同,但其核心思想是一致的,这里以AdaCost为例举例说明。

    AdaCost 算法由 AdaBoost 分类算法改进而来,也是一种通过 reweighted 方式获取 cost-sensitive 分类算法的方法。

    AdaCost 的基本思想是使用若干个较弱的分类器以投票方式集成出一个分类器,各个分类器的权值由评价函数调整确定。在 AdaBoost 算法中,评价函数仅和算法的分类准确性相关。W.Fan 等人在 AdaBoost 的评价函数中引入了 cost 的元素,使得分类算法能够有效降低分类结果的 cost 值。

    具体来说 AdaCost 算法添加了一个评价分类结果的 cost 性能的函数β:y × X × c → ℝ+,使得训练出来的弱分类器的权值集合能够符合 cost-sensitive 的要求。下面给出其伪码:

    Relevant Link:   

    http://202.119.32.195/cache/4/03/lamda.nju.edu.cn/d2623fb33f624a2a05033bb5d0e23d45/qiny.pdf
    http://lamda.nju.edu.cn/huangsj/dm11/files/qiny.pdf 
    https://homes.cs.washington.edu/~pedrod/papers/kdd99.pdf 
    https://cling.csd.uwo.ca/papers/cost_sensitive.pdf 

     

    2. 在贝叶斯Bayes最优决策理论下,代价敏感损失函数设计准则

    上个章节中,我们谈到了一个词,”分类器最优决策面“,这个东西是什么呢?这个章节我们来详细讨论。

    0x1:贝叶斯最优决策理论

    1. 贝叶斯最优分类(Bayes optimal classification)

    对于二分类问题, 定义2级代价矩阵(cost matrix):

    ,其中是将b类样本预测为a类样本的分类代价。

    Bayes决策理论,最优决策的目标是最小化期望分类代价(最大后验概率估计),即给定样本x,若下式成立,则预测其类别为正;否则,预测其类别为负。

    ,其中 p(x)为后验概率,p(x) = P(y = +1|x),1 − p(x) = P(y = −1|x)。

    上式的意思是:当,Loss(正例判对+负例误报为正例)<= Loss(正例漏报,负例判对)时,模型预测最终结果为正。

    将上式移项后可重写为:

    其中:

    • :表示正样本的分类代价;

    • :表示负样本的分类代价;

    因此贝叶斯最优分类器输出的分类器函数为(这里不考虑人为设定的threshold决策函数):

    因此,Bayes分类器也可写作:

    当正负类别分类代价相等时,即c+ = c−,Bayes分类器退化为普通的无偏损失函数;而当c+和c-存在不对称偏置时,Bayes分类器也成为有偏损失函数。

    2. 贝叶斯决策错误理论上界

    cost matrix本质上是改变了Bayes分类器的损失理论上界。

    0x2:代价敏感损失设计准则(Design criterions of cost-sensitive loss)

    1. 准则一

    代价敏感损失函数需满足Bayes一致性,即单调性

    新设计的代价敏感损失函数满足下述特性:

    2. 准则二

    对应的条件代价敏感风险在Bayes分类边界(分类器最优决策面)处取得最大值。

    Bayes分类器的期望分类代价为:

    在分类边界处,将样本x判为正、负类别的分类代价相等并达到最大值,此时最难预测样本类别。 

    Relevant Link:   

    https://www.cnblogs.com/Determined22/p/6347778.html
    http://jcta.cnjournals.com/cta_cn/ch/reader/view_abstract.aspx?doi=10.7641/CTA.2015.40519 
    https://www.bilibili.com/read/cv112928/
    https://www.zhihu.com/question/27670909
    《统计决策论及贝叶斯分析》- J.O.伯杰

      

    3. 代价敏感损失函数的函数特性分析

    这个章节,我们来真正进入代价敏感函数的内部原理,探究一下cost matrix是如何影响原始损失函数的形态,进而影响原始损失函数的性质的。

    0x1:原始无偏损失函数函数性质

    我们前面说过,当正负类别分类代价相等时,即c+ = c−,Bayes分类器退化为普通的无偏损失函数;而当c+和c-存在不对称偏置时,Bayes分类器也成为有偏损失函数。

    所以这里先来看下我们熟悉的原始无偏损失函数的函数性质。

    具体探讨以下损失函数:平方损失、指数损失、对数损失、SVM损失。这几种损失函数均可表示为间隔yF(x)的函数, 即,如下图所示:

    下标给出了各个损失函数对应最优决策函数及其条件风险

    下图给出了各个损失函数的最优解和最优解处的条件风险:

    可以看到,在无偏损失情况下,与贝叶斯分类器等价,最优解处的条件风险与最小分类误差一致,即在p(x) = 1/2 处取得最大值。

    这和我们的认识是一致的,怎么理解呢?简单来说可以这么理解。

    如果我们使用逻辑斯蒂回归训练一个二分类器,那么我们可以设定预测的阈值p为0.5,当>=0.5时,预测结果为正例,当<0.5时预测结果为负例。这是最优的阈值,任何偏离0.5的阈值p都会增加损失:

    • 决策阈值向0.5左偏:整体损失的增加主要来自误报增加。

    • 决策阈值向0.5右偏:整体损失的增加主要来自漏报增加,当然在某些情况下,漏报可能是我们可以接受的,因为这换取了一定的误报降低。

    讨论完了原始的无偏损失函数,接下来我们要开始讨论有偏的代价损失函数,现有算法有以下两类常用分类代价引入策略:

    1) 分类代价在损失函数外:cyL(yF(x));
    2) 分类代价在损 函数内:L(ycyF(x));

    0x2:分类代价在损失函数外(Classification cost outside of loss function)

    这种类型的代价敏感损失将分类代价与原始损失相乘。

    下表给出了各个代价敏感损失此时的最优决策和最优决策处的条件代价敏感风险

    我们取c+ = 1.5,c− = 0.5这种偏置组合,此时,Bayes分类器为

    绘制各个损失函数的最优解和最优解处的条件风险:

    可以看出,4种代价敏感损失均满足准则1,即最优分类器为Bayes分类器。

    另一方面,除代价敏感SVM损失外,其余损失均不满足准则2, 最优解处的条件代价敏感风险没有在Bayes分类边界处取得最大值,而是有不同程度的偏移。

    0x3:分类代价在损失函数内(Classification cost inside of loss function)

    这种类型的代价敏感损失将分类代价引入损失函数内部,将其与判决函数F相乘。

    下表列出了各个代价敏感损失此时的最优决策和最优决策处的条件代价敏感风险

    我们取c+ = 1.5,c− = 0.5这种偏置组合,绘制各个损失函数的最优解和最优解处的条件风险:

    可看出,4种代价敏感损失均满足准则1和准则2,即最优分类器为Bayes分类器,最优解处的条件代价敏感风险在Bayes分类边界处取得最大值。

    这种损失偏置条件下,模型的漏报会倾向于低漏报。 

    综上,虽然这4种损失函数代价敏感化之后并未都严格满足准则1/2,但是总体上,cost sensitive实际上扭曲了原始损失函数的函数曲线,使其发生了偏置。

    Relevant Link:    

    http://jcta.cnjournals.com/cta_cn/ch/reader/create_pdf.aspx?file_no=CCTA140519&flag=1&journal_id=cta_cn&year_id=2015

     

    4. 在Keras中开发适合业务场景的代价敏感函数 

    在具体工程项目中,因为TensorFlow/Keras并没提供原生的代价敏感函数,我们可以通过继承和重写原有的损失函数的方式,对原始的经典损失函数进行改造(函数内/函数外)

    # 方式一
    def vae_loss(x, x_decoded_mean):
        xent_loss = objectives.binary_crossentropy(x, x_decoded_mean)
        kl_loss = - 0.5 * K.mean(1 + z_log_sigma - K.square(z_mean) - K.exp(z_log_sigma), axis=-1)
        return xent_loss + kl_loss
     
    vae.compile(optimizer='rmsprop', loss=vae_loss)

    Relevant Link:    

    https://stackoverflow.com/questions/45961428/make-a-custom-loss-function-in-keras
    https://blog.csdn.net/A_a_ron/article/details/79050204
    https://blog.csdn.net/xiaojiajia007/article/details/73274669

     

    转载于:https://www.cnblogs.com/LittleHann/p/10587512.html

    展开全文
  • 主动学习 代价敏感 K-means

    千次阅读 2018-06-19 18:12:38
    其中 按照对问题的解决方法的不同,代价敏感学习的算法研究又可以分成三类。 第一类代价敏感的学习方法关注于如何直接构造一个代价敏感的学习模型,对不同的分类器模型研究者们提出了不同的解决办法,...

    主动学习:利用更加普遍存在的训练集,对模型进行训练,初始训练集的标记可以为空。归属于弱监督学习

                1.不确定性采样

                2.基于聚类

    代价敏感:考虑误分类对整个模型构建的影响。

    其中 按照对问题的解决方法的不同,代价敏感学习的算法研究又可以分成三类。 
    第一类代价敏感的学习方法关注于如何直接构造一个代价敏感的学习模型,对不同的分类器模型研究者们提出了不同的解决办法,它们包括 
    (1)决策树:Knoll 等和Bradford 等为决策树提出了代价敏感的剪枝方法,Bradford 等研究了在代价敏感的条件下如何对决策树进行剪枝使得损失达到最小,研究表明基于拉普拉斯方法的剪枝方法能够取得最好的 
    效果,Drummond 和Holte 研究了代价敏感学习的决策树的节点分裂 
    方法。 
    (2) Boosting:Fan 等研究着提出了代价敏感的Boosting 算法Ada-Cost 
    (3)神经网络:Geibel 和Wysotzki 提出了基于Perceptron 分类算法的代价敏感的学习方法,在文章中作者对不可分的类提出了代价敏感的参数更新规则。例如Kukar和Kononenko为神经网络提出了新的后向传播算法,使之能够满足代价敏感学习的要求。 
    (4) Fumera和Roli[37]以及Bradford 等从结构风险最小的角度来看代价敏感问题,提出了代价敏感的支持向量机分类算法。 

    第二类代价敏感的学习方法基于对分类结果的后处理,即按照传统的学习方法学习一个分类模型,然后对其分类结果按照贝叶斯风险理论对结果进行调整,以达到最小的损失。和第一类代价敏感学习方法相比,这种方法的优点在于其不依赖于所使用的具体的分类器。Domingos 提出了一种叫做MetaCost 的过程,它把底层的分类器看成一个黑箱子,不对分类器做任何的假设和改变,MetaCost可以应用到任何个数的基分类器和任何形式的代价矩阵上。给定一个样例x,基分类器得出它属于第j个类的概率为Pr(j|x),这样,认为x 属于第i个类的贝叶斯最优预测的风险为:R(i|x) = ΣP(j|x)C(i,j)(C(i,j)是把属于类别j的分为类别i的代价)。 

    第三种代价敏感的学习方法基于传统的学习模型,通过改变原始训练数据的分布来训练得到代价敏感的模型。Chan 和Stolfo 提出了层次化模型(Stratification),把分布不均匀的训练数据调整为正负例均匀分布的数据。Zadrozny等研究者基于cost-proportionate 的思想,对训练数据调节权值,在实际应用中,其类似于Boosting 算法,可以通过为分类模型调节权值来进行实现,又可以通过采样(subsampleing)来实现。Abe 等提出了对多类分类问题中如何实现代价敏感的学习进行了探讨,提出了一种新的迭代学习方法。

    K-means :K-menas K均值
    对于给定的样本集,按照样本之间的距离大小,将样本划分为k个簇,让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大

    目标: 最小化平方误差E:
    μi Ci
    平方误差
    曼哈顿距离的话 簇 的中心更新公式为中值
    先利用先验经验选择合适的K值,没有的话用交叉验证选择合适的K值

    选择质心(质点) 所有点的均值


    展开全文
  • 代价敏感学习方法

    千次阅读 2019-11-22 23:55:16
    代价敏感学习方法是机器学习领域中的一种新方法,它主要考虑在分类中,当不同的分类错误会导致不同的惩罚力度时如何训练分类器。例如在医疗中,“将病人误诊为健康人的代价”与“将健康人误诊为病人的代价”不同;...

    代价敏感的学习方法是机器学习领域中的一种新方法,它主要考虑在分类中,当不同的分类错误会导致不同的惩罚力度时如何训练分类器。例如在医疗中,“将病人误诊为健康人的代价”与“将健康人误诊为病人的代价”不同;在金融信用卡盗用检测中,“将盗用误认为正常使用的代价”与将“正常使用误认为盗用的代价”也不同。通常,不同的代价被表示成为一个N×N的矩阵Cost中,其中N 是类别的个数。Cost[i, j]表示将一个i 类的对象错分到j 类中的代价。
    按照对问题的解决方法的不同,对代价敏感学习的算法研究可以分成三类。
    第一类代价敏感的学习方法关注于如何直接构造一个代价敏感的学习模型,对不同的分类器模型研究者们提出了不同的解决办法,它们包括
    (1)决策树:Knoll 等和Bradford 等为决策树提出了代价敏感的剪枝方
    法,Bradford 等研究了在代价敏感的条件下如何对决策树进行剪枝使得
    损失达到最小,研究表明基于拉普拉斯方法的剪枝方法能够取得最好的
    效果,Drummond 和Holte 研究了代价敏感学习的决策树的节点分裂
    方法。
    (2) Boosting:Fan 等研究着提出了代价敏感的Boosting 算法Ada-Cost
    (3)神经网络:Geibel 和Wysotzki 提出了基于Perceptron 分类算法的代价敏感的学习方法,在文章中作者对不可分的类提出了代价敏感的参数更新规则。例如Kukar 和Kononenko 为神经网络提出了新的后向传播算
    法,使之能够满足代价敏感学习的要求。
    (4) Fumera 和Roli[37]以及Bradford 等从结构风险最小的角度来看代价敏感问题,提出了代价敏感的支持向量机分类算法。
    第二类代价敏感的学习方法基于对分类结果的后处理,即按照传统的学习方法学习一个分类模型,然后对其分类结果按照贝叶斯风险理论对结果进行调整,以达到最小的损失。和第一类代价敏感学习方法相比,这种方法的优点在于其不依赖于所使用的具体的分类器。Domingos 提出了一种叫做MetaCost 的过程,它把底层的分类器看成一个黑箱子,不对分类器做任何的假设和改变,MetaCost可以应用到任何个数的基分类器和任何形式的代价矩阵上。给定一个样例x,基分类器得出它属于第j 个类的概率为Pr(j|x),这样,认为x 属于第i个类的贝叶斯最优预测的风险为:
    R(i|x) = ΣP(j|x)C(i,j)(C(i,j)是把属于类别j的分为类别i的代价)
    第三种代价敏感的学习方法基于传统的学习模型,通过改变原始训练数据的分布来训练得到代价敏感的模型。Chan 和Stolfo 提出了层次化模型(Stratification),把分布不均匀的训练数据调整为正负例均匀分布的数据。Zadrozny 等研究者基于cost-proportionate 的思想,对训练数据调节权值,在实际应用中,其类似于Boosting 算法,可以通过为分类模型调节权值来进行实现,又可以通过采样(subsampleing)来实现[150]。Abe 等提出了对多类分类问题中如何实现代价敏感的学习进行了探讨,提出了一种新的迭代学习方法。

    [深度学习] 不平衡样本的处理

    https://blog.csdn.net/siyue0211/article/details/80318999
    不平衡样本的处理
    机器学习中经典假设中往往假定训练样本各类别是同等数量即各类样本数目是均衡的,但是真实场景中遇到的实际问题却常常不符合这个假设。一般来说,不平衡样本会导致训练模型侧重样本数目较多的类别,而“轻视”样本数目较少类别,这样模型在测试数据上的泛化能力就会受到影响。一个例子,训练集中有99个正例样本,1个负例样本。在不考虑样本不平衡的很多情况下,学习算法会使分类器放弃负例预测,因为把所有样本都分为正便可获得高达99%的训练分类准确率。
    下面将从“数据层面“和”算法层面“两个方面介绍不平衡样本问题。

    数据层面处理办法
    数据层面处理方法多借助数据采样法使整体训练集样本趋于平衡,即各类样本数基本一致。

    数据重采样
    简单的数据重采样包括上采样和下采样。由于样本较少类,可使用上采样,即复制该图像直至与样本最多类的样本数一致。当然也可以由数据扩充方式替代简单复制。对于样本较多的类别,可采用下采样,注意,对深度学习而言,下采样并不是直接随机丢弃一部分图像,因为那样做会降低训练数据多样性而影响模型泛化能力。正确的下采样方式为,在批处理训练时对每批随机抽取的图像严格控制其样本较多类别的图像数量。以二分为例,原数据的分布情况下每次批处理训练正负样本平均数量比例为5:1,如仅使用下采样,可在每批随机挑选啊训练样本时每5个正例只取1个放入该批训练集的正例,负例选取按照原来的规则,这样可使每批选取的数据中正负比例均等。此外,仅仅将数据上采样有可能会引起模型过拟合。更保险有效的方式是上采样和下采样结合使用。

    类别均衡采样
    把样本按类别分组,每个类别生成一个样本列表,训练过程中先随机选择1个或几个类别,然后从各个类别所对应的样本列表里选择随机样本。这样可以保证每个类别参与训练的机会比较均等。
    上述方法需要对于样本类别较多任务首先定义与类别相等数量的列表,对于海量类别任务如ImageNet数据集等此举极其繁琐。海康威视研究院提出类别重组的平衡方法。
    类别重组法只需要原始图像列表即可完成同样的均匀采样任务,步骤如下:

    1. 首先按照类别顺序对原始样本进行排序,之后计算每个类别的样本数目,并记录样本最多那个类的样本数目。之后,根据这个最多样本数对每类样本产生一个随机排列的列表, 然后用此列表中的随机数对各自类别的样本数取余,得到对应的索引值。接着,根据索引从该类的图像中提取图像,生成该类的图像随机列表。之后将所有类的随机列表连在一起随机打乱次序,即可得到最终的图像列表,可以发现最终列表中每类样本数目均等。根据此列表训练模型,在训练时列表遍历完毕,则重头再做一遍上述操作即可进行第二轮训练,如此往复。 类别重组法的优点在于,只需要原始图像列表,且所有操作均在内存中在线完成,易于实现。
      在这里插入图片描述
      算法层面的处理方法
      对于不平衡样本导致样本数目较少的类别”欠学习“这一现象,一个很自然的解决办法是增加小样本错分的惩罚代价,并将此代价直接体现在目标函数里。这就是代价敏感的方法,这样就可以通过优化目标函数调整模型在小样本上的注意力。算法层面处理不平衡样本问题的方法也多从代价敏感的角度出发。

    代价敏感方法
    代价敏感的方法可概括为两种, 一则基于代价敏感矩阵,一则基于代价敏感向量。

    代价敏感矩阵
    以分类问题为例,假设某训练集共有NN个样本,形如[xn,yn]Nn=1[xn,yn]n=1N,其中样本标记yy隶属于KK类。基于代价敏感矩阵方法是利用K∗KK∗K的矩阵C对不同样本类别施加错分惩罚(亦可称权重)。
    在这里插入图片描述
    其中, C(yi,yj)∈[0,∞)C(yi,yj)∈[0,∞)表示类别yiyi错分为类别yjyj的惩罚。C(yi,yi)=0C(yi,yi)=0。施加代价后的训练目标变为:训练得到某分类器gg 使得期望之和∑nC(yn,g(xn))∑nC(yn,g(xn))最小。
    代价敏感向量
    另一种代价敏感的反映方式则针对样本级别:对某样本 (xn,yn)(xn,yn),有对应的一个 KK维的代价敏感向量cn∈[0,+∞)Kcn∈[0,+∞)K,其中cncn的第kk维表示该样本被错分为第kk类的惩罚。基于代价敏感向量的方法在模型训练阶段是将样本级别的代价敏感向量与样本以 (xn,yn,cn)(xn,yn,cn) 三元组形式一同作为输入数据送入学习算法。细心的读者不难发现,代价敏感矩阵法实际上是代价敏感向量法的一种特殊形式,即对于某类的所有样本其错分惩罚向量为同一向量。

    代价敏感法中权重的指定方式
    代价敏感方法的处理前提是先指定代价敏感矩阵或向量。其中关键是错分惩罚或错分权重的设定。实际使用中可根据样本的比例,分类结果的混淆矩阵等信息指定代价敏感矩阵或向量中错分权重的具体取值。

    按照比例指定
    假设训练样本的标记共有3类:a类, b类, c类。它们的样本数目比例是3:2:1,则代价敏感矩阵为:
    在这里插入图片描述
    可以在矩阵基础上乘以类别最小公倍数6。
    根据混淆矩阵指定
    混淆矩阵(confusion matrix)是人工智能中一种算法分析工具, 用来度量模型或学习算法在监督学习中预测能力的优劣。 在机器学习领域,混淆矩阵通常也被称之为”联列表“ 或 ”误差矩阵“。混淆矩阵的每一列代表一个类的实例预测,而每一行代表其真实类别,如下表,仍以a, b, c三类分类为例。
    在这里插入图片描述
    矩阵对角线为正确分类样本数,各分类为4, 3, 21。矩阵其它位置为错分样本数,如a错分b类的样本数为1, 错分c类的样本数为3。
    虽然各类错分样本数的绝对数值接近(均错分3)但是相对而言,样本数较少的a类b类有50%和66.67%的样本被错分,比例相当高,但是c类只有19%。该情况用代价敏感法处理时,可根据各类分错样本数设置代价敏感矩阵的取值。
    一种方法直接以错分样本数为矩阵取值。
    在这里插入图片描述
    不过更优的方案还需考虑各类的错分比例,并以此比例调整错分权重。对a类而言,a类错分比例50%,占所有比例的136%(50%+67%+19%)的百分之36.76%,
    在这里插入图片描述
    小结
    数据层面采用数据重采样处理解决样本不平衡问题,其操作简单,不过该类方法会改变数据原始分布,有可能产生过拟合
    算法层面采用代价敏感法处理样本不平衡问题,通过指定代价敏感矩阵或代价敏感向量的错分权重,可缓解样本不平衡带来的影响。

    参考文献
    解析卷积神经网络——深度学习实践手册

    展开全文
  • 针对氧化铝蒸发过程故障检测中标注者不切实际的假设和控制参数难以确定问题,提出改进的代价敏感主动学习方法。给出了代价敏感主动学习形式化描述和放松了标注者不切实际的假设。为了提高分类精度和减少标注代价,该...
  • 针对电力系统暂态稳定评估中稳定样本与不稳定样本误分类代价不同的特点,提出一种基于代价敏感极端学习机的电力系统暂态稳定评估方法。该方法在现有极端学习机的基础上,引入误分类代价的概念,以误分类代价最小为...
  • 学习方法融入到排序支持向量机的学习算法中,提出了代价敏感排序学习算 法,对传统的排序支持向量机做出了改进,显著的提高了排序性能。实验证明,与排序支持向量机相比,本文所提出的代价敏感排序学习算法能够...
  • 但在代价敏感学习中,代价的确定需要足够的先验知识,难以把握.针对上述不足,构造针对不平衡数据分布的自适应代价函数,引进全局代价矩阵,对传统的朴素贝叶斯分类算法进行改进.在UCI数据集上的实验结果表明,提出的基于...
  • 嵌入代价敏感的极限学习机相异性集成的基因表达数据分类
  • 一.摘要 1.降低分类器复杂度,提高少数类识别率,提出代价敏感随机森林 2.随机森林为框架,Bagging平衡数据,在基分类器属性分裂度量以及评价函数中引入误分类和测试双重代价 ...代价敏感学习 1...
  • 代价敏感错误率 代价曲线 转载于:https://www.cnblogs.com/ForTech/p/8548883.html
  • 针对客户流失数据集的非平衡性问题和错分代价的差异性问题,将代价敏感学习应用于Veropoulos提出的采用不同惩罚系数的支持向量机,建立客户流失预测模型,对实际的电信客户流失数据进行验证。通过与传统SVM、C4.5和...
  • 代价敏感曲线理解

    2020-02-15 12:04:50
    2.理解:ROC主要考量均等代价,代价敏感曲线主要考量非均等代价。两者都是衡量某一学习器在不同场景下的综合表现情况,而不是单一场景。ROC通过阈值变化来体现不同场景,即高阈值表现了重视查准率的场景,低阈值则...
  • 基于主动学习代价敏感主动学习(Cost-sensitive active learning through statistical methods)——CATS 主动学习的标签获取 在许多实际应用中, 数据规模庞大但是质量低下,具有精确标记信息的数据尤其稀少。...
  • 1.代价敏感:   outputs, end_points = vgg.all_cnn(Xinputs, num_classes=num_classes, is_training=True,
  • 笔记扫描版
  • 深度学习【14】代价敏感损失函数

    千次阅读 2017-06-01 13:52:09
    def class_balanced_sigmoid_cross_entropy(logits, label, name='cross_entropy_loss'): """ The class-balanced cross entropy loss, as in `Holistically-Nested Edge Detection ...
  • 代价敏感支持向量机学习材料,各位朋友有这方面的材料多多上传啊。
  • 为解决因网络数据分布不均匀性而造成的链路预测问题,提出一种改进的代价敏感型链路预测算法(Link Boost).设计一种有监督链路预测可变代价损失函数,该函数对低节点度有链路节点对出现分类错误时的惩罚大于高节点度有...
  • 代价敏感错误率 我们都可以从错误中学习。 但是,如果您继续犯下会影响您职业未来的错误,可能会付出巨大的代价。 与其他任何软件行业一样,软件行业是一条学习之路,如果您避免这些重大的职业错误,就可以带领您...
  • 学习SLAM其实就是学状态估计,而在状态估计领域非线性最小二乘问题是非常关键重要...另外对于NLS问题中需要最小化的代价函数,一般情况下采用的是误差平方和,而这种代价函数对于外点(outlier)尤其的敏感,由于误差...
  • 11.65 双重代价敏感的属性分类模型 现有属性学习方法中,所有的目标类通常共享一组公共属性,即这些公共属性构成目标对象的表达特征空间。特别是当对象来自很多目标类时,这种表达方式有利于实现不同类之间的知识...
  • 本文来自OPPO互联网技术团队,如需要转载,请注明出处及作者。欢迎关注我们的公众号:OPPO_tech ...文本从业务场景出发,阐述实际广告以及生活中的这种场景诉求,然后分别从Smote过采样,PU学习以及...
  • 机器学习

    2020-03-19 12:08:59
    集成学习,代价敏感学习,演化学习,强化学习 分类的定义 构建一个分类函数或分类模型,即分类器,然后通过分类器将数据对象映射到某个给定的类别中的过程 过程分为两步,第一步是建立模型训练阶段,第二步,使用...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 144
精华内容 57
关键字:

代价敏感学习