【人工智能】—XGBoost算法在构建互联网防火墙异常行为识别模型应用案例

摘要: 近年来,各地党委、政府加快推进新型工业化,部署实施制造强市战略,提出工业企业“智改数转”是推动全市工业经济稳增长的重要引擎,更是稳增长、促发展的重要抓手。今天博主就以互联网防火墙异常行为识别为例给大家介绍一种“智改数转”普遍运用于数字制造新型工业化的强大算法。

关键词: XGBoost, 异常行为识别,互联网安全,机器学习

READY GO!

随着互联网技术的飞速发展,网络攻击手段也日益多样化和隐蔽化。传统的防火墙技术虽然在一定程度上能够防御常见的网络威胁,但对于新型的、复杂的攻击模式,其识别能力往往显得力不从心。为了应对这一挑战,越来越多的研究者开始将目光投向机器学习领域,尤其是那些能够处理高维数据集并具有较强泛化能力的算法,如XGBoost。

XGBoost,即eXtreme Gradient Boosting,是一种基于梯度提升决策树的集成学习算法。它通过构建多个弱预测模型,并将它们组合起来,以提高整体模型的预测准确性。XGBoost在处理分类和回归问题时表现出色,尤其是在需要处理大量特征和复杂数据结构的场景中。

在构建互联网防火墙异常行为识别模型时,XGBoost算法的优势主要体现在以下几个方面:

  • 高效率:XGBoost算法优化了传统梯度提升算法的计算过程,提高了模型训练的速度。
  • 高准确性:通过正则化项的引入,XGBoost能够在保持模型复杂度的同时,减少过拟合的风险。
  • 可扩展性:XGBoost支持并行处理,能够高效地处理大规模数据集。
    灵活性:XGBoost提供了丰富的参数设置,允许用户根据具体问题调整模型性能。

基本组成元素:

  • 决策树:XGBoost的基本组成元素是决策树,这些决策树作为“弱学习器”共同组成了XGBoost模型。每棵决策树都有先后顺序,后一棵树会考虑前一棵树的预测结果,并调整样本分布来训练下一棵决策树。

整体思路:

  • 训练过程:从目标函数出发,通过计算目标函数增益选择特征,再使用加权分位法确定分裂点,建立决策树。不断重复该算法直到所有特征都被使用或达到限定层数。
  • 测试过程:输入特征依次进入每棵决策树,每棵树的节点给出预测权值,最后将所有预测权值相加得到最终结果。

目标函数:

  • 最初的目标函数:设定第t个决策树的目标函数,包括样本损失函数、前t-1棵树的预测值、第t棵树的模型复杂度(正则化项)。
  • 推导:通过泰勒展开公式进行简化,保留一阶和二阶导数信息,去掉常数项,从而得到简化版的目标函数。

特征划分准则:

  • 信息增益:根据目标函数的最优解,确定特征划分准则。通过计算每个特征划分点的信息增益,选择最佳分割点。
  • 加权分位法:为了提高算法效率,采用加权分位法寻找最佳分割点,并对每个特征的重要性进行排序。

优缺点:

  • 优点:XGBoost具有高精度、灵活性强、防止过拟合、处理缺失值和并行化操作等优点。
  • 缺点:尽管XGBoost在许多方面表现出色,但在处理极其大规模数据时可能相对简单,超参数调优也可能需要大量计算资源和时间。

总的来说,XGBoost通过一系列精确的设计和优化措施,显著提升了模型的性能和计算速度。在实际应用中,合理调优XGBoost的各个超参数能够进一步提高模型的精度和泛化能力。

