《AI安全之对抗样本入门》—

举报
华章计算机 发表于 2019/06/17 16:23:12 2019/06/17
【摘要】 本节书摘来自华章计算机《AI安全之对抗样本入门》一书中的第1章,第1.5.1节,作者是兜哥。

1.5 集成学习

集成学习(Ensemble Learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。如图1-34所示,集成学习的思路是在对新的实例进行分类的时候,把若干个单个分类器集成起来,通过对多个分类器的分类结果进行某种组合来决定最终的分类,以取得比单个分类器更好的性能。如果把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。如果使用的分类器相同,称为同质,反之则称为异质。综合判断的策略常见的有两种:加权平均和投票。

 image.png

图1-34 集成学习基本原理

集成学习粗略可以分为两类,第一类是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是Boosting系列算法。第二类是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是Bagging算法和随机森林(Random Forest)系列算法。本章以分类问题来介绍常见的Boosting算法和Bagging算法。

 

1.5.1 Boosting算法

Boosting系列算法的原理是在训练集用初始权重训练出一个分类器,根据分类器的表现来更新训练样本的权重,使得这些错误率高的样本在后面的训练中得到更多的重视。如此重复进行,直到分类器的数量达到事先指定的数目,最终将全部分类器通过集合策略进行整合,得到新的分类器。

Boosting系列算法里最著名的算法主要有AdaBoost算法和梯度提升决策树GBDT(Gradient Boosting Decision Tree) 算法,我们以AdaBoost和GBDT为例,介绍如何在Scikit-Learn中使用它们。

以AdaBoost为例,数据集使用随机生成的数据,使用AdaBoostClassifier,分类器个数设置为100:

x, y = datasets.make_classification(n_samples=1000,

n_features=100,n_redundant=0, random_state = 1)

train_X, test_X, train_Y, test_Y = train_test_split(x,

                                                    y,

                                                    test_size=0.2,

                                                    random_state=66)

clf = AdaBoostClassifier(n_estimators=100)

clf.fit(train_X, train_Y)

pred_Y = clf.predict(test_X)

输出对应的性能指标,准确度为80.5%,f1为81.52%,准确率为81.13%,召回率为81.90%,AUC为0.80:

accuracy_score:

0.805

f1_score:

0.815165876777

recall_score:

0.819047619048

precision_score:

0.811320754717

confusion_matrix:

[[75 20]

 [19 86]]

AUC:

0.804260651629

对应的ROC曲线如图1-35所示,综合指标都优于之前的KNN。

 image.png

图1-35 AdaBoost的ROC曲线

以GBDT为例,数据集依然使用随机生成的数据,使用GradientBoostingClassifier,分类器个数设置为100:

x, y = datasets.make_classification(n_samples=1000,

n_features=100,n_redundant=0, random_state = 1)

train_X, test_X, train_Y, test_Y = train_test_split(x,

                                                    y,

                                                    test_size=0.2,

                                                    random_state=66)

clf = GradientBoostingClassifier(n_estimators=100)

clf.fit(train_X, train_Y)

pred_Y = clf.predict(test_X)

report(test_Y, pred_Y)

输出对应的性能指标,准确度为84%,f1为84.76%,准确率为84.76%,召回率为84.76%,AUC为0.84:

accuracy_score:

0.84

f1_score:

0.847619047619

recall_score:

0.847619047619

precision_score:

0.847619047619

confusion_matrix:

[[79 16]

 [16 89]]

AUC:

0.839598997494

对应的ROC曲线如图1-36所示,综合指标优于之前的KNN,也略优于AdaBoost,不过Boosting系列算法都有大量参数可以优化,对性能有一定影响,本章的这个比较只是一个不太严谨的对比。

 image.png

图1-36 GBDT的ROC曲线


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。