大数据分析案例-基于xgboost算法构建互联网防火墙异常行为识别模型

 3f6a7ab0347a4af1a75e6ebadee63fc1.gif

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

1.项目背景

2.数据集介绍

3.技术工具

4.实验过程

4.1加载数据

4.2数据预处理 

4.3数据可视化

4.4特征工程

4.5构建模型

4.6模型评估

4.7特征重要性 

4.8模型预测

5.总结

源代码


 

1.项目背景

        随着互联网的快速发展,网络安全问题日益凸显。互联网防火墙作为网络安全的第一道防线,负责监控和过滤进出网络的数据包,以阻止恶意攻击和非法访问。然而,随着网络攻击手段的不断更新和复杂化,传统的防火墙技术已难以满足日益增长的安全需求。因此,开发一种高效、智能的异常行为识别模型对于提升防火墙的防护能力具有重要意义。

        近年来,机器学习算法在各个领域取得了显著的成功,尤其在处理大规模、高维度数据时展现出了强大的优势。XGBoost作为一种基于梯度提升决策树(Gradient Boosting Decision Tree)的集成学习算法,以其高效性、稳定性和准确性受到了广泛关注。XGBoost通过构建多个弱分类器(如决策树)并将其组合成强分类器,能够自动提取数据的特征并进行分类,适用于处理复杂的分类问题。

        因此,本研究旨在利用XGBoost算法构建一种互联网防火墙异常行为识别模型。通过对网络流量数据的收集和分析,提取出与网络攻击相关的特征,并基于这些特征训练XGBoost模型。通过不断优化模型参数和调整特征选择,提高模型的识别精度和泛化能力。最终,将训练好的模型部署到防火墙系统中,实现对网络流量的实时监控和异常行为的自动识别,从而提升防火墙的防护能力和网络安全性。

2.数据集介绍

        本实验数据集来源于Kaggle,原始数据集共有65532条,12个变量,数据部分截图如下:

3e5df7573fa44ec4bc048fe5e91b7d07.png

3.技术工具

Python版本:3.9

代码编辑器:jupyter notebook

4.实验过程

4.1加载数据

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.set(font='SimHei')
import warnings
warnings.filterwarnings('ignore')

df = pd.read_csv('互联网防火墙数据集.csv')
df.head()

fd599d83079b407f96e63af695439ee4.png

查看数据大小

77c45a22dd8d4212a04807682a0ca11a.png

查看数据基本信息 

befdf5faf1b64bbf9c93beb456951a46.png

查看数据描述性统计

30255e6fd08a49dbae414477d151fe8d.png

4.2数据预处理 

统计缺失值情况

cebe5256c56c4d26abe54575bfff97d1.png

发现各列并不存在缺失值

统计重复值情况

847393085e4641dcb28f67745b08b4b1.png

发现原始数据存在8362条重复数据需要处理,直接删除即可

e5f6ae76a64b45e6a7a35fc76f5f7565.png

4.3数据可视化

sns.countplot(data=df,x='Action')
plt.show()

345c944db9274bf4b07ab759384eb806.png

fig = plt.figure(figsize=(18,18))
sns.heatmap(df.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.title('各个因素之间的相关系数',fontsize=20)
plt.show()

36c2bbf8f8b949a383ddb75cbcf3794c.png

4.4特征工程

 由于目标变量是非数值类型,故需要进行编码处理

faa240b52f514721aa6a18240252a289.png

1aa19361ac4143bba043208619c9c2b6.png

接着准备建模数据,即特征变量和目标变量,并拆分数据集为训练集和测试集

# 准备用于创建模型的数据
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])

b1f984489c9849749bb4cc78a23cb936.png

4.5构建模型

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

2991fba9cf4e423cb4f4c261b94caf08.png

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

e4a7df56c8434e65b40f90de612f8336.png

# 构建决策树模型
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(X_train,y_train)
print('决策树模型准确率:',tree.score(X_test,y_test))

80b528c1de2a4b76b7f628ab303b358a.png

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

68b2b795d41e4710a11f2d4e48b6a3c0.png

通过对比4个模型的准确率,我们选择准确率最高的xgboost模型作为最终的训练模型

4.6模型评估

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