应用领域:

  • 金融行业:XGBoost在金融风控领域被用于信用卡欺诈检测、信贷审批、保险定价等,基于用户特征构建风险预测模型,以识别潜在的风险和欺诈行为。
  • 医疗保健:在医疗领域,XGBoost被用于疾病诊断、疾病发生风险预测、疾病转归与预后评估、合理安全用药指导以及药物研发等,提高决策效率和质量。
  • 推荐系统:在电商、新闻媒体等行业中,XGBoost用于构建推荐系统,预测用户对商品或内容的点击率、购买率或评分,以提供个性化推荐。
  • 生物信息学:XGBoost在基因表达数据分析、疾病基因研究和药物发现中应用,帮助科学家挖掘生物标志物,构建精确的诊断或预后模型。
  • 制造业:在制造业中,XGBoost可以用于产品缺陷检测、质量控制、预测设备维护需求等,优化生产流程和降低成本。
  • 教育:XGBoost在教育领域中用于分析学生数据,预测学生的成绩、辍学率等,帮助教育机构优化教学策略。
  • 广告技术:在广告投放中,XGBoost用于预测广告的点击率,帮助企业优化广告投放策略,提高广告效果。
  • 网络安全:XGBoost也被应用于网络安全领域,用于异常行为检测、入侵检测系统等,提高系统的安全性。
  • 能源行业:在能源领域,XGBoost可以用于预测能源消耗、优化能源分配、预测设备故障等。
  • 汽车行业:在汽车行业中,XGBoost可以用于预测汽车销量、优化供应链管理、车辆故障预测等。
  • 电信行业:XGBoost在电信行业中用于客户流失预测、网络优化、服务质量管理等。

数据集介绍

数据集来源于kaggle,由美国大学防火墙收集的一些互联网流量纪录,数据65532行,12列。

数据特征():
我不想去一个一个翻译打字了,网上搜的数据列名,英文可能会有一点小出入,中文大体应该是对的。

  1. 协议类型 (Protocol Type):网络通信使用的协议类型,例如TCP、UDP等。
  2. 源IP (Source IP):发起网络连接的源头IP地址。
  3. 源端口 (Source Port):发起连接的源头端口号。
  4. 目标IP (Destination IP):网络连接的目标IP地址。
  5. 目标端口 (Destination Port):网络连接的目标端口号。
  6. 攻击状态 (Attack Type):标记当前记录是否为异常攻击行为,通常是分类标签。
  7. 协议 (Protocol):详细描述协议的种类,如http、ftp等。
  8. 服务 (Service):标识所使用服务的类型,如private、ecr_i等。
  9. 登录失败的次数 (Failed Login Attempts):记录在当前会话中登录尝试失败的次数。
  10. 登录尝试 (Login Attempts):记录在当前会话中的总登录尝试次数。
  11. 数据发送量 (Data Sent):从源到目的地发送的数据总量,单位通常为字节。
  12. 数据接收量 (Data Received):从目的地返回到源的数据总量,单位通常为字节。

加载数据

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
import plotly as py
import plotly.graph_objs as go
from plotly.offline import iplot
import plotly.express as px
from sklearn.cluster import KMeans
import warnings
import os
warnings.filterwarnings("ignore")
plt.rcParams ['font.sans-serif'] ='SimHei'      #显示中文
plt.rcParams ['axes.unicode_minus']=False       #显示负号
df = pd.read_csv('Firewall.csv')
df.head()

显示前五行数据:
在这里插入图片描述简单说明一下数据情况,Action列不是数字类型,该列为目标变量也是就原始结果,等会儿需做特征工程,因为机器学习计算机是不认识数字以外的数值。

开始眼神交流,主要需要描述的东西太多了,实在不想打字。
在这里插入图片描述

在这里插入图片描述在这里插入图片描述上图作个简要说明,原始数据有65532行,经过清洗发现数据有8362行数据为重复值,最后删除后最终数据为57170行。

iplot(px.bar(  df['Action'].value_counts(),  labels={'value':'数量', 'name':'类型'},  # 设置图表的标签  color=df['Action'].value_counts().index,  # 设置每个柱子的颜色为其对应的名称  text_auto=True,  # 自动将计数值添加到柱子上  title='互联网防火墙行为类型目标变量分布图'  # 设置图表的标题  
))  

在这里插入图片描述
上图为目标变量分布图,也就是是否标记为攻击行为,第一个是允许访问,第二个为拒绝访问,第三是其它,第四个数据太少了忽略。图上的k代表千为单位,比如第一个数量应该为37640.

