分类不平衡对软件缺陷预测模型性能的影响研究(笔记)

分类不平衡对软件缺陷预测模型性能的影响研究

  • 摘要

    分类不平衡 : 不同 类别间样本 数量分布不均衡的现象

  • 分类不平衡影响分析方法:

    1. 设计一种 新数据集构造算法

      • 将 原不平衡数据集 转换为 一组 不平衡率依次递增的新数据集
    2. 然后,选取 不同的 分类模型 作为 缺陷预测模型分别对 构造的 新数据集 进行预测, 采用 AUC 指标来度量 不同预测模型 的 分类性能。
    3. 最后, 采用 变异系数C·V 来评价 各个预测模型分类不平衡时的性能稳定程度
  • 结果:

    • C4.5、 RIPPER 和 SMO 三种预测模型的 性能: 随着不平衡率的 增加 而 下降
    • 代价敏感学习集成学习 能够有效 提高它们在分类不平衡时性能性能稳定程度
    • 更稳定: 逻辑回归朴素贝叶斯随机森林
  • 一些解释:

AUC ( Area under curve )

  • 概念: 一个模型评价指标,只能用于二分类模型的评价 (AUC和logloss基本是最常见的模型评价指标),可以避免 把 预测概率 转换成 类别
  • ROC 曲线:基于样本的 真实类别预测概率 来画的。
  • 参考:https://www.zhihu.com/question/39840928
  • 二分类问题

二、解决分类不平衡的方法

  1. 采样法:

    • 过采样(上采样): 增加少数样本
    • 欠采样(下采样): 减小多数样本
  2. 代价敏感学习

    • 正确识别 少数类 比 正确识别 多数类 更有价值

      • 即:错分少数类 比 错分多数类 要付出更大的 代价
      • 为不同的类别 赋予 不同的错分代价 提供少数类的 分类性能
  3. 集成学习

    • 通过 聚集 多个模型的 预测结果 来提高 分类性能
    • 集成模型性能 要 优于 单个模型性能
    • 注: 并不是为了解决分类不平衡问题提出的,但是处理其取得较好结果

三、预测模型

  1. 目标: 掌握 不同预测模型 在 分类不平衡时的 性能稳定程度,则可在 实际应用中 针对性地 选择合理的 预测模型。
  2. 提出 分类不平衡影响分析 方法 ==> 评价 分类不平衡对软件缺陷预测模型性能 的影响程度

四、 分类不平衡影响分析法 (摘要已写)

  1. 构造 一组 不平衡率依次递增新数据集
  2. 对构造的新数据集进行 预测
    • ROC 曲线下方的面积 - AUC => 评价 不同预测模型的分类性能
    • 采用 变异系数 C · V => 评价不同预测模型 在分类不平衡时 性能稳定程度

五、预测模型介绍

  1. C4.5

    采用新型增益率 选择属性时偏向选择选择值多的属性 的 问题

  2. K-Nearest Neighbor (KNN)

    K 近邻算法 是 一种 基于实例分类算法

    基本思想: 一个样本应与其 特征空间最近邻的k个样本 中的 多数样本 属于同一个类别。

    k的取值 会 对分类结果产生影响。

  3. Logistic Regression (LR)
  4. MultiLayer Perceptron(MLP)

    多层感知器 是 一种 前反馈人工神经网络模型

    可以解决 线性不可分问题

  5. Naive Bayes (NB)

    朴素贝叶斯 基于贝叶斯定理的 概率模型

    目前使用最广泛 分类模型

  6. Random Forest (RF)

    随机森林 是 一种 由 多棵决策树组成集成学习模型

    对于分类问题,随机森林的输出 是 由 多颗决策树投票 得到的

    对于回归问题,依据多颗决策树的 平均值 得到的

  7. RIPPER

    RIPPER 是一种 基于规则的 分类算法

    通过 对 命题规则 进行 重复增量修剪 使得产生的错误最少,其能有效处理噪声数据

  8. SMO

    SMO 是一种 实现 支持向量机(Support Vector Machine, SVM) 的 序列最小优化(Sequential Minimal Optimization)

    二次型求解问题 转换为 多个优化子问题, 并采用 启发式搜索策略 进行 迭代求解, 加快算法收敛速度。

