基于ABC、XGBoost与迁移学习的入侵检测方法
2021-04-08黄清兰游贵荣
黄清兰 游贵荣
(福建商学院 信息技术中心, 福州 350012)
事先防范,主动检测,对于保证计算机网络信息安全具有重要意义。机器学习能够进行主动检测防御,已经被广泛应用于入侵检测领域,如对恶意程序的检测,对数据库用户异常行为的检测,对Web用户异常行为的检测,等。传统的机器学习算法在训练和挖掘数据时有一个假设,就是训练和测试的数据有相同的特征空间且分布一致。但在实际应用场景中,训练使用的数据与测试的数据往往存在差异,数据分布是不一致的,而且检测未知的攻击行为时训练数据不多,因此会导致检测准确率低、漏检率高的问题。针对这个问题,现提出一种基于人工蜂群(ABC)算法、极端梯度提升(XGBoost)模型与迁移学习的入侵检测方法,结合利用XGBoost和迁移学习,构建简单迁移分类模型,然后通过ABC自适应搜索适用于迁移分类模型的XGBoost最佳参数。这是一种混合算法,我们将它叫作“ABC-XGBTrl”。
1 算法基础
1.1 人工蜂群算法
人工蜂群算法(Artificial bee colony algorithm)是通过模拟蜂群采蜜的集体行为来求解优化问题。相对于遗传算法和粒子群优化算法(PSO)而言,人工蜂群算法更容易跳出局部最优,求解质量优势较为明显。其求解过程[1]如下:
(1) 初始化阶段。初始化种群SN个都是侦查蜂,随机地去搜索蜜源,搜索到的每个蜜源都是求解问题空间中的一个可行解。假设所求解问题的维度为m,每个可行解可表示为Xi=[xi1,xi2,xi3,…,xim]。Xi初始化依据式(1)产生。
Xi=Lj+rand(0,1)(Uj-Lj)
(1)
式中:Lj和Uj分别表示第j维搜索空间的下限和上限;i∈{1,2,…,SN};j∈{1,2,…,m}。
每个蜜源的适应值评估函数fiti,按式(2)计算。
(2)
式中:funi表示问题解的目标函数值。
(2) 迭代阶段。雇佣蜂和跟随蜂在领域搜索时,依据式(3)进行蜜源搜索。
vij=xij+φ(xij-xkj)
(3)
式中:φ∈[-1,1];k∈{1,2,…,SN},k≠i。
依据式(4)计算每个蜜源的概率Pi,跟随蜂根据概率Pi选择优质蜜源进行领域开发。
(4)
在跟随蜂完成领域搜索后,若蜜源开采次数已达一定极限而仍未找到更好的蜜源,该蜜源就会被舍弃,对应蜜源的雇佣蜂就转为侦查蜂。侦查蜂依据式(1)进行随机搜索,产生新的蜜源。
1.2 XGBoost模型
XGBoost是一个优化的分布式梯度增强库,该模型就是建立一堆累加的分类与回归树[2]。假设有n个样本和m个特征的样本集D={(xi,yi)|xi∈Rm,yi∈R},其模型预测值为:
(5)
模型的目标函数为:
(6)
式中:θ={f1,f2,…,fk};l指损失函数;Ω指正则化项。
目标函数包含2个部分,即损失函数和正则化项。第一部分的自身损失函数使用泰勒式展开,使用一阶导数和二阶导数进行优化,以提高速度和准确率。在第t步迭代优化目标函数时,在现有t-1棵树基础上添加1棵最优化的ft,损失函数变为:
(7)
式中:gi为损失函数的一阶导数;hi为损失函数的二阶导数。
第二部分是正则化函数,通过正则化惩罚项来降低过拟合的风险。正则化函数为:
(8)
式中:T为每棵树叶子节点的个数;w为叶子权重;γ与λ为惩罚系数。
1.3 迁移学习
迁移学习是从数据、任务的相似性出发,从已学习的相关任务中转移知识,用以改进学习的新任务[3]。迁移学习涉及的两个主要概念就是域和任务。域是由特征空间和概率分布组成,任务是由标签空间和预测函数组成。迁移学习主要分为3种,即归纳式迁移学习、直推式迁移学习和无监督迁移学习。归纳式迁移学习是近几年研究的热点,它是在假设数据特征空间和标签空间一致而边缘概率分布不一致的情况下,优化目标预测函数的学习。
Dai等人提出的基于实例的归纳式迁移学习技术即TrAdaBoost算法[4],是假设数据源域和目标域的特征和标签一致而数据分布不一致,给数据源域和目标域的每一个样例设置一个权重。目标域的权重更新策略与AdaBoost算法一样,若目标域中的样本被错误分类了,就加大该样例的权重;源域的样本权重更新策略与之相反,若数据源域中的样本被错误分类了,就认为这个样例对于目标域是不同的,便降低该样例在样本中所占的权重。
2 算法设计
设源域Ds={(xi,yi)|xi∈Rm,yi∈R},目标域Dt={(xi,yi)|xi∈Rm,yi∈R},源域的边缘概率分布P(Ds)与目标域的边缘概率分布P(Dt)不一致。首先,从目标域Dt中随机抽取少量有标签的数据Dd。Dd={(xi,yi)|(xi,yi)∈Dt,|Dd|≪|Dt|≪|Ds|}。使用XGBoost算法对Dd进行训练,建立初始模型,用以检测源域Ds。若源域中的样本被错误地分类了,就认为这个样例对于目标域是不同的[4],并使用人工蜂群算法优化XGBoost模型参数。然后,将源域中分类正确的样本进行迁移,与Dd构成新的特征集,并使用XGBoost算法对这些新的特征集进行训练,得到迁移分类模型。其中的XGBoost算法参数,以初始XGBoost模型所优化过的参数进行初始化设置。算法流程如图1所示。
机器学习中常见的分类问题评估指标,有准确率、精确率、召回率、F1-score、ROC曲线。我们选择常用的准确率、F1-score作为评测指标。ABC-XGBTrl算法实现的伪代码如下:
输入:样本集Dd、Ds、Dt,蜂群个数SN,最大迭代次数Tmax,优化参数个数m
forj=1 tomdo
初始化优化参数上限(U1,U2,…,Uj);
初始化优化参数下限(L1,L2,…,Lj);
end
初始化蜜源抛弃上界Tlimit=round(0.6*SN*m);
fori=1 toSNdo
按式(1)初始化所优化XGBoost参数蜜源位置Xi=(xi1,xi2,…,xim);
通过Xi初始化XGBoost参数;
利用XGBoost算法训练Dd,预测Ds结果,计算F1-score值funi;
依据式(2)计算fiti;
end
依据式(4),记录当前的最优蜜源位置;
fort=1 toTmaxdo
执行雇佣蜂和跟随蜂的搜索步骤,开拓新的蜜源X;
if 蜜源采蜜次数 >Tlimitthen
执行侦查蜂步骤,开拓新的蜜源X;
end
end
使用优化过最佳蜜源初始化XGBoost参数;
已初始化参数的XGBoost算法训练Dd,预测Ds结果;
已初始化参数的XGBoost算法训练Dtrain,得到训练好的迁移分类模型;
令Dtest=Dt-Dd;
用训练好的迁移分类模型预测Dtest,计算评估指标F1-score值f1、准确率acc;
输出:f1,acc。
图1 ABC-XGBTrl算法实现流程
3 算法实验与结果分析
使用Python语言编程进行实验,XGBoost算法使用的是XGBoost-0.82包。对照组实验,使用在机器学习库scikit-learn中已实现的经典集成学习算法。
采用基准 NSL-KDD数据集。训练数据集KDDtrain和测试数据集KDDtest,数据分布不一致[5],拥有相同的特征空间和标签空间,符合算法的假设条件。将KDDtrain作为源域,KDDtest作为目标域。在随机种子数一样的情况下,进行3组实验。
第一组实验,使用的目标域数据样本量比例由0.1%扩大到1.2%;XGBoost算法参数统一使用默认值,其中主要参数组合如表1所示。在不使用人工蜂群算法进行参数优化的情况下,迁移分类模型的预测性能如图2所示。
由图2可知,在不同的迁移样本量比例下,F1分数值存在波动。在目标域样本量占比为0.8%的时候,性能最好,F1分数为0.886 1,准确率为0.886 5。
表1 参数组合默认值及优化后的最佳值
第二组实验,使用的目标域样本量占比为0.8%;经ABC算法调参后,XGBoost最佳参数组合如表1所示。使用ABC-XGBTrl算法,经过100次迭代,F1分数为0.904 4,准确率为0.905。与第一组实验结果相比,这两项指标分别提高了2.065%、2.087%。
图2 迁移分类模型的预测性能
第三组实验,与XGBoost、Bagging(装袋)、AdaBoost(自适应增强)、RandomForest(随机森林)、ExtraTrees(极端随机树)等算法进行对照实验。实验结果如图3所示。与其他几种算法相比,ABC-XGBTrl算法的F1分数和准确率都是最高的,说明其性能更优。
图3 ABC-XGBTrl算法与对照算法的性能比较
4 结 语
传统的机器学习算法用于入侵检测,面对新旧数据的差异性,尤其是面对未知的攻击行为时,检测准确度较低,漏检率较高。将XGBoost模型和迁移学习相结合,构建简单迁移分类模型,然后通过人工蜂群算法优化选择XGBoost最佳参数,用于迁移分类模型,可以有效提高检测准确度、降低漏检率。采用NSL-KDD数据集进行测试,结果显示,与现有的经典集成学习算法相比,所提出的ABC-XGBTrl算法,在准确率和F1分数这两项指标上都提高了将近12%。