精华内容
下载资源
问答
  • 模型优化中常见问题和解决思路,包括过拟合、欠拟合等问题

    模型优化中常见问题和解决思路

    1    训练集上欠拟合,auc等度量指标不佳

    训练集上欠拟合一般是由于数据中特征或模型无法充分刻画预测的目标导致。可以以下的优化思路:

    1) 加新的好特征

    好的特征可以是新的业务强相关特征,也可以是根据前面文章特征工程部分的思路提取的特征。

    特别关注和预测目标直接相关特征的细粒度刻画。例如ctr预测中,将历史ctr点击率通过不同角度进行交叉深度表示,例如时间维度:这个词过去x天、过去x周、过去x月、白天、晚上、工作日、周末的历史ctr统计;不同广告位上的ctr;不同广告样式下的ctr;不同相关性系数的ctr;不同类别用户下的ctr等。也可以做多维度特征交叉组合,产生细粒度的刻画特征。 具体特征工程部分可以参考:《机器学习模型应用以及模型优化的一些思路》

    2) 模型上可以调低训练步长、增大树的个数以及深度等可以让模型更精细化学习的参数。

    3) 使用更复杂的模型,例如深度学习或者组合模型等。

    4) 如果某类样本存在预测特别差,可以考虑进行上下采样的处理,使的训练样本的分布向预测的目标倾斜。

     

    2    训练集上过拟合,但预测集效果差(泛化能力差)

    1)增大数据集

    可能是因为数据集少,导致对训练集过度学习。

    直接思路就是扩展数据集,除了常规根据业务特性加入更大范围或者更长时间段的方式外,也可以通过时间窗口滑动、上采样等手段在已有数据集通过一定技巧来产生更多数据。

    2)Early stopping

    在多轮迭代训练中,在训练效果收敛之前停止训练。简单说,训练时有一个校验集,当在校验集上效果不再提升时,停止训练

    3)正则化方法

    通过L1 或L2正则,使部分特征权重变小或者权重为0,降低模型复杂度。

    4)Dropout

           在神经网络中,随机丢弃一些隐层节点,也是降低模型复杂度的一种方式。

    以上方法细节可参考:机器学习中防止过拟合的处理方法

    3    预测效果异常的好

    有时候,会在模型初版阶段或者加入了少量特征后,离线模型在训练集或者预测集上的效果都非常好,例如分类问题auc达到95%以上等。这时候需要保持警惕,很有可能特征集中混入了包含label信息的特征,例如未来的信息等。这类模型往往在离线阶段效果好,在上线实验后,线上的效果差,但是如果在上线时才发现问题,负面效果大,项目进度也收到影响。因此,这类问题需要在离线阶段就保持敏感度,及时定位修复。

    4    模型的效果提升到达一定瓶颈

    在初期优化后,模型性能达到一定阶段,但进一步提升遇到瓶颈。这时候一些思路可供参考尝试。

    1) 评估模型效果对应当前的机制或策略应用是否初步足够,如足够可以将更多精力放到机制等应用层面。因为这个时候模型进一步提升的难度较大,而可能机制优化更快速提升整体应用效果,投入和回报性价比更高。

    2) 进行具体化的bad case分析,对于那些预测和实际偏差很多的具体case,具体分析原因。

    3) 定位已有样本以及特征中偏差问题

    回到模型先前工作的分析和确认中,因为很多时候,一开始节奏比较快,对于使用的特征以及样本缺乏分析,可能会导致引入有偏差或异常的样本、引入存在错误的特征。

    a)    重视样本分布观察、样本采样、异常样本过滤、重复样本的去重等工作

    b)   评估特征的业务含义、数据和线上实际数据的一致性、特征是否存在异常值等

    c)    评估特征和预测label之间的相关性,做好特征筛选工作。

    4) 审视label的合理性,思考是否有客观或者更能描述问题的label

    5) 重新评估建模思路,看看是否有更贴合业务以及数据的建模思路

    6) 尝试其他类型的模型

    7) 进行更加深度的特征工程

    在以上优化的过程中,在每步操作之间,一定要注意有基准和确定优化方向,版本之间的效果要有比较,避免无基准无方向的盲目尝试。

     

     

    展开全文
  • 使用RNN解决NLP中序列标注问题的通用优化思路

    万次阅读 多人点赞 2016-02-23 19:11:46
    /* 版权声明:可以任意转载,转载时请标明文章原始出处作者信息 .*/    author: 张俊林     (想更系统地学习深度学习知识?请参考:深度学习枕边书) ...序列标注问题应该说是自然语言处理中最...

     

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/

     

                                                         author: 张俊林 

     

                                           (想更系统地学习深度学习知识?请参考:深度学习枕边书

    序列标注问题应该说是自然语言处理中最常见的问题,而且很可能是最而没有之一。在深度学习没有广泛渗透到各个应用领域之前,传统的最常用的解决序列标注问题的方案是最大熵、CRF等模型,尤其是CRF,基本是最主流的方法。随着深度学习的不断探索和发展,很可能RNN模型会取代CRF的传统霸主地位,会成为解决序列标注问题的标配解决方案。

     

    本文主要抽象出利用RNN解决序列标注问题的通用优化思路。这个RNN优化思路应该说是使用场景非常广泛,目前NLP中绝大多数问题都可以套用这套优化思路来统一解决问题。它有个独特的好处,就是说只要你构建好完整的这一套优化模型,绝大多数NLP的问题,包括分词、词性标注、命名实体识别、关键词抽取、语义角色标注等等,等于说问题已经被解决了,只需要你使用不同问题对应的训练数据跑一遍,就等于说上面问题的实际解决工具你就拥有了,而不用像传统模型一样还需要不断定义问题特征模板等,这就是End-to-End的好处。

     

    再啰嗦两句,为什么说RNN一定会取代CRF?当然这不代表CRF完全会被抛弃,以后一定有人去研究怎么结合RNN和CRF,这个估计也没有疑问。但是RNN取代CRF获得主流地位是一定的,原因就是上面说的DL的End-to-End的优势。意思是,即使RNN只能取得和CRF方法类似的效果,但是由于End-to-End的优势,你不需要对研究领域有任何领域知识也能把它干好,因为有用的领域特征DL自己会去学,这个好处是巨大的(但是对于传统依靠NLP经验混饭吃的NLP老手们来说,这是个坏消息),况且目前看RNN在不少领域已经获得了最好的结果。结合这些特点,这就是为何说RNN会取代CRF成为新的主流模型的原因。

     

    如果看将来的技术发展趋势,从目前情况看,如果再把Encoder-Decoder框架引进来,加上这篇文章讲的RNN解决序列标注问题,以及后面可能会写的用RNN解决句子分类问题的通用思路,我相信NLP中90%以上的问题都可以被这两个模型覆盖(当然Encoder-Decoder实际上和RNN不是一个层级的模型,这个我们暂且放一边,但且把它们并列来提)。所谓:RNN在手,全都我有,此言诚不我欺也。

     

    我觉得还在坚韧不拔地坚持用传统方法搞NLP的同志应该好好读一读我上面这几段话,里面有深意,自己去体会。

     

     

    |序列标注问题

     

    如上文所述,序列标注问题是NLP中最常见的问题,因为绝大多数NLP问题都可以转化为序列标注问题,虽然很多NLP任务看上去大不相同,但是如果转化为序列标注问题后其实面临的都是同一个问题。所谓“序列标注”,就是说对于一个一维线性输入序列:

     

    给线性序列中的每个元素打上标签集合中的某个标签

     

     

    所以,其本质上是对线性序列中每个元素根据上下文内容进行分类的问题。一般情况下,对于NLP任务来说,线性序列就是输入的文本,往往可以把一个汉字看做线性序列的一个元素,而不同任务其标签集合代表的含义可能不太相同,但是相同的问题都是:如何根据汉字的上下文给汉字打上一个合适的标签。

     

    我们以中文分词任务来说明序列标注的过程。图1给出了个例子,假设现在输入句子“跟着TFboys学左手右手一个慢动作”,我们的任务是正确地把这个句子进行分词。首先,把句子看做是一系列单字组成的线性输入序列,即:

     

              “跟  着 Tfboys  学  左  手  右  手  一  个  慢  动  作”

     

    序列标注的任务就是给每个汉字打上一个标签,对于分词任务来说,我们可以定义标签集合为:

     

     

    其中B代表这个汉字是词汇的开始字符,M代表这个汉字是词汇的中间字符,E代表这个汉字是词汇的结束字符,而S代表单字词。

     

     1. 中文分词序列标注过程

     

     

    有了这四个标签就可以对中文进行分词了。这时你看到了,中文分词转换为对汉字的序列标注问题,假设我们已经训练好了序列标注模型,那么分别给每个汉字打上标签集合中的某个标签,这就算是分词结束了,因为这种形式不方便人来查看,所以可以增加一个后处理步骤,把B开头,后面跟着M的汉字拼接在一起,直到碰见E标签为止,这样就等于分出了一个单词,而打上S标签的汉字就可以看做是一个单字词。于是我们的例子就通过序列标注,被分词成如下形式:

           {跟着  Tfboys 学 左手 右手 一个 慢动作}

     

    要学习NLP,首先要把面对问题时的思维意识转换一下,就是如上所示,把你直观感觉的问题转换为序列标注思维,这个思维意识转换过程很重要,如果你没有这种意识,那很明显属于业余选手,专业选手看NLP问题肯定首先是把它们看做一个序列标注问题的。

     

    为了促进意识转换,下面再用命名实体识别(NER)问题举个序列标注解决问题的例子,命名实体识别任务是识别句子中出现的实体,通常识别人名、地名、机构名这三类实体。现在的问题是:假设输入中文句子

     

      {花园北路的北医三院里,昏迷三年的我听杨幂的爱的供养时起身关了收音机。}

     

    我们要识别出里面包含的人名、地名和机构名。如果以序列标注的角度看这个问题,应该怎么解决呢?图2给出了整个流程的说明。

     

    首先,我们把输入序列看成一个个汉字组成的线性序列,这是基础。

     

    然后,我们定义标签集合如下(这个标签用什么代表不重要,重要的是它们代表的含义):

     

     

    其中,BA代表这个汉字是地址首字,MA代表这个汉字是地址中间字,EA代表这个汉字是地址的尾字;BO代表这个汉字是机构名的首字,MO代表这个汉字是机构名称的中间字,EO代表这个汉字是机构名的尾字;BP代表这个汉字是人名首字,MP代表这个汉字是人名中间字,EP代表这个汉字是人名尾字,而O代表这个汉字不属于命名实体。

     

    2. 命名实体(NER)序列标注过程

     

     

    有了输入汉字序列,也有了标签集合,那么剩下的问题是训练出一个序列标注ML系统,能够对每一个汉字进行分类,假设我们已经学好了这个系统,那么就给输入句子中每个汉字打上标签集合中的标签,于是命名实体就被识别出来了,为了便于人查看,增加一个后处理步骤,把人名、地名、机构名都明确标识出来即可。

     

    很多NLP中的其它任务同样可以转换为序列标注问题,比如词性标注、CHUNK识别、句法分析、语义角色识别,甚至包括关键词抽取等很多应用问题也是如此。

     

    传统解决序列标注问题的方法包括HMM/MaxEnt/CRF等,很明显RNN很快会取代CRF的主流地位,成为解决序列标注问题的标准解决方案,那么如果使用RNN来解决各种NLP基础及应用问题,有什么优化轨迹可循吗?有的,下面我们就归纳一下使用RNN解决序列标注问题的一般优化思路。

     


    |使用RNN解决序列标注问题的一般优化思路

     

    首先,我们可以说,对于序列标注问题,都可以用RNN来替代传统解决方案,这个目前看没什么问题,也是大势所趋。

     

    然后,如果归纳的话,一般的优化流程是:首先用RNN来解决序列标注问题,然后可以上LSTM或者GRU来替代RNN中的隐层单元,因为LSTM或GRU对于解决长距离依赖的场景明显要优于RNN本身,接着可以上BLSTM,即双向LSTM,因为双向RNN或者双向LSTM相对RNN来说,能够看到下文特征,所以明显引入了更多的特征,如果你觉得效果还是不够好,那么可以增加BLSTM的深度,不断叠加网络形成深度BLSTM网络,当然,这里要注意,随着优化的进行,模型越来越复杂,如果训练数据规模不够的话,很可能会出现过拟合现象,所以使用LSTM的时候,记得用上DropOut以及L1/L2正则来避免过拟合,但是如果模型相对训练数据规模确实复杂,你加上这些可能也没用。至于GRU和LSTM两者相比,到底哪个更好目前并无定论,倾向于认为两者性能差不多,但是GRU是LSTM的简化模型,所以同样结构的神经网络其参数要少,在训练数据不太大情况下,优先考虑使用GRU。

     

    当然,根据NLP的不同任务特点,是先上BiRNN好还是先上LSTM好这个可能不同任务情况不一样,比如对于分词、POS、NER这种依赖不会太远的任务,RNN应该就够了,但是BiRNN肯定是要上的,因为下文特征有重要参考意义,但是对于语义级别的任务比如指代消解、语义角色标注等,估计肯定是要上LSTM的。所以要根据具体情况具体分析,不过通用的优化手段也不外乎以上几种。

     

    下面给出深层双向LSTM来做NER的神经网络结构示意图:

     

    3. 深层双向LSTMNER

     

     

    图比较直观,就不解释了,其它的NLP序列标注任务其实都可以套用这个模型来解决。

     

     

     

    扫一扫关注微信号:“布洛卡区” ,深度学习在自然语言处理等智能应用的技术研讨与科普公众号。

     

     

     

     

    展开全文
  • 本文针对每一类问题给出了经过实践证明的解决方案和思路,同时说明为什么要这么做,以及在工程算法上会遇到的问题。 1 海量数据的存储、分析和处理 运维人员必须随时掌握服务器的运行状况,除常规的服务器配置...

    上一篇文章中我们介绍了智能运维的定义和发展现状,但是智能运维需要解决的问题还有很多:海量数据存储、分析、处理,多维度,多数据源,信息过载,复杂业务模型下的故障定位。本文针对每一类问题给出了经过实践证明的解决方案和思路,同时说明为什么要这么做,以及在工程和算法上会遇到的问题。

    1 海量数据的存储、分析和处理

    运维人员必须随时掌握服务器的运行状况,除常规的服务器配置、资源占用情况等信息外,业务在运行时会产生大量的日志、异常、告警、状态报告等,我们统称为“事件”。通常每台服务器每个时刻都会产生大量这样的“事件”,在有数万台服务器的场合下,每天产生的“事件”数量是数亿级的,存储量可能是TB级别的。

    在过去,我们通常采用的方法是将日志保留在本地,当发现问题时,会登录出问题的服务器查看日志、排查故障,通过sar、dmesg等工具查看历史状态;监控Agent或者脚本也会将部分状态数据汇报到类似于Zabbix这样的监控软件中,集中进行监控和告警。

    当服务器规模越来越大时,如何统一、自动化处理这些“事件”的需求就越来越强烈,毕竟登录服务器查看日志这种方式效率很低,而成熟的监控软件(比如Zabbix、Zenoss等)只能收集和处理众多“事件”当中的一部分,当服务器数量多了以后,其扩展能力、二次开发能力也非常有限。在具体实践中,当监控指标超过百万级别时,就很少再使用这种单一的解决方案了,而是组合不同的工具和软件,分类解决问题。

    在通用设计方法中,有“大工具、小系统,小工具、大系统”的说法,这也符合UNIX的设计哲学,每个工具只做好一件事,一堆小工具组合起来可以完成很复杂的工作。如果使用的是一些大工具或者系统,表面上看功能很多,但是当你想处理更复杂的业务时,就会发现每一个功能都不够用,而且还很难扩展,它能做多“大”事取决于它的设计,而不是你的能力。

    一个由典型的小工具组成的大系统,任何一个部分都可以被取代,你完全可以用自己更熟悉的工具来做,而且对工具或者组件的替换,对整体没有太大影响。

    一提到海量数据的存储、分析和处理,大家就会想到各种各样的大数据平台。是的,大数据平台确实是用来处理海量数据的,但反过来不见得成立,对海量数据的分析和处理,并不总是或者只依赖大数据平台。

    “分类”这个词听上去朴实无华,然而处理复杂问题最基本的方法就是分类,甚至“分类方法”也是机器学习非常重要的组成部分。“海量数据处理”这是一个宏大的命题,听上去让人一头雾水,但当你对“事件”或者需要处理的问题分类后,每一部分看上去就是一个可以解决的问题了。

    我们会在《智能运维》一书中详细介绍如何对海量“事件”进行分类和处理。

    • 实时数据和非实时数据。
    • 格式化数据和非格式化数据。
    • 需要索引的数据和只需要运算的数据。
    • 全量数据和抽样数据。
    • 可视化数据和告警数据。

    每一个分类都对应一种或多种数据处理、分析和存储方式。也可以说,当你对数据、需求完成分类后,基本的框架也就定了下来,剩下的工作就是集成这些工具。

    2 多维度、多数据源

    下图是一个多维度模型示例。真实世界的情况是(至少按弦理论学家所说的是),除我们可以感知的3个“延展维”外,还有6个“蜷缩维”,它们的尺寸在普朗克长度的数量级,因此我们无法感知到。

    智能运维(AIOps)难题多,本文助你渡难关

    多维度模型示例

    当然,运维数据中的“多维度”,还没有复杂到这样难以理解。

    在相对复杂的业务场景下,一个“事件”除包含我们常用的“时间”(何时发生)、“地点”(哪个服务器/组件)、“内容”(包括错误码、状态值等)外,还应当包含地区、机房、服务池、业务线、服务、接口等,这就是多维度数据。

    很多时候,数据分析人员可能要使用各种维度、组合各种指标来生成报告、Dashboard、告警规则等,所以是否支持多维度的数据存储和查询分析,是衡量一个系统是否具有灵活性的重要指标。

    对多维度数据的处理,很多时候是一个协议/模型设计问题,甚至都不会牵扯具体的分析和处理框架,设计良好的协议和存储模型,能够兼顾简洁性和多维度。

    不同的设计理念会对应不同的处理模型,没有优劣之分,只有哪个更合适的区别。

    多数据源或者说异构数据源已经很普遍了,毕竟在复杂场景下并不总是只产生一种类型的数据,也不是所有数据都要用统一的方式处理和存储。

    在具体的实践中,通常会混合使用多种存储介质和计算模型。

    • 监控数据:时序数据库(RRD、Whisper、TSDB)。
    • 告警事件:Redis。
    • 分析报表:MySQL。
    • 日志检索:Elasticsearch、Hadoop/Hive。

    这里列出的只是一部分。

    如何从异构的多数据源中获取数据,还要考虑当其中某个数据源失效、服务延迟时,能否不影响整个系统的稳定性。这考量的不仅仅是各种数据格式/API的适配能力,而且在多依赖系统中快速失败和SLA也是要涉及的点。

    多数据源还有一个关键问题就是如何做到数据和展现分离。如果展现和数据的契合度太高,那么随便一点变更都会导致前端界面展现部分的更改,带来的工作量可能会非常大,很多烂尾的系统都有这个因素存在的可能性。

    3 信息过载

    DDoS(分布式拒绝服务)攻击,指借助于客户/服务器技术,将多台计算机联合起来作为攻击平台,对一个或多个目标发动攻击。其特点是所有请求都是合法的,但请求量特别大,很快会消耗光计算资源和带宽,下图展示了一个DDos攻击示例。

    智能运维(AIOps)难题多,本文助你渡难关

    DDoS攻击示例

    当我们的大脑在短时间内接收到大量的信息,达到了无法及时处理的程度时,实际上就处于“拒绝服务”的状态,尤其是当重大故障发生,各种信息、蜂拥而至的警报同时到达时。

    典型的信息过载的场景就是“告警”应用,管理员几乎给所有需要的地方都加上了告警,以为这样即可高枕无忧了。

    然而,接触过告警的人都知道,邮件、短信、手机推送、不同声音和颜色提醒等各种来源的信息可以轻松挤满你的空间,很多人一天要收上万条告警短信,手机都无法正常使用,更别谈关注故障了。

    怎样从成千上万条信息中发现有用的,过滤掉重复的、抖动性的信息,或者从中找出问题根源,从来都不是一件容易的事情,所以业界流传着“监控容易做,告警很难报”的说法。

    还有一个场景就是监控,当指标较少、只有数十张Dashboard时,尚且可以让服务台 24小时关注,但是当指标达到百万、千万,Dashboard达到数万张时(你没看错,是数万张图,得益于Grafana/Graphite的灵活性,Dashboard可以用程序自动产生,无须运维工程师手工配置),就已经无法用人力来解决Dashboard的巡检了。

    历史的发展总是螺旋上升的,早期我们监控的指标少,对系统的了解不够全面,于是加大力度提高覆盖度,等实现了全面覆盖,又发现信息太多了,人工无法处理,又要想办法降噪、聚合、抽象,少→多→少这一过程看似简单,其实经过了多次迭代和长时间的演化。

    感兴趣的朋友可以在《智能运维》一书中继续了解这类问题在实践中的解决方法。

    • 数据的聚合。
    • 降低维度:聚类和分类。
    • 标准化和归一化。

    有些方法属于工程方法,有些方法属于人工智能或机器学习的范畴。

    4 复杂业务模型下的故障定位

    业务模型(或系统部署结构)复杂带来的最直接影响就是定位故障很困难,发现根源问题成本较高,需要多部门合作,开发、运维人员相互配合分析(现在的大规模系统很难找到一个能掌控全局的人),即使这样有时得出的结论也不见得各方都认可。

    在开发层面,应对复杂业务的一般思路是采用SOA、微服务化等,但从运维的角度讲,完成微服务化并没有降低业务的复杂度(当然结构肯定变清晰了)。

    在这里,又不得不强调工程能力的重要性。在复杂、异构和各种技术栈混杂的业务系统中,如果想定位故障和发现问题,在各个系统中就必须有一个可追踪、共性的东西。然而,在现实中若想用某个“体系”来一统天下,则基本不可能,因为各种非技术因素可能会让这种努力一直停留在规划阶段,尤其是大公司,部门之间的鸿沟是技术人员无法跨越的。

    所以,下面给出的几种简单方法和技术,既能在异构系统中建立某种关联,为智能化提供一定的支持,又不要求开发人员改变技术栈或开发框架。

    • 日志标准化:日志包含所约定的内容、格式,能标识自己的业务线、服务层级等。
    • 全链路追踪:TraceID或者RequestID应该能从发起方透传到后端,标识唯一请求。
    • SLA规范化:采用统一的SLA约定,比如都用“响应时间”来约定性能指标,用“慢速比”来衡量系统健康度。

    当这些工程(自动化、标准化)的水平达到一定高度后,我们才有望向智能化方向发展。

    故障定位又称为告警关联(Alarm Correlation)、问题确定(Problem Determination)或根源故障分析(Root Cause Analysis),是指通过分析观测到的征兆(Symptom),找出产生这些征兆的真正原因。

    在实践中通常用于故障定位的机器学习算法有关联规则和决策树。

    还有很多方法,但笔者也在探索中,所以无法推荐一个“最佳”方法。究竟什么算法更适合,只能取决于实践中的效果了。

    需要注意的是,并不是用了人工智能或机器学习,故障定位的效果就一定很好,这取决于很多因素,比如特征工程、算法模型、参数调整、数据清洗等,需要不断地调整和学习。还是这句话:智能化的效果不仅仅取决于算法,工程能力也很重要,而且好的数据胜过好的算法。


    本文选自《智能运维:从0搭建大规模分布式AIOps系统》,作者彭冬、朱伟、刘俊等,电子工业出版社2018年7月出版。

    本书结合大企业的智能运维实践,全面完整地介绍智能运维的技术体系,让读者更加了解运维技术的现状和发展。同时,帮助运维工程师在一定程度上了解机器学习的常见算法模型,以及如何将它们应用到运维工作中。

    图书详情:https://item.jd.com/12403162.html

    智能运维(AIOps)时代开启,一文帮你快速了解其定义与发展现状

    展开全文
  • 数据不平衡问题处理

    万次阅读 2016-05-09 00:36:12
    数据不平衡问题处理

    引言


    在分类问题中正负样本比例不平衡是很常见的问题,例如在预测CVR的时候,会有大量的负例,但是正例的数目缺不多,正负样本比例严重失衡。这是一个值得思考的问题。

    解决思路


    首先我们需要思考的是我们可否通过扩大数据集,得到更多的比例较小的样本,使新的训练集样本分布较为均衡,如果可行的话,那么这种方法值得我们考虑。
    若不可行的话,可以试着从如下两个角度出发考虑:

    • 数据的角度
    • 算法/模型的角度

    数据的角度


    故名思议,从数据的角度出发就是,想办法使得数据的比例较为均衡,可以做的是对数据进行采样。

    • 欠采样
    • 过采样

    欠采样和过采样都是随机采样,欠采样选择少量的多数类样本与少数类样本构成新的训练样本,但是若少数类样本确实太少的话,不建议使用这种方法,虽然使得样本整体的比较均衡,但是会由于样本数太少会导数信息缺失,让某些特征的不能很好的表现出来,使得欠拟合。过采样相反,是在少数类样本中做随机采样,扩大少类样本的数量,但是由于数据量的提升使得训练过程的计算量增加,也可能导致过拟合问题。


    EasyEnsemble算法

    考虑到欠采样可能导致信息缺失的缺点,我们提出了一种集成学习的方法–EasyEnsemble算法
    算法原理:
    从多数类中有放回的随机采样nnn次,每次选取与少数类数目近似的样本,那么可以得到nnn个样本集合记作{S1,S2,...,Sn}\{S_1,S_2,...,S_n\}{S1,S2,...,Sn},然后其中的每一份与少数类样本结合组成nnn训练样本{D1,D2,...,Dn}\{D_1,D_2,...,D_n\}{D1,D2,...,Dn},然后再每一个训练集上得到一个模型,最后取这nnn个模型的均值


    SMOTE算法

    考虑到过采样可能导致过拟合的缺点,提出了一种合成少数类过采样技术—SMOTE算法
    算法的原理:
    对少数类的样本做KNN算法,求出他的K近邻为SknnS_{knn}Sknn,然后从这K个邻居中选择若干样本,若少数类的样本为xxx,从K近邻中选择的样本为,x′x^{'}x
    xnew=x+rand(0,1)∗(x′−x) x_{new}=x + rand(0,1)*(x^{'}-x) xnew=x+rand(0,1)(xx)
    注意点:

    1. 求KNN的时候是对全集SSS上求而并不是仅选出xxx 在少数类集的K近邻。
    2. xxx应该选少数类边界上的一些数据,即K2<S∩Sknn<K\frac{K}{2}\lt S \cap S_{knn} \lt K2K<SSknn<K

    其他的一些方法

    • 换一种思路,将少数类样本看成异常,将其转换成一个异常检测的问题,异常检测

    算法的角度

    1. 重构训练集的方法。不改变已有算法,而是根据样本的不同错分代价给训练集中的每一个样本赋一个权值,接着按权重对原始样本集进行重构。
    2. 引入代价敏感因子,设计出代价敏感的分类算法。通常对小样本赋予较高的代价,大样本赋予较小的代价,期望以此来平衡样本之间的数目差异。

    代价敏感学习方法


    数据不平衡情况下的评估指标

    在数据不均衡情况下我们如果参考准确率,和召回率的话不能很好的衡量模型的性能。
    我们可以参考一下几个指标:


    总结

    这其实都是一些方法论的东西,具体的选择哪一种方法,还要依据实际的情况来定,希望能够活学活用。


    参考资料

    SMOTE算法
    EasyEnsemble算法
    大牛的分析1
    大牛的分析2
    专业的数术语


    更多信息/快速联系博主

    快速联系博主

    展开全文
  • 网络故障排查的思路和方法

    千次阅读 2019-12-19 18:19:21
    介绍网络处理思路和方法前,先说明网络故障处理原则: 恢复业务为首要目的。 避免处理过程中产生更大故障。 1 网络故障排错思路 网络故障发生时, 可以按照收集信息、分析现象,提出假设,验证假设,分析根因、...
  • 客户提出的问题问题的解决思路

    千次阅读 2008-09-12 15:46:00
    题目的范围太广,没有具体到什么问题,先不管题目的范围有多大,还说说问题的提出解决的思路。 我发现我的一些同事在碰到问题总是不能独立解决,或者说不知道怎么解决,没办法只好请他们的主管来帮忙解决,...
  • Android 滑动冲突问题的简单解决思路

    千次阅读 2015-12-09 15:33:46
    其实之所以《从源码角度分析android事件分发处理机制》这篇博客,是因为在此之前一个android群友遇到一个滑动冲突问题,然后帮助其解决过后才想起来要仔细分析研究,并完成了文章开头索索的那篇博客。。 该群友的...
  • 问题解决思路和方法应用建议提前到这里的想法也很简单,希望能提前给大家一些小建议,对于某些容易出错的地方也先给大家打个预防针,这样在理解后续相应机器学习算法之后,使用起来也有一定的章法。 ## 2.机器学习...
  • Android闪屏问题的分析思路

    千次阅读 2016-06-06 10:15:20
    原文链接:... ===================================================================================================== 闪屏问题作为Android的一类常见问题,原因复杂多样.我们在这里整理一下如何分析
  • 图形图像处理-之-任意角度的高质量的快速的图像旋转 上篇 纯软件的任意角度的快速旋转 HouSisong@GMail.com 2007.04.26 (2009.03.09 可以到这里下载旋转算法的完整的可以编译的项目源代码: ...
  • 跨域问题解决思路 使用jsonp方式解决 使用cors解决 使用nginx代理解决 这里不讨论jsonp的方式,主要讨论cors代理方式。 cors方式 通过服务端设置接口响应头Header允许接口被跨域请求,接口做如下设置即可: ...
  • 角度人脸识别简单介绍

    千次阅读 2018-08-18 10:44:13
    实际上,当人脸角度和采集的角度比较一致(角度较小的偏转)时,才有较精确的结果。 关键点: 1、2D图像导致人脸比对困难。 2、如何使人脸角度偏转。 思路分析: 直接在数据库比对。 ...
  • 研究思路

    千次阅读 2017-09-21 21:01:34
    就是从实际的问题出发,对原有的方法进行研究探索,再想办法在原方法的基础上进行调整,又或者是创造一种新的方式,来达到不差于原方法的效果。 与传统方法相比,新的方法往往有自己特有的优势。另一方面,新的...
  • 性能优化的思路和步骤

    万次阅读 2017-10-18 12:53:44
    我的技术公众号,有兴趣可以...写blog写代码一样,刚开始都是不完美的,需要不断的修正重构,如果大家在阅读本blog中发现任何问题和疑问,都欢迎讨论或拍砖。 1 性能调优简介 1.1为什么要进行性能调优? ...
  • [深度学习技巧]·数据类别不平衡问题处理

    千次阅读 多人点赞 2019-03-11 14:03:39
    数据类别不平衡问题处理 转载地址 1.什么是类别不平衡问题 如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要...
  • 解决这一问题的基本思路是让正负样本在训练过程中拥有相同的话语权,比如利用采样与加权等方法。为了方便起见,我们把数据集中样本较多的那一类称为“大众类”,样本较少的那一类称为“小众类”。  解决方式分为:...
  • 语音识别的降噪思路和总结

    万次阅读 多人点赞 2019-03-13 16:31:16
    噪声问题一直是语音识别的一个老大难的问题,在理想的实验室的环境下,识别效果已经非常好了,之前听很多音频算法工程师抱怨,在给识别做降噪时,经常发现WER不降反升,降低了识别率,有点莫名其妙,又无处下手。...
  • 编程:通过摄像头从不同角度拍摄一个物体,分析处理得到的图片信息,得到物体的相关数据,然后绘出这个三维物体的模型。需要注意的一点是距离与物体大小的关系,这里你可以保持物体与摄像头距离不变以降低难度!另外...
  • 从另一个角度看大数据量处理利器:布隆过滤器

    千次阅读 热门讨论 2012-05-06 13:49:21
    思路:从简单的排序谈到BitMap算法,再谈到数据去重问题,谈到大数据量处理利器:布隆过滤器。 情景1:对无重复的数据进行排序 @给定数据(2,4,1,12,9,7,6)如何对它排序?  方法1:基本的排序方法包括...
  • 2021华中杯A题思路点播

    万次阅读 多人点赞 2021-04-30 23:16:48
    赛题思路更新中... ...0引言1、数据处理读入2、赛题分析 0引言 华中杯赛题已于2021年4...编程语言不重要,关键是处理思路。其实大部分工作excel就可以解决。低年级的同学不用太过纠结。 思路会持续更新三天,大家可以关
  • 下面简要介绍下类、对象、方法实例变量的概念。 对象:对象是类的一个实例,有状态行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。 类:类是一个模板,它描述一类对象...
  • 目录 写在前面的话 题目分析 【数据清洗】 ...本篇博文为博主参加完美赛两天后所写,是否获奖并不知道,模型不算太优秀,本篇只在编程手实现模型的角度来写,记录参赛过程中遇到的问题及解决方法、
  • 定义图像处理中不适定问题(ill posed problem)或称为反问题(inverse Problem)的研究从20世纪末成为国际上的热点问题,成为现代数学家、计算机视觉图像处理学者广为关注的研究领域。数学物理上的反问题的研究...
  • 文章目录简单的过采样欠采样过采样改进(smote算法)欠采样改进方法一:模型融合 (bagging的思想 )方法二:增量模型 (boosting的思想)样本权重(sample weight)将二分类问题转换成其他问题使用其他评价指标...
  • 浅谈12306核心模型设计思路和架构设计

    万次阅读 多人点赞 2017-11-17 09:36:15
    浅谈12306核心模型设计思路和架构设计 出处:观察者网站+cnblogs 网址:http://m.guancha.cn/Science + http://www.cnblogs.com/netfocus 1月11日起,12306网站开始销售除夕当日火车票。每到此时,铁路...
  • 欢迎来到Altaba的博客 2018年6月8日今天在维护老版的...这个项目我是维护的,维护拼接字符串这块真的好累呀)简单介绍下自己平时改BUG思路问题来了首先是要找到问题所在(此处省略10000字),逐步缩小范围,然后...
  • 多线程问题处理

    万次阅读 2015-03-25 22:05:58
    多线程编程为程序开发带来了很多的方便,但是也带来了一些问题,这些问题是在程序开发过程中必须进行处理问题。   这些问题的核心是,如果多个线程同时访问一个资源,例如变量、文件等,时如何保证访问安全的...
  • 图像处理中不适定问题

    千次阅读 2014-10-22 17:42:59
    图像处理中不适定问题(ill posed problem)或称为反问题(inverse Problem)的研究从20世纪末成为国际上的热点问题,成为现代数学家、计算机视觉图像处理学者广为关注的研究领域。数学物理上的反问题的研究...
  • 我今天就利用自己的工作经验从MySQL DBA的角度来简单分析一下这个问题。  首先我们得区分这种查询慢或者操作慢发生的频率怎么样。按理来说这种状况不会经常发生,一个产品上线前都有专门的QA团队对其进行功能测试/...
  • ),换句话说,为了使建模问题更易于处理,我们转而训练参数化的函数,根据前面的符号来预测下一个符号,并使用附加到原始上下文的新生成的符号作为新上下文重复此操作。接着,我们可以通过对这些条件概率求积,得到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,538
精华内容 55,415
关键字:

处理问题的思路和角度