六、性能影响

  • 分类不平衡影响分析方法

    1. 新数据集构造
      % 需要一组 具有 不同不平衡率的  数据集
      % 这里设计了 一种  新数据集 构造算法
      % 原不平衡数据集  转换为  一组不平衡率依次递增的  新数据集
      function newDataSet = ConvertNewSet(DataSet)
      ?
      DefectSet = ConvertToDefect(DataSet);           % 有缺陷样本
      NonDefectSet = ConverToNonDefect(DataSet);      % 无
      n1 = DefectSet.size();             % 有缺陷样本数 n1
      n2 = NonDefectSet.size();          % 无
      r = Math.floor(n2 / n1);           % 计算不平衡率
      newDataSet = DefectSet;            % 用有缺陷样本 初始化 newDataSet
      restNonDefectSet = NonDefectSet;   % 数据集
      ?
      while restNonDefectSet != NULL
          restNonDefectSet = RandomTreat(restNonDefectSet);  % 对其 进行随机化处理
          if restNonDefectSet.size() >= 2 * n1
              % 从 restNonDefectSet 中随机选取 n1 个样本, 并保存到 newDataSet
              tmp = RandomSelectSample(restNonDefectSet, n1);
              newDataSet.append(tmp);
              % 从restNonDefectSet 中 移除 n1 个样本
              restNonDefectSet.remove(tmp)
          else
              % 将restNonDefectSet的剩余样本 保存至 newDataSet
              newDataSet.append(restNonDefectSet);
              restNonDecfectSet = NULL;
          end
          save newDataSet ;   % 保存新数据集
      end
      % 返回新数据集
      newDataSet;
    • 以上算法是用 欠采样法 来实现的
    1. 预测模型评价

      基本模型:在 Weka 上实现 (五的8个预测模型) (默认参数)

      代价敏感模型 ===> 进行预测,并计算各个预测模型的变异系数C·V

      集成模型

      目标:

      研究 基本模型 在分类不平衡情况性能稳定程度,对于不稳定的预测模型,再进一步探究他们的 代价敏感模型集成模型 的性能稳定程度

      采用ROC曲线下方的面积 - AUC 指标进行评价.

      ROC :描述分类模型 真正例率TPR 和 假正例率FPR 之间关系的一种图形化方法。

  • 实验设计

  1. 哪些模型性能更稳定?
  • 不稳定的模型,代价敏感学习是否能提高其性能的稳定程度?
  • 集成学习是否能进一步提高其性能稳定程度?
  1. 采用AUC指标评价模型
  2. 采用10次10折交叉验证

参考:https://www.zhihu.com/question/29350545

  • 实验结果与分析

C·V 值越大,AUC值离散程度 越大,性能越不稳定。

结果:C4.5,RIPPER, SMO 三种预测模型在大部分 数据集上的 C·V 值相对较高 ==》 不稳定

时间: 2024-11-09 02:57:31

分类不平衡对软件缺陷预测模型性能的影响研究(笔记)的相关文章

MySQL自身对性能的影响

MySQL体系结构 想要了解MySQL自身对性能的影响,就需要先熟悉MySQL的体系结构和常用的存储引擎.MySQL并不完美,却足够灵活,能够适应高要求的环境,例如Web类应用.同时,MySQL既可以嵌入到应用程序中,也可以支持数据仓库.内容索引和部署软件.高可用的冗余系统.在线事务处理系统(OLTP)等各种应用类型. MySQL最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离

smarty对网页性能的影响--开启opcache

在上一篇<smarty对网页性能的影响>中,默认没有开启opcache,于是我安装了一下zend opcache扩展,重新实验了一下,结果如下: 有smarty 用apache的ab命令进行压力测试,并发10个,不算大:同时用sar命令进行cpu利用率的统计.命令如下: ./ab -c 10 -n 100000 http://cq01-rdqa-dev072.cq01.baidu.com:8008/index.php sar -u 2 1000 >/tmp/smarty.sar &