c51b8246534449c1af8b5719295e2128.png

# 混淆矩阵可视化
fig = plt.figure(figsize=(8,8))
sns.heatmap(confusion_matrix(y_test,y_pred),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.title('XGBoost模型混淆矩阵',fontsize=20)
plt.show()

b4ea83eedc7541da8869f67aaeaf4d8b.png

4.7特征重要性 

#打印特征重要性评分
feat_labels = X_train.columns[0:]
importances = xgb.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(X_train.shape[1]),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
    print(f + 1, feat_labels[j], importances[j])
plt.figure(figsize=(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('各特征重要程度排序',fontsize=14)
plt.show()

7e2b1b7c49dd4071adcc10ad11680c61.png

a810fcc482154862b1a36363f49e1886.png

4.8模型预测

随机抽取10个预测结果进行检验

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

 2b12cc138d9142e5b550dc6ec9d48417.png

从结果可以发现预测结果全部正确,模型效果很棒!

5.总结

        基于XGBoost算法构建的互联网防火墙异常行为识别模型在本实验中取得了显著的效果。通过对网络流量数据的收集、处理和分析,结合XGBoost算法的优势,我们成功地训练出了一个高效的异常行为识别模型。在测试阶段,该模型展现出了出色的性能,准确率达到了0.998,这意味着模型能够准确地识别出网络流量中的正常行为和异常行为。

        这一实验结果表明,利用XGBoost算法构建互联网防火墙异常行为识别模型是可行的,并且具有较高的实际应用价值。通过部署该模型到防火墙系统中,我们可以实现对网络流量的实时监控和异常行为的自动识别,从而及时发现并应对网络攻击,提升网络安全性。

        此外,本实验还验证了XGBoost算法在处理大规模、高维度数据时的有效性。通过自动提取数据的特征并进行分类,XGBoost算法能够充分利用网络流量数据中的信息,提高异常行为识别的准确性。

        综上所述,基于XGBoost算法构建的互联网防火墙异常行为识别模型在本实验中取得了令人满意的成果,对于提升防火墙的防护能力和网络安全性具有重要意义。未来,我们将继续优化模型参数和调整特征选择,以进一步提高模型的性能,并探索将其应用于更广泛的网络安全领域。

源代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.set(font='SimHei')
import warnings
warnings.filterwarnings('ignore')

df = pd.read_csv('互联网防火墙数据集.csv')
df.head()
df.shape
df.info()
df.describe().T
df.isnull().sum()
df.duplicated().sum()
df.drop_duplicates(inplace=True)
df.duplicated().sum()
sns.countplot(data=df,x='Action')
plt.show()
fig = plt.figure(figsize=(18,18))
sns.heatmap(df.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.title('各个因素之间的相关系数',fontsize=20)
plt.show()
df['Action'].value_counts()
df['Action'].replace(to_replace={'allow':0,'drop':1,'deny':2,'reset-both':3},inplace=True)
df['Action'].value_counts()
# 准备用于创建模型的数据
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))
# 构建决策树模型
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(X_train,y_train)
print('决策树模型准确率:',tree.score(X_test,y_test))
# 构建lightgbm模型
from lightgbm import LGBMClassifier
gbm = LGBMClassifier()
gbm.fit(X_train,y_train)
print('lightgbm模型准确率:',gbm.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))
from sklearn.metrics import r2_score,confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred = xgb.predict(X_test)
print('模型的R方值:',r2_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 混淆矩阵可视化
fig = plt.figure(figsize=(8,8))
sns.heatmap(confusion_matrix(y_test,y_pred),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.title('XGBoost模型混淆矩阵',fontsize=20)
plt.show()
#打印特征重要性评分
feat_labels = X_train.columns[0:]
importances = xgb.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(X_train.shape[1]),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
    print(f + 1, feat_labels[j], importances[j])
plt.figure(figsize=(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('各特征重要程度排序',fontsize=14)
plt.show()
# 模型预测
res = pd.DataFrame()
res['真实值'] = y_test
res['预测值'] = y_pred
res.sample(10)

资料获取,更多粉丝福利,关注下方公众号获取

a74f7d5d03234f7c8a635562034442a0.gif#pic_center

 

  • 51
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 81
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 81
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值