int_1 = df.drop('Action', axis=1)
fig = plt.figure(figsize=(20,18))
sns.heatmap(int_1.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.title('互联网防火墙数据特征相关系数矩阵热图',fontsize=25)
plt.savefig('/Users/c/Desktop/heatmap_correlation_matrix.png', dpi=300)
plt.show()

在这里插入图片描述

特征工程

在这里插入图片描述将英文用数字0、1、2、3替换成分类数据,代表4类值,和柱状图保持一致。

开始机器学习

# 准备用于创建模型的数据
from sklearn.model_selection import train_test_split
X = df.drop('Action', axis=1)
y = df["Action"]
# 划分数据集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
print('训练集大小:',X_train.shape[0])
print('测试集大小:',X_test.shape[0])

在这里插入图片描述

# 构建逻辑回归模型
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train,y_train)
print('逻辑回归模型准确率:',lr.score(X_test,y_test))

在这里插入图片描述

# 构建KNN模型
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(X_train,y_train)
print('KNN模型准确率:',knn.score(X_test,y_test))

在这里插入图片描述

# 构建xgboost模型
from xgboost import XGBClassifier
xgb = XGBClassifier()
xgb.fit(X_train,y_train)
print('xgboost模型准确率:',xgb.score(X_test,y_test))

在这里插入图片描述可以看到XGBoost模型准确率达到了99.9%,我们就选本文的主角进行模型评估。

模型评估:

from sklearn.metrics import r2_score,confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred = xgb.predict(X_test)
print('模型的R平方值','\n', r2_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))

在这里插入图片描述
怎样看上图,下面有解释:

R方值(R-squared, R²):
R方值(也称为决定系数)是回归问题中常用的一个评估指标,它表示模型预测的响应变量与真实响应变量之间的相关性。
R²的值范围在0到1之间,值越接近1表示模型拟合得越好。
如果R²为0,表示模型没有解释任何响应变量的变异;如果R²为1,表示模型完美地解释了响应变量的变异。
混淆矩阵(Confusion Matrix):
混淆矩阵是分类问题中常用的一个评估工具,用于展示模型分类结果的分布情况。
它包括真正例(TP)、假正例(FP)、真反例(TN)和假反例(FN)四个指标。
通过混淆矩阵,我们可以计算准确率、精确率、召回率等更具体的评估指标。
分类报告(Classification Report):
分类报告是一个包含了精确率(Precision)、召回率(Recall)、F1分数(F1-score)和支持度(Support)等评估指标的文本报告。
这些指标有助于我们更全面地了解模型在每个类别上的表现。

如何解释评估结果:

对于R方值,您可以直接查看其值来判断模型拟合的好坏。例如,如果R²为0.9964,那么模型解释了响应变量99.6%的变异。
对于混淆矩阵,您需要查看每个类别的真正例(TP)、假正例(FP)、真反例(TN)和假反例(FN)的数量。这些数字可以帮助您了解模型在哪些类别上表现较好,哪些类别上表现较差。
对于分类报告,您可以查看每个类别的精确率、召回率和F1分数。精确率表示模型预测为正例的样本中真正为正例的比例;召回率表示真正为正例的样本中被模型预测为正例的比例;F1分数是精确率和召回率的调和平均数,用于综合考虑这两个指标。

# 打印特征重要性评分    
# 获取训练数据X_train的列标签,即特征名称  
feat_labels = X_train.columns[0:]  # feat_labels 是一个包含所有特征名称的列表    
# 获取XGBoost模型的特征重要性评分  
importances = xgb.feature_importances_  # importances 是一个数组,包含了每个特征的重要性评分    
# 对特征重要性评分进行排序,得到排序后的索引  
indices = np.argsort(importances)[::-1]  # np.argsort 返回排序后的索引,[::-1] 将其反转,使得最重要的特征排在前面    
# 初始化两个列表,用于存储排序后的特征名称和重要性评分  
index_list = []  
value_list = []    
# 循环遍历每个特征和其对应的索引  
for f, j in zip(range(X_train.shape[1]), indices):  # 将特征名称和重要性评分添加到对应的列表中  index_list.append(feat_labels[j])  # 根据排序后的索引j,从feat_labels中获取特征名称  value_list.append(importances[j])  # 根据排序后的索引j,从importances中获取重要性评分        # 打印当前特征和其重要性评分(索引从1开始,因为通常我们不说第0个特征)  print(f + 1, feat_labels[j], importances[j])    
# 创建一个新的图形,并设置其大小  
plt.figure(figsize=(10,6))    
# 使用水平条形图绘制特征重要性评分  
# 注意这里我们对index_list和value_list使用了[::-1],以确保最重要的特征在图的顶部  
plt.barh(index_list[::-1], value_list[::-1])    
# 设置y轴标签的字体大小  
plt.yticks(fontsize=12)    
# 设置图形的标题和字体大小  
plt.title('各特征重要程度排序', fontsize=14)    
# 显示图形  
plt.show()

