精华内容
下载资源
问答
  • 摘要本文简述了模型集成有关的问题。模型集成是为了系统建模,其研究始于模型管理,但前者扩展了后者的范围,特别是在对复杂的社会经济或环境问题建模时。怎样实现模型集成?本文总结了3种方法,自上而下,自下而上...
  • 基于本体的模型集成

    2021-02-22 17:27:46
    基于本体的模型集成
  • 面向系统建模的模型集成.doc
  • 目前客户流失预测任务中常用的模型集成方法采用传统机器学习模型作为基学习器。而传统机器学习模型相比于深度学习模型,存在无法对时序数据进行有效建模、特征工程对模型效果影响较大等缺点。针对这些问题,提出基于...
  • 实用标准文案 CMMI 全称是 Capability Maturity Model Integration 即软件能力成熟度模型集成 ? 中文名称 软件能力成熟度集成模型 CMMI 1.3 是 2010 年 11 月 SEI 发布的 CMMI 模型的最新版本 CMMI 1.3 包括 CMMI ...
  • 面向系统建模的模型集成的介绍.doc
  • 浅谈面向系统建模的模型集成.doc
  • CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成。CMMI是CMM模型的最新版本。早期的CMMI(CMMI-SE/SW/IPPD),SEI在部分国家和地区开始推广和试用。随着应用的推广与模型本身的发展,演绎...
  • 模型集成(Model Ensemble)

    千次阅读 2020-10-27 18:30:58
    模型集成(Model Ensemble) 模型集成是融合多个训练好的模型,基于某种方式实现测试数据的多模型融合,这样来使最终的结果能够“取长补短”,融合各个模型的学习能力,提高最终模型的泛化能力。近年来,model ...

    模型集成(Model Ensemble)

    模型集成是融合多个训练好的模型,基于某种方式实现测试数据的多模型融合,这样来使最终的结果能够“取长补短”,融合各个模型的学习能力,提高最终模型的泛化能力。近年来,model ensemble已成刷榜神器。它可以应用在图像分割、分类、检测等领域。
    模型集成方法主要应用在几个模型差异性较大,相关性较小上。这样效果比较明显。
    常用的model ensemble方法有:投票(voting), 平均(averaging), 堆叠(Stacking),非交叉堆叠(Blending)

    投票法(Voting)

    投票法即我们常见的“少数服从多数”原则,我们可以统计在多个模型的分类结果,哪个类别频数高,即选择哪个类别。假设有五个模型,则很难对某一数据的分类为1,1,1,2,2。则投票结果为1.

    平均法(Averaging)

    平均法在回归问题及含阈值调节的场景更多一些。它的主要操作是对于多个模型计算的结果求平均作为最终的结果

    堆叠法(Stacking)

    堆叠法可以总结内如下三个步骤:

    • 模型内交叉验证(cross validation)
    • 模型间特征组合
    • 新的特征组合训练新的模型
      堆叠法可以理解为级联网络,上面的第一、二个步骤组合成为第一阶段,上面的第三步骤为第二阶段
    模型内交叉验证

    每一个模型单独进行交叉验证训练,在每折测试集上进行infer,最终得到整个数据集的概率图

    模型间特征平均

    假设有N个模型,则上一步会得到N个概率图。求这N个概率的平均图

    新的特征组合训练新的模型

    以第二步得到的平均图作为训练数据,label用最开始标注好的label,重新进行训练

    非交叉堆叠(Blending)

    Blending的出现是为了解决Stacking在交叉验证阶段出现的数据泄露,容易产生过拟合,Blending直接使用不相交的数据集用于不同层的训练,通俗的理解就是不做交叉验证,而是将训练集分成3:7两个部分,70%作为训练集,对30%验证集和测试集进行预测,第二层是对30%验证集的预测结果进行训练,不存在数据泄露的问题。但是存在30%验证集数量较少,容易过拟合的问题,所以在实际融合中,使用Stacking还是Blending是有很多Trick的。

    展开全文
  • 为了完成比较复杂的空间作战实验任务,通常需要集成若干个实验模型,构造功能较强的模型系统。该文介绍了空间作战实验类型和模型类型,提出了集成空间作战实验模型的3种...另外,还讨论了基于高层体系结构的模型集成方式。
  • Capability Maturity Model Integration即软件能力成熟度模型集成CMMI全称是软件能力成熟度集成模型中文名称 ?CMMICMMI 1.3包括发布的CMMI模型的最新版本CMMI 1.3是2010年11月SEI 版CMMI服务模型1.3采购模型1.3版...
  • 模型集成(Ensemble)

    万次阅读 2018-01-24 15:11:49
    1. 模型集成的框架   模型集成的框架是这样的,有很多种分类器,它们应该是不同的,可以是不同的机器学习方法,也可以是相同的方法。但是它们应该是互补的,也就是说不是互相相似的。没有重分类器都应该有自己的...

    1. 模型集成的框架

      模型集成的框架是这样的,有很多种分类器,它们应该是不同的,可以是不同的机器学习方法,也可以是相同的方法。但是它们最好是互补的,也就是说不是互相相似的。每种分类器都应该有自己的位置。

    2. Ensemble:Bagging

      在本节中会以某一种机器学习方法举例,但是实际上这种集成方法适用于任何的机器学习方法。

    2.1 回顾偏置与方差的关系

      偏置与方差的关系如下图所示

    除了可以很完美进行工作的机器学习模型,剩下的模型大致可以分为两种情况,即欠拟合(Underfitting)和过拟合(Overfitting)。欠拟合的特点在于它具有比较小的方差,但是却有着比较大的偏置(即与正确答案的偏离方向);而过拟合虽然有着较小的偏置,但是却有着较大的方差,将这两种情况画在一起如上图所示,随着模型复杂程度的增大,模型的效果会先提高后降低。

    2.2 Bagging的方法

      Bagging的方法如下图所示

    他利用可放回抽样总共获得N个样本,之后训练N个分类器,对于回归问题取这N个分类器的均值,对于分类问题让这N个分类器进行投票,

      主要注意的是,这种方法主要用在抑制模型过拟合的问题,比如说决策树。这种方法在NN上用的并不多,因为NN实际上没有想象中那么容易过拟合,它往往是在训练集上不能获得100% 的正确率的。

      下面是一个使用决策树进行分类的例子

    将决策树化成图形的形式如上图所示,在形成一个决策树的过程中需要考虑一些参数,比如说分支数,分支的标准,终止准则,基本假设。

      下面是从图像中得到初音剪影的例子

    在这里只是使用了一个单一的决策树,上面是不同深度获得效果,可以看到当树的深度达到20层的时候获得了很好的效果。

    2.3 随机森林(Random Forest)

      随机森林便是 bagging 的一个很好的例子,如下图所示

    决策树很容易在训练集上获得0错误率的结果,因为如果一个叶子节点对应一个例子的话,很容易会得到这样的结果。这是就要对决策树采用 bagging 的方法,实际上也就是使用了随机森林的方法。在随机森林中仅仅进行重采样是不够的,因为仅仅使用重采样会使训练出的树之间很像;为了树之间更不像,还要决定哪些特性用于分类,哪些特性不用于分类。如上面的表格所示,第一个分类函数仅仅使用 x1,x2 两个数据,后面的都是一样的,只是选择了一些数据,所以在使用验证集的时候可以直接使用那些没有用来训练的数据进行测试,比如说使用f2 +f4组成随机森林,用数据x1进行检验,这种方法叫做 Out-of-bag,他看不在 bag 中的例子的表现如何,来判断现在模型的表现如何,这种方法的一个好处在于,它可以不用再事先切一个验证集出来,直接使用没有被用到的数据进行验证就好,随机森林的一个的实验结果如下图所示

    这里总共使用了100个树构成的随机森林,从实验结果中可以看到,较为浅层的树仍然不能获得很好的效果,但是它可以使得结果更为平滑。

    3. Ensemble: Boosting

      与 Bagging 有所不同,Boosting的目的不是为了抑制过拟合,而是为了提高弱的分类器的性能。它可以保证,只要你使用的分类器在训练数据上的误差小于50%,通过Boosting 之后你得分类器的正确率最终总会到0。

      Boosting 的具体框架如下

    首先他会获得第一个分类器 f1(x) ,然后找到第二个分类器 f2(x) 来帮助第一个分类器 f1(x) 。这个第二个分类器是什么样的机器学习算法都好,只要能够帮到 第一个分类器 f1(x) 提高整体的性能;然而如果 f2(x) f1(x) 是很相似的话,那么它们就没有办法帮助他很多,我们希望我们得到的 f2(x) f1(x) 是互补的。然后我们就得到了第二个分类器 f2(x) ,最后组合所有的分类器。然而这其中有很重要的是,分类器是需要按顺序学习的,不像之前的分类器是可以分开学习的。

    3.1 那如何获得不同的分类器呢?

      关键的思想在于获得不同的训练数据。重采样虽然可以获得不同的训练数据,但是每一个数据被采样的次数一定是整数,我们没有办法将一个数据采样2.1次或者0.1次。所以这个时候就要采用对数据重新赋权重的方法来获得不同的数据,如下图所示

    假设原始的权重都是1,更新之后的权重为图中所示的数,那么损失函数也要进行同样的改变,在计算某一个数据的损失值之后还要乘以他的权重。

    3.2 Adaboost的思想

      Adaboost的思想在于它使用令分类器 f1(x) 失败的数据进行训练得到 f2(x) ,之所以 f2(x) 所用的数据要使 f1(x) 失败,其主要原因是为了使 f1(x) f2(x) 互补 。那么如何找到这样的数据呢?

      我们定义 f1(x) 在它的训练集上的误差为

    分子的部分已经上面说过了,对于分母 Z1 ,他是所有权重的和,上标 n 代表这是第 n 个数据,下标代表这是使用在第几个弱分类器 f(x) ,其中的分类误差是小于0.5的,因为如果分类误差大于0.5,那么直接反过来就好了。

      而所谓的是原来的分类器在新的数据上失败的含义就是,原来的分类器在新的数据集(调整完权重的数据集)上的分类的正确率为50%,即

    使 f1(x) 的效果在 f2(x) 所对应的新数据集上如同是在随机猜测一样。一个具体的例子如下图所示

    假设原始数据的权重都是1,并且在这个权重下训练出了一个分类器 f1(x) ,这个时候计算分类误差就是0.25。之后我们需要修改训练数据的权重使得 f1(x) 失效(即分类正确率为0.5)。具体做法是将分类正确的数据的权重降低,而将分类错的权重增大,这就使得原来的分类器虽然分类还是正确的,但是经过了加权求和之后,原始分类器的就失效了(正确率只有0.5)。

      所以训练数据的权重更新方法如下图所示

    我们将分类正确的数据的权重除以一个大于1的数 d1 ,对于分类错误的数据乘以一个相同的权重 d1 。那这个权重具体怎么算呢?计算的方法如下,具体推导过程省略

    其中的 ϵ 是在这个分类函数上的误差,因为 ϵ<0.5 ,所以计算出的 d1>1

    3.3 Adaboost的算法流程

      以二分类为例,Adaboost的算法流程如下图所示

    给定一些训练数据,标签是+1和-1,初始的权重都是1 ,总共由 T 个弱分类器组成 Adaboost。首先使用权重为 ut 的数据训练出第 t 个分类器,这时 ϵt 是用权重为 ut 的数据训练出第 t 个分类器的误差,之后计算 dt 。如果分类正确就除以常数 dt ,如果分类错误就乘以常数 dt ,以此来更新 ut+1

      如果将 d1 表示为 αt=ln((1ϵt)/ϵt) 会使得分类的过程表述为更为简单的形式,参数更新的过程可以表示为

    将上述分为两种情况讨论的过程表示为实际标签与预测标签的乘积的一个等式,所以不直接使用 d1 ,而是使用其指数的形式主要是为了计算表达简单清晰。

      在将得到的 N 个模型集成在一起的过程中,有以下两种方法

    其中第一种方法“Uniform weight”是等权重地看待每一个的结果,这是一种比较不好的方法,更好的方法是将它们按照权重 αt 组合在一起,如上图“Non-niform weight”所示。这里使用 αt 作为权重直觉上是合理的,因为 αt 越大说明其所对应的弱分类器的错误率越小,也就是说分类效果越好,它就应该具有较大的权重。所以分类器的错误率越小,在最后投票的时候权重就越大。

      下面将以一个具体的例子进行说明,在这里我们总共使用3个分类器,分类器使用只画一条线的 decision stump

    首先进行分类,边界如左图所示,这个时候的误差是0.3,计算 d1 ,之后将分类正确的数据除以 d1 ,将分类正确的乘以 d1 ,更新数据的权重如上图右部分所示,此时第一分类器的权重就是 α1

      之后根据跟新权重后的数据训练第二个分类器

    之后如图画一条分类的界限,其中左侧被划分为正例,而右侧划分为负例,之后仍然计算错误分类率等参数,并更新训练集数据。其中计算分类率的方法不是将三个0.65相加在除以3,而是相加之后除以全体的权重。

    然后将这三个分类器按照权重组合起来,如下图所示

    3.4 Adaboost 的相关证明

      在这里我们需要证明的是,随着T的逐渐增加,H(x)在训练集上获得越来越小的错误率。其中

    具体过程略。

    3.5 Adaboost 训练结果说明

      在使用 Adaboost 的过程中,常常会出现如下的情况

    我们可以看到,在训练集上结果很快0错误;但是更为奇怪的是在训练数据已经达到最佳的情况下,继续训练的话仍会提高测试集上的正确率。通过分析模型的函数我们可以发现如下的规律。

    图中的横坐标是 margin ,具体是指函数间距 yg(x) ,其中的 h(x) 是最后得到的强分类器;纵坐标是累计分布,我们可以看到随着迭代次数的增加,分类正确率的曲线随着执行 Adaboost 次数的增多,曲线一直再向右推,意味着再尽力的到越来愈好的结果。

      如下图所示

    所以虽然看来分类正确率已经达到了100%,但是他的 margin 仍然没有达到最佳,增加 Adaboost 迭代次数仍然会增强模型在测试集上的表现。上面的图表示了不同的损失函数的 up bound ,我们可以看到 Adaboost 即使在分类正确的情况下仍会继续加大的 margin。

      同样对于初音的剪影进行分析,在这里我们使用 Adaboost + Decision Tree 的方法,其中所有的决策树都是深度为 5 的决策树,实验结果如下图所示

    4. Ensemble: Stacking

      如果建立了对个模型进行投票的话,常用的一种方法是直接进行等权重的投票,如下图所示

    但是如果这个时候小毛的模型是表现最差的,采用等权重的方法进行投票的话,明显会降低整体模型的性能。这个时候就可以采用如下的办法进行改进

    我们将这四个模型的输出作为 Final Classifier 的输入,将 Final Classifier 的输出作为最后的分类结果。在训练的过程中,将数据分为如上的四分,使用第一份数据训练这个简单的模型,之后使用黑色的数据输入之前训练的模型,然后再用他们训练 Final Classifier ,这里 Final Classifier 采用的是一个较为简单的模型,比如说逻辑回归。然后再用后面的数据进行验证和测试。

    展开全文
  • 模型集成(model ensemble)2.1Bagging2.2Stacking2.3Adaboost2.4图解模型集成3.案例总流程4.初始化工作5.数据下采样6.模型训练6.1KNN6.2 SVM-RBF6.3 SVM-POLY6.4 Logistic Regression6.5 Random Forest6.6决策边界6.7...

    1.信用卡欺诈预测案例

    这是一道kaggle上的题目。

    我们都知道信用卡,能够透支一大笔钱来供自己消费,正因为这一点,不法分子就利用信用卡进一特性来实施欺诈行为。银行为了能够检测出这一欺诈行为,通过机器学习模型进行智能识别,提前冻结该账户,避免造成银行的损失。那么我们应该通过什么方式来提高这种识别精度呢!这就是今天要说的主题,多模型融合预测。使用到的模型算法有:KNN、SVM、Logistic Regression(LR)、Random Forest

    我会讲到如何使用多模型进行融合计算(模型集成)、模型评估、超参数调节、K折交叉验证等,力求能够讲得清楚,希望大家通过这篇博文能够了解到一个完整的机器学习算法到底是怎样的,如有讲得不到位亦或是错误的地方,望告知!

    以下我们正式开始介绍。

    数据集下载:https://v2.fangcloud.com/share/a63342d8bd816c43f281dab455

    GitHub完整代码

    GitHub完整代码:

    2.模型集成(model ensemble)

    我们先从概念着手,这是我们的地基,要建起高楼大厦,首先地基要稳。

    • **多模型:**分类问题是以多个模型计算出的结果进行投票决定最终答案,线性问题以多个模型计算出来的结果求取均值作为预测数值。

    那么多模型融合存在着多种实现方法:Bagging思想、Stacking、Adaboost。

    2.1Bagging

    Bagging是bootstrap aggregating。Bagging思想就是从总体样本当中随机取一部分样本进行训练,通过多次这样的结果,进行投票亦或求取平均值作为结果输出,这就极大可能的避免了不好的样本数据,从而提高准确度。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高。一句话概括就是:群众的力量是伟大的,集体智慧是惊人的。

    而反观多模型,其实也是一样的,利用多个模型的结果进行投票亦或求取均值作为最终的输出,用的就是Bagging的思想。

    2.2Stacking

    stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型。如果是多层次的话,以此类推。一句话概括:站在巨人的肩膀上,能看得更远。

    image

    2.3Adaboost

    所谓的AdaBoost的核心思想其实是,既然找一个强分类器不容易,那么我们干脆就不找了吧!我们可以去找多个弱分类器,这是比较容易实现的一件事情,然后再集成这些弱分类器就有可能达到强分类器的效果了,其中这里的弱分类器真的是很弱,你只需要构建一个比瞎猜的效果好一点点的分类器就可以了。一句话概括:坚守一万小时定律,努力学习。

    2.4图解模型集成

    image

    3.案例总流程

    image

    1. 首先拉取数据到python中。

    2. 将数据划分成训练集和测试集,训练集由于分类极度不平衡,所以采取下采样工作,使分类比例达到一致。

    3. 将训练集送入模型中训练,同时以K折交叉验证方法来进行超参数调节,哪一组超参数表现好,就选择哪一组超参数。

    4. 寻找到超参数后,用同样的方法寻找决策边界,至此模型训练完成。

    5. 使用模型集成预测测试集,并使用ROC曲线分析法,得到模型的评估指标。

    4.初始化工作

    啥都不说,先上代码,这里需要说明的就是sklearn.model_selection这个类库,因为老版本和新版本的区别还是很大的,如果巡行报错,尝试着升级sklearn库。

    # 数据读取与计算
    import pandas as  pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 数据预处理与模型选择
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import KFold
    from sklearn.model_selection import cross_val_score
    from sklearn.metrics import confusion_matrix, precision_recall_curve, auc, roc_auc_score, roc_curve, recall_score, classification_report
    import itertools
    
    # 随机森林与SVM
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.svm import SVC
    from sklearn.neighbors import KNeighborsClassifier
    from scipy import stats
    
    import warnings
    warnings.filterwarnings("ignore")
    
    # 一些基本参数设定
    mode = 2        #投票个数阈值
    ratio = 1       #负样本倍率
    iteration1 = 1  #总流程循环次数
    show_best_c = True  #是否显示最优超参数
    show_bdry = True    #是否显示决策边界
    
    ##读取数据,删除无用的时间特征。
    data=pd.read_csv('creditcard.csv')
    data.drop('Time',axis=1,inplace=True)
    

    5.数据下采样

    先回答什么是数据下采样:

    **数据下采样:**数据集中正样本和负样本的比例严重失调,这会给模型的学习带来很大的困扰,例如,正样本有100个,而负样本只有1个,模型只是看到了正样本,而学习不到负样本,这回造成模型对负样本的预测能力几乎为0。所以为了避免这种数据倾斜,处理数据使得正样本和负样本的数量基本均等,这样的模型泛化能力才会高。

    反观数据上采样也是一样的,只不过是基准样本不一样而已。

    这里的数据处理采用下标的方式,较容易运算。

    #欺诈类的样本下标
    fraud_indices=np.array(data[data.Class==1].index)
    #进行随机排列
    np.random.shuffle(fraud_indices)
    
    #获取正常样本下标
    normal_indices=np.array(data[data.Class==0].index)
    np.random.shuffle(normal_indices)
    
    
    #划分训练集和测试集
    train_normal_indices, train_fraud_indices, test_normal_indices
    	,test_fraud_indices = split_train_test(normal_indices,fraud_indices)
    
    ##合并测试集
    test_indices=np.concatenate([test_normal_indices,test_fraud_indices])
    
    #通过下标选取测试集数据,[表示选取行,表示选取列]
    test_data=data.iloc[test_indices,:]
    x_test=test_data.ix[:,test_data.columns != 'Class']
    y_test=test_data.ix[:,test_data.columns == 'Class']
    
    #数据下采样,调用下采样函数 getTrainingSample
    x_train_undersample,y_train_undersample,train_normal_pos=getTrainingSample(
    train_fraud_indices,train_normal_indices,data,0,ratio)
    

    getTrainingSample函数如下,由于代码显示效果不行,所以以图代替,文章开头已有源代码链接,注解已写得很清楚,不需重复赘述:

    image

    6.模型训练

    6.1KNN

    #用不同的模型进行训练
    models_dict = {'knn' : knn_module, 'svm_rbf': svm_rbf_module, 'svm_poly': svm_poly_module,
    'lr': lr_module, 'rf': rf_module}
    
    #knn中取不同的k值(超参数)
    c_param_range_knn=[3,5,7,9]
    #自定义cross_validation_recall,使用循环找出最适合的超参数。
    best_c_knn=cross_validation_recall(x,y, c_param_range_knn,models_dict, 'knn')
    

    cross_validation_recall函数如下:

    image

    这里有几个概念需要解释一下,以防大家看不懂。

    • **K折交叉验证:**K折交叉验证(k-fold cross-validation)首先将所有数据分割成K个子样本,不重复的选取其中一个子样本作为测试集,其他K-1个样本用来训练。共重复K次,平均K次的结果或者使用其它指标,最终得到一个单一估测。

      这个方法的优势在于,保证每个子样本都参与训练且都被测试,降低泛化误差。其中,10折交叉验证是最常用的。

    • ROC曲线:评估模型好坏的方式,已有人解释非常清楚,此处不再赘述,欲了解请点击:

      https://www.cnblogs.com/gatherstars/p/6084696.html

    接下来就是真正的模型训练函数:

    def knn_module(x,y,indices, c_param, bdry=None):
        #超参数赋值
        knn=KNeighborsClassifier(n_neighbors=c_param)
        #ravel把数组变平
        knn.fit(x.iloc[indices[0],:], y.iloc[indices[0],:].values.ravel())
        y_pred_undersample = knn.predict(x.iloc[indices[1],:].values)
        
        return y_pred_undersample
    

    模型评估,计算召回率和auc值:

    #计算召回率和auc
    #y_t是真实值,y_p是预测值
    def compute_recall_and_auc(y_t, y_p):
        #混淆矩阵 https://www.cnblogs.com/zhixingheyi/p/8097782.html
        #  https://blog.csdn.net/xierhacker/article/details/70903617
        cnf_matrix=confusion_matrix(y_t,y_p)
        #设置numpy的打印精度
        np.set_printoptions(precision=2)
        recall_score = cnf_matrix[0,0]/(cnf_matrix[1,0]+cnf_matrix[0,0])
        
        #Roc曲线
        # https://www.cnblogs.com/gatherstars/p/6084696.html
        fpr, tpr,thresholds = roc_curve(y_t,y_p)
        roc_auc= auc(fpr,tpr)
        return recall_score , roc_auc
    

    6.2 SVM-RBF

    径向基函数(RBF)做SVM的核函数。

    欲想了解核函数:https://blog.csdn.net/v_JULY_v/article/details/7624837#commentBox

    # SVM-RBF中不同的参数
    c_param_range_svm_rbf=[0.01,0.1,1,10,100]
    best_c_svm_rbf = cross_validation_recall(x,y,c_param_range_svm_rbf, models_dict, 'svm_rbf')
    
    def svm_rbf_module(x, y, indices, c_param, bdry= 0.5):
        svm_rbf = SVC(C=c_param, probability=True)
        svm_rbf.fit(x.iloc[indices[0],:], y.iloc[indices[0],:].values.ravel())
        y_pred_undersample = svm_rbf.predict_proba(x.iloc[indices[1],:].values)[:,1] >= bdry#True/Flase
        return y_pred_undersample
    

    6.3 SVM-POLY

    多项式(POLY)做SVM的核函数。

    image

    训练函数为:

    def svm_poly_module(x,y, indices, c_param, bdry=0.5):
        svm_poly=SVC(C=c_param[0], kernel='poly', degree= c_param[1], probability=True)
        svm_poly.fit(x.iloc[indices[0],:], y.iloc[indices[0],:].values.ravel())
        y_pred_undersample = svm_poly.predict_proba(x.iloc[indices[1],:].values)[:,1] >= bdry
        return y_pred_undersample
    

    6.4 Logistic Regression

    逻辑回归模型

    # 逻辑回归当中的正则化强度
    c_param_range_lr=[0.01,0.1,1,10,100]
    best_c_lr = cross_validation_recall(x,y, c_param_range_lr, models_dict, 'lr')
    
    def lr_module(x,y, indices, c_param, bdry=0.5):
        # penalty惩罚系数
        lr = LogisticRegression(C=c_param,penalty='11')
        lr.fit(X.iloc[indices[0],:], y.iloc[indices[0],:].values.ravel())
        y_pred_undersample= lr.predict_proba(X.iloc[indices[1],:].values)[:,1]>=bdry
        return y_pred_undersample
    

    6.5 Random Forest

    随机森林模型,欲知超参数含义请点击:

    https://www.cnblogs.com/harvey888/p/6512312.html

    # 随机森林里调参
    c_param_range_rf = [2,5,10,15,20]
    best_c_rf= cross_validation_recall(X, y, c_param_range_rf, models_dict, 'rf')
    

    image

    6.6决策边界

    在具有两个类的统计分类问题中,决策边界或决策表面是超曲面,其将基础向量空间划分为两个集合,一个集合。 分类器将决策边界一侧的所有点分类为属于一个类,而将另一侧的所有点分类为属于另一个类。

    所以这一步我们要做的就是根据AUC值找出模型最好的决策边界值,也就是概率值。大于这一概率值为正样本,反之为负样本。

    # 交叉验证确定合适的决策边界阈值
    fold = KFold(4,shuffle=True)
    
    # 定义各个模型的计算公式
    def lr_bdry_module(recall_acc, roc_auc):
        return 0.9*recall_acc+0.1*roc_auc
    def svm_rbf_bdry_module(recall_acc, roc_auc):
        return recall_acc*roc_auc
    def svm_poly_bdry_module(recall_acc, roc_auc):
        return recall_acc*roc_auc
    def rf_bdry_module(recall_acc, roc_auc):
        return 0.5*recall_acc+0.5*roc_auc
    bdry_dict = {'lr': lr_bdry_module,'svm_rbf': svm_rbf_bdry_module,
                 'svm_poly': svm_poly_bdry_module, 'rf': rf_bdry_module}
    
    # decision_boundary是一个计算决策边界的函数
    best_bdry_svm_rbf= decision_boundary(x, y, fold, best_c_svm_rbf, bdry_dict, models_dict, 'svm_rbf')
    best_bdry_svm_poly = decision_boundary(x, y, fold, best_c_svm_poly, bdry_dict, models_dict, 						'svm_poly')
    best_bdry_lr = decision_boundary(x, y, fold, best_c_lr, bdry_dict, models_dict, 'lr')
    best_bdry_rf = decision_boundary(x, y, fold, best_c_rf, bdry_dict, models_dict, 'rf')
    best_bdry = [0.5, best_bdry_svm_rbf, best_bdry_svm_poly, best_bdry_lr, best_bdry_rf]
    

    decision_boundary函数为,与前面寻找超参数大致相同:

    image

    6.7 模型建模

    寻找到最优的超参数和决策边界后,就可以正式开始训练各个模型了。

    # 最优参数建模
    knn = KNeighborsClassifier(n_neighbors = int(best_c_knn))
    knn.fit(x.values, y.values.ravel())
    
    svm_rbf = SVC(C=best_c_svm_rbf, probability = True)
    svm_rbf.fit(x.values, y.values.ravel())
    
    svm_poly = SVC(C=best_c_svm_poly[0], kernel = 'poly', degree = best_c_svm_poly[1], probability = True)
    svm_poly.fit(x.values, y.values.ravel())
    
    lr = LogisticRegression(C = best_c_lr, penalty ='l1', warm_start = False)
    lr.fit(x.values, y.values.ravel())
    
    rf = RandomForestClassifier(n_jobs=-1, n_estimators = 100, criterion = 'entropy', 
    max_features = 'auto', max_depth = None, 
    min_samples_split  = int(best_c_rf), random_state=0)
    rf.fit(x.values, y.values.ravel())
    
    models = [knn,svm_rbf,svm_poly, lr, rf]
    

    7.结果

    7.1预测

    使用之前划分的测试集运用以上训练出来的模型进行预测,预测使用的是模型集成的投票机制。

    我们先来看看预测的代码:

    image

    模型集成投票代码:

    image

    7.2模型评估

    使用AUC进行模型评估,预测部分代码已经记录有相关指标数据,只要计算平均得分就可以。

    #计算平均得分
    mean_recall_score = np.mean(recall_score_list)
    std_recall_score = np.std(recall_score_list)​
    
    mean_auc= np.mean(auc_list)
    std_auc = np.std(auc_list)
    

    8.完整代码

    数据集下载:https://v2.fangcloud.com/share/a63342d8bd816c43f281dab455

    GitHub完整代码

    .

    .

    .

    image

    欢迎添加微信交流!请备注“机器学习”。

    展开全文
  • HiAI 模型集成应用场景和开发指南

    千次阅读 2018-10-29 20:37:52
    HiAI 模型集成应用场景和开发指南 &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;该开发指南可以指导...

    Demo的github源代码地址:https://github.com/HuaweiOpenlab/SmartPhoto

    HiAI 模型集成应用场景和开发指南

            该开发指南可以指导Android手机应用开发者将常见深度学习框架(Caffe、Tensorflow、Coreml、PaddlePaddle)训练的AI模型集成到华为NPU手机中。

            最近小编闲来无事跑到附近动物园转了转,动物园里奇珍异兽数不胜数。红翻石鹬、红脚鹬、蛎鹬、沙狐、北极狐…弄得小编是一脸的懵,分不清谁是谁。无奈小编只能每次拍小动物们之前先拍名牌上的动物名称,以便日后翻看图片能够对上号,可是这样一来小编翻看图片时都处于来回翻看动物名称的疯狂状态。有没有和小编同样遭遇的你,SmartPhoto App就可以解决这一问题。该应用能够在拍照时自动识别物体,并在拍出的照片上打上水印标签。如下图:

            巧妇难为无米之炊,我们先得准备自己的AI模型,这里小编以CoremlStore的MobileNet模型为例,演示如何集成图像识别的AI模型到App中。

    第一步:首先下载安装Android Studio插件,见下图,搜索栏中输入“DevEco IDE”关键字。

    第二步:进入DevEco插件,并拖入模型到图中所示位置,进入参数配置界面,输入相关参数,点击Run按钮。

    注意,上图第6步中需选择DDK版本, DDK版本和手机之间对应关系详见选择框右边的“问号”按钮

            工具会帮助自动生成的Java API,如下图所示,Java文件的存放路径在参数配置界面中设置,类名称由模型名称+“Model”字符串构成。

    第三步:API的使用

    (1)在onCreate函数中加载模型

    (2)在获取到图片数据之后对图片进行预测

    (3)模型结束使用时在onDestroy()函数中卸载模型

            到此,AI模型在App中的集成过程就结束了,有没有感觉很简单?总结起来就是“下载插件,拖入模型,再写三句代码”。
            【提示】该Demo目前只支持麒麟980手机,小编开发用的是华为Mate20手机,没有Mate20手机的小伙伴,可以在上述Android Studio插件中免费申请Mate20远程真机进行调试。

    免费远程真机的使用步骤如下:

    Demo的github源代码地址:https://github.com/HuaweiOpenlab/SmartPhoto

    邮箱反馈途径:deveco@huawei.com

    展开全文
  • 软件能力成熟度模型集成模型,介绍软件开发流程,这是项目管理人员必需掌握和知道的知识
  • 模型集成方法

    千次阅读 2018-03-18 21:11:08
    数据层面的集成方法:测试阶段数据扩充:以随机扣取为例,对某张测试图像可得到n张随机扣取图像,测试阶段只需用训练好的深度网络模型对n张图分别做预测,之后将预测的各类置信度平均作为该测试图像的最终预测结果...
  • 谈谈深度学习中的模型集成

    千次阅读 2020-01-17 15:03:36
    本文提出另一种强大的技术是模型集成(model ensembling)。 集成是指将一些列不同模型的预测结果汇集到一起,从而得到更好的预测结果。 集成依赖于这样的假设,即对于独立训练的不同良好模型,他们表现良好的...
  • 为了增强DSS模型的可重用性及系统的元决策能力,提出了利用事件和参数共同驱动的双因素模型集成机制。将DSS中的可重用模型体系分解为由元模型、复合模型、过程模型构成的层次结构,重新定义了工作流管理领域中的ESP...
  • 大卫·盖拉·达·希尔瓦·克拉沃_2_25032021 OpenClassrooms项目n°2-储藏室-模型集成 培训项目。 在HTML / CSS中集成了以移动,平板电脑和台式机格式提供的模型。
  • 光环大数据--大数据培训&人工智能培训 揭秘 Python 中的模型集成_光环大数据 python 培训 集成方法可将多种机器学习模型的预测结果结合在一起获得单个模型无法 匹敌的精确结果它已成为几乎所有 Kaggle 竞赛冠军的必...
  • 模型集成之stacking——个人小结

    万次阅读 2018-02-09 15:26:19
    写在最前:在做比赛的过程中接触...一、stacking方法是什么stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再...
  • [深度学习] 模型集成方法

    千次阅读 2018-05-16 11:47:57
    模型集成方法 集成学习(ensemble learning)是机器学习中一类学习算法,值训练多个学习器并将它们组合起来使用的方法。这类算法通常在实践中会取得比单个学习器更好的预测结果。 数据层面的集成方法 在训练...
  • 深度学习--多模型集成

    千次阅读 2019-04-02 18:15:11
    转自:https://blog.csdn.net/qq_21997625/article/details/80388639 ... 模型集成方法 集成学习(ensemble learning)是机器学习中一类学习算法,值训练多个学习器并将它们组合起来使用的方法。这类算法通常在实...
  • CNN学习笔记(8)---模型集成方法

    千次阅读 2018-04-27 09:16:17
    13.模型集成方法 深度模型的集成多从“数据层面”和“模型层面”两方面着手 13.1 数据层面的集成方法 13.1.1 测试阶段数据扩充 训练阶段的数据扩充手段:图像多尺度,随机扣取 等都可以用到测试阶段 以...
  • 模型集成 | 14款常规机器学习 + 加权平均模型融合

    千次阅读 多人点赞 2018-07-03 22:59:24
    模型融合的方法很多,Voting、Averaging、Bagging 、Boosting、 Stacking,那么一些kaggle比赛中选手会选用各种方法进行融合,其中岭回归就是一类轻巧且非常有效的方法,当然现在还有很多更有逼格的方法。...
  • 能力成熟度模型集成CMMI 1.1的文档资料
  • [深度概念]·模型集成(Ensemble)解析

    千次阅读 2019-03-19 11:10:59
    1模型集成(Ensemble) 曾经听过一句话,”Feature为主,Ensemble为后”。Feature决定了模型效果的上限,而Ensemble就是让你更接近这个上限。Ensemble讲究“好而不同”,不同是指模型的学习到的侧重面不一样。举个...
  • 能力成熟度模型集成 (CMMI) V2.0

    千次阅读 2019-11-30 10:03:15
    CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成。CMMI是CMM模型的最新版本。早期的CMMI(CMMI-SE/SW/IPPD),SEI在部分国家和地区开始推广和试用。随着应用的推广与模型本身的发展,演绎...
  • 软件能力成熟度模型集成(CMMI)培训教程.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 378,942
精华内容 151,576
关键字:

模型集成