HTTP的持久连接对Web服务性能的影响

我们的 Web 页面通常有很多对像(Object)组成.如:jss 样式表.图片.scripts.文档等.所以用户浏览一个网页文件时候,要向 Web 服务器发送多次请求(要从服务器上获取一个Object就要向服务器发送一个请求),浏览器根据 jss 样式表把从服务器获取的这些html页面对象合成一个完整的html页面展示给用户.        最早我们的浏览器是单线程的,意味着一次只能向浏览器发送一个Object请求,等到该Object传输完成了,再向服务发送第二个Object的请求.我们把它称

京东如何处理数据中心网络对应用性能的影响

?随着现代数据中心规模的不断扩张,网络拓扑和路由转发变得越来越复杂.传统的数据中心使用大型机和小型机,网络规模相对较小,普通的机框式交换机就能满足网络的需求.随着CLOS集群架构的普及,标准的x86服务器集群以低成本和高扩展性逐渐取代大型机和小型机而成为数据中心的主流. 下图就是一个典型的基于CLOS架构的数据中心解决方案,在这样的大规模网络中,如何让数据在传输过程中能以最快的速度从发送端到接收端,成为网络性能调优的关键因素. 京东IT资源服务部举办的未来数据中心核心技术研讨会上,京东人工智能,

浅谈 js 下 with 对性能的影响

这几天多次看到有博主们在写 with 的文章,这货确实非常方便,但是却是个性能杀手,所以一直都是上不得台面的.那么他究竟会让效率低下到什么程度呢?先来看下 with 是如何的便捷吧.. // 正常调用 console.log(location.host); console.log(location.pathname); // 在 with 下 with (location) { console.log(host); console.log(pathname); } 如果不影响性能,确实是非常霸气

SQL Server中多表连接时驱动顺序对性能的影响

原文:SQL Server中多表连接时驱动顺序对性能的影响 本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 最近在SQL Server中多次遇到开发人员提交过来的有性能问题的SQL,其表面的原因是表之间去的驱动顺序造成的性能问题,具体表现在(已排除其他因素影响的情况下),存储过程偶发性的执行时间超出预期,甚至在调试的时候

软件对存储性能的影响&#8203;

存储系统的核心是软件,在磁盘存储时代,存储系统软件设计的好坏似乎对性能的影响并不是很大,很多存储软件的设计并不会去考虑计算机的体系架构,也不用去关心操作系统调度.内存拷贝等因素带来的性能影响.对于磁盘存储,事情的确是这样的,原因在于磁盘的性能远远低于CPU处理和访存性能.磁盘存储的性能瓶颈点就在于磁盘本身,因此过多的体系结构级别.竞争资源同步的优化,不会对存储性能带来显著优化. 在很久以前做过这方面的实践,当时觉得临界区的资源竞争会对IO性能造成影响,因此,对我们做的一套存储虚拟化系统进行锁资源

JAVA 异常对于性能的影响

陶炳哲 - MAY 12, 2015 在对OneAPM的客户做技术支持时,我们常常会看到很多客户根本没意识到的异常.在消除了这些异常之后,代码运行速度与以前相比大幅提升.这让我们产生一种猜测,就是在代码里面使用异常会带来显著的性能开销.因为异常是错误情况处理的重要组成部分,摒弃是不太可能的,所以我们需要衡量异常处理对于性能影响,我们可以通过一个实验看看异常处理的对于性能的影响. 实验 我的实验基于一段随机抛出异常的简单代码.从科学的角度,这并非完全准确的测量,同时我也并不了解HotSpot 编译

C++ 性能剖析 (四):Inheritance 对性能的影响

(这个editor今天有毛病,把我的format全搞乱了,抱歉!) Inheritance 是OOP 的一个重要特征.虽然业界有许多同行不喜欢inheritance,但是正确地使用inheritance是一个应用层面和架构层面的重要设计决定. 大量使用inheritance,尤其在类似std container 中使用,会对程序性能产生何等影响呢? 从我个人的经验来看,constructor对创建具有深层inheritance链的class,有很大的影响. 如果应用容许,最好使用没有constr