在这里插入图片描述
从上图可以看出各特征重要程度排名最多的是“尝试登录”,说明Haker也不是一次就能成功的。

模型预测:

# 模型预测
res = pd.DataFrame()
res['真实值'] = y_test
res['预测值'] = y_pred
res.sample(10)

在这里插入图片描述可以看到我构建了一个有数据行数、真实值、预测值的二维表格,随机抽取10条数据,所有数据预测完全准确(上图的0、1、2就是上面特征工程处理的英文类别,可以在上面一一对应)。

小结

在当今的数据驱动时代,XGBoost算法以其卓越的性能和效率,在众多行业中发挥着重要作用。从金融风控到医疗诊断,从个性化推荐到网络安全,XGBoost的应用案例证明了其解决复杂预测问题的非凡能力。随着技术的不断进步,我们可以预见XGBoost将继续扩展其应用边界,为更多行业带来深远的变革。对于数据科学家和行业从业者而言,深入理解XGBoost的原理和应用,将有助于他们在未来的工作中更好地利用这一强大的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCM、WAV,立体声,单声道,正弦波等音频素材

1)PCM、WAV音频素材,分享给将要学习或者正在学习audio开发的同学。 2)内容属于原创,若转载,请说明出处。 3)提供相关问题有偿答疑和支持。 常用的Audio PCM WAV不同采样率,不同采样深度&#…

信息安全基础知识(完整)

信息安全基础知识 安全策略表达模型是一种对安全需求与安全策略的抽象概念表达,一般分为自主访问控制模型(HRU)和强制访问控制模型(BLP、Biba)IDS基本原理是通过分析网络行为(访问方式、访问量、与历史访问…

linux中Java程序调用C程序中方法的实现方式浅析

在Linux中,Java程序可以通过JNI(Java Native Interface)来调用C程序的方法。 Linux系统环境,Java调用C的主要流程如下: 1、创建Java类文件,如NativeLibrary.java 2、编写Java代码,加载.so共享库…

mysql中的datetime类型在Java中到底对应哪个时间类型?

因为MySQL中用的是datetime类型(年月日 时分秒) java.sql.Date 在Java中用 java.sql.Date 接收 但是得到的却只有年月日 前端接收到的是时间戳 java.time.LocalDateTime 在Java中使用 java.time.LocalDateTime 接收 得到的是带时区的时间 前端接收到的…

ROS中的TF是什么

在ROS (Robot Operating System) 中,tf::TransformBroadcaster 是一个用于发布坐标变换信息的重要类,尤其在处理机器人定位和导航数据时非常常见。tf::TransformBroadcaster 对象允许你广播从一个坐标系到另一个坐标系的变换关系,这对于多传感…

web中间件漏洞-Redis漏洞未授权访问漏洞-写webshell、写ssh公钥

web中间件漏洞-Redis漏洞未授权访问漏洞 利用redis未授权访问漏洞写webshell 利用redis未授权访问、攻击机向服务器写入webshell 从服务器查看写入的webshell 菜刀连接 利用redis未授权访问漏洞写ssh公钥 kali生成rsa公私钥对 ssh-keygen -t rsa 将公钥id_rsa.pub写入文…

33 - 连续出现的数字(高频 SQL 50 题基础版)

33 - 连续出现的数字 -- 开窗函数lead(col,n) 统计窗口内往下第n行值 -- over(partition by xxx) 按照xxx所有行进行分组 -- over(partition by xxx order by aaa) 按照xxx分组,按照aaa排序select distinct num as ConsecutiveNums from(select num,# 从当前记录获…

C语言第17篇:预处理详解

1、预定义符号 C语言设置了一些预定义符号,可以直接使用。预定义符号也是在预处理期间处理的。 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI…

【Streamlit学习笔记】Streamlit-ECharts箱型图添加均值和最值label

Streamlit-ECharts Streamlit-ECharts是一个Streamlit组件,用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts 安装模块库 pip install streamlitpip install streamlit-echarts绘制箱型图展示 在基础箱型…

Apple - Launch Services Programming Guide

本文翻译整理自:Launch Services Programming Guide https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/LaunchServicesConcepts/LSCIntro/LSCIntro.html#//apple_ref/doc/uid/TP30000999-CH201-TP1 文章目录 一、导言谁应该阅读此文档…

【Linux】基础IO_4

文章目录 六、基础I/O4. 动静态库 未完待续 六、基础I/O 4. 动静态库 既然我们能够成功创建静态库了,接下来我们将这个代码打包成动态库: shared: 表示生成共享库格式 fPIC:产生位置无关码(position independent code) 动态库库名规则&…

bug记录——C语言中运算符前假后面不执行

A&&B A为真&#xff0c;才会判断B&#xff0c; 所以如果B访问越界的情况下必有A为假&#xff0c;那么代码是正确的 像这里&#xff0c;当child 1 > n时&#xff0c;a[child 1]越界访问&#xff0c; 但由于&&前面判断了child 1 < n为假&#xff0c;所以…

IDEA快速入门02-快速入门

二、快速入门 2.1 打开IDEA,点击New一个项目 入口&#xff0c;依次打开 File -> New -> Project。 2.2 使用Spring Initializr方式构建Spring Boot项目 2.3 设置项目所属组、项目名称、java版本等 2.4 选择SpringBoot版本及依赖组件 点击Create进行创建。 2.6 创建成…

windows10远程桌面端口,Windows 10远程桌面端口修改的两个方法

在Windows 10系统中&#xff0c;远程桌面功能允许用户通过网络从一台计算机远程访问和控制另一台计算机。默认情况下&#xff0c;远程桌面服务使用的端口是3389。然而&#xff0c;出于安全考虑&#xff0c;许多管理员和用户希望修改这一默认端口。本指南将详细介绍如何在Window…

WPS没保存关闭了怎么恢复数据?4个方法(更新版)

想象一下&#xff0c;你正在用WPS奋笔疾书&#xff0c;灵感如泉水般涌出&#xff0c;突然间&#xff0c;电脑却跟你开了个玩笑——啪地一下&#xff0c;文档未保存就关闭了&#xff01;是不是感觉像是被泼了一盆冷水&#xff0c;所有的热情瞬间熄灭&#xff1f;别急&#xff0c…

代码随想录第31天|贪心算法

134. 加油站 参考 思路: 以每个油站相差作为判断, 比如: gas [5 8 2 8]cost [6 5 6 6] [-1 3 -4 2]错误 : 把相差最大点当作起点判断能否绕一圈 : 相加数组是否小于0局部最优: 当前累加rest[i]的和curSum一旦小于0&#xff0c;起始位置至少要是i1&#xff0c;因为从i…

SQLite数据库(数据库和链表双向转换)

文章目录 SQLite数据库一、SQLite简介1、SQLite和MySQL2、基于嵌入式的数据库 二、SQLite数据库安装三、SQLite的常用命令四、SQLite的编程操作1、SQLite数据库相关API&#xff08;1&#xff09;头文件&#xff08;2&#xff09;sqlite3_open()&#xff08;3&#xff09;sqlite…

vue3 computed与watch,watchEffect比较

相同点 都是要根据一个或多个响应式数据进行监听 不同点 computed 如要return回来一个新的响应式值&#xff0c;且这个值不允许直接修改&#xff0c;想要修改的话可以设置set函数&#xff0c;在函数里面去修改所依赖的响应式数据&#xff0c;然后计算属性值会基于其响应式依…

【秋招刷题打卡】Day02-二分系列之-二分查找

Day02-二分系列之-二分查找 前言 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#…

基于CPWM与DPWM综合调制的光伏逆变器

1. 光伏并网逆变器矢量控制 图 1 为光伏发电系统常用的逆变器拓扑结 构,太阳能光伏电池板发电所产生的直流电能接 入光伏并网逆变器直流侧。逆变器将电能逆变, 经过滤波器与隔离升压变压器连接,最终并入电 网。其中隔离变压器低压侧漏感与LC滤波器组 成LCL滤波。为便于分析…