当前位置: 首页 > news >正文

深圳 购物网站拥有自己的网站 如何做推广

深圳 购物网站,拥有自己的网站 如何做推广,甘德县公司网站建设,加拿大28网站开发简介 该项目是一个基于NSL-KDD数据集的网络入侵检测系统#xff0c;主要采用机器学习方法对网络流量数据进行使用了多种机器学习模型#xff0c;如逻辑回归、线性SVM、多项式核SVM、高斯核SVM、决策树、随机森林、朴素贝叶斯和K近邻算法训练二元分类#xff08;正常/异常主要采用机器学习方法对网络流量数据进行使用了多种机器学习模型如逻辑回归、线性SVM、多项式核SVM、高斯核SVM、决策树、随机森林、朴素贝叶斯和K近邻算法训练二元分类正常/异常模型及预测最后比较了各个算法的检测效果。 实现步骤 加载和导入数据 导入所需的Python库如numpy、pandas、matplotlib等以及sklearn中的各种机器学习算法和评估指标。读取KDDTrain.txt和KDDTest.txt文件作为训练集和测试集并给数据列添加对应的标签。 数据预处理 检查并打印训练集和测试集中重复的数据行数。将攻击类别转化为二元分类‘normal’ 和 ‘abnormal’并将原始攻击类别列删除。对分类特征如protocol_type, service, flag进行标签编码。 特征选择 使用mutual_info_classif方法计算特征与目标变量之间的互信息并根据结果选择最重要的20个特征。 数据标准化 选定筛选后的特征子集后对训练集和测试集的特征进行标准化处理使用MinMaxScaler将所有特征缩放到[0, 1]区间内。 模型初始化与训练 初始化多种分类模型包括逻辑回归、支持向量机线性核、多项式核、高斯核、决策树、随机森林、朴素贝叶斯和K近邻。对每个模型进行训练使用训练好的模型在测试集上进行预测。 性能评估 计算并存储每个模型在测试集上的准确率、精确度和召回率。 实现代码 导入必要的库和数据 # 导入和加载数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split,StratifiedKFold,GridSearchCV from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier,VotingClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score from sklearn.metrics import confusion_matrix from sklearn.model_selection import GridSearchCV,RandomizedSearchCV from sklearn.svm import SVC from sklearn import metrics from sklearn.naive_bayes import GaussianNB from sklearn.metrics import make_scorer, roc_auc_score import scipy from scipy import stats import warnings warnings.filterwarnings(ignore) from sklearn.preprocessing import StandardScaler# 设置列标签 columns ([duration ,protocol_type ,service ,flag ,src_bytes ,dst_bytes ,land ,wrong_fragment ,urgent ,hot ,num_failed_logins ,logged_in ,num_compromised ,root_shell ,su_attempted ,num_root ,num_file_creations ,num_shells ,num_access_files ,num_outbound_cmds ,is_host_login ,is_guest_login ,count ,srv_count ,serror_rate ,srv_serror_rate ,rerror_rate ,srv_rerror_rate ,same_srv_rate ,diff_srv_rate ,srv_diff_host_rate ,dst_host_count ,dst_host_srv_count ,dst_host_same_srv_rate ,dst_host_diff_srv_rate ,dst_host_same_src_port_rate ,dst_host_srv_diff_host_rate ,dst_host_serror_rate ,dst_host_srv_serror_rate ,dst_host_rerror_rate ,dst_host_srv_rerror_rate ,attack ,level])# 从文件中读取训练集和测试集 df_trainpd.read_csv(../input/nslkdd/KDDTrain.txt,headerNone,namescolumns) df_testpd.read_csv(../input/nslkdd/KDDTest.txt,headerNone,namescolumns)数据内容如下所示 durationprotocol_typeserviceflagsrc_bytesdst_byteslandwrong_fragmenturgenthot...dst_host_same_srv_ratedst_host_diff_srv_ratedst_host_same_src_port_ratedst_host_srv_diff_host_ratedst_host_serror_ratedst_host_srv_serror_ratedst_host_rerror_ratedst_host_srv_rerror_rateattacklevel00tcpftp_dataSF49100000...0.170.030.170.000.000.000.050.00normal2010udpotherSF14600000...0.000.600.880.000.000.000.000.00normal1520tcpprivateS0000000...0.100.050.000.001.001.000.000.00neptune1930tcphttpSF23281530000...1.000.000.030.040.030.010.000.01normal2140tcphttpSF1994200000...1.000.000.000.000.000.000.000.00normal21..................................................................1259680tcpprivateS0000000...0.100.060.000.001.001.000.000.00neptune201259698udpprivateSF1051450000...0.960.010.010.000.000.000.000.00normal211259700tcpsmtpSF22313840000...0.120.060.000.000.720.000.010.00normal181259710tcpkloginS0000000...0.030.050.000.001.001.000.000.00neptune201259720tcpftp_dataSF15100000...0.300.030.300.000.000.000.000.00normal21 125973 rows × 43 columns 数据格式如下所示 检查训练集和测试集中重复数据的数量。 # 检查并打印训练集中重复数据的数量 print(df_train.duplicated().sum())# 检查并打印测试集中重复数据的数量 print(df_test.duplicated().sum())0 0 计算DataFrame中每个列的空值数量 df_train.isnull().sum()检查异常值 绘制所有列的箱线图以查看异常值 # 绘制箱线图 df_train.plot(kindbox, subplots1, layout(15, 3), figsize(20, 40)) plt.show()计算并返回训练数据集中‘attack’列中各标签的出现次数 df_train[attack].value_counts()用于计算数据框 df_train 中指定列 ‘attack’ 中不同值的出现次数并以降序排列。这里没有参数传递函数直接返回一个 Series 对象其中包含各标签的计数。这个操作对于了解数据的分布非常有用特别是当需要了解数据集中各类攻击的相对频率时。 将数据集中的异常类别转换为单一的异常类 该代码块主要对训练集和测试集进行处理将原始攻击类别转化为二元分类 正常normal和异常abnormal。这有助于简化后续的模型训练和评估过程。 # 将训练集中的攻击类别转化为二元分类 df_train[binary_attack]df_train.attack.map(lambda a: normal if a normal else abnormal) # 删除原始的攻击类别列 df_train.drop(attack,axis1,inplaceTrue)# 将测试集中的攻击类别转化为二元分类 df_test[binary_attack]df_test.attack.map(lambda a: normal if a normal else abnormal) # 删除测试集中的原始攻击类别列 df_test.drop(attack,axis1,inplaceTrue)df_train.select_dtypes([object]).columnsIndex([‘protocol_type’, ‘service’, ‘flag’, ‘binary_attack’], dtype‘object’) 数据编码 该代码块主要功能是对给定的数据集的几个指定列进行标签编码。 使用的是sklearn库中的preprocessing模块的LabelEncoder类。 from sklearn import preprocessing lepreprocessing.LabelEncoder() # 创建标签编码器实例clm[protocol_type, service, flag, binary_attack] # 需要进行标签编码的列名列表 for x in clm: # 遍历列名列表df_train[x]le.fit_transform(df_train[x]) # 对训练数据集的指定列进行标签编码df_test[x]le.fit_transform(df_test[x]) # 对测试数据集的指定列进行标签编码数据分割 对输入的数据集进行处理分割为训练集和测试集的特征和标签。 主要步骤包括 从训练集数据框df_train中去除标签列‘binary_attack’保留其余特征列得到训练集的特征x_train从训练集数据框df_train中提取标签列‘binary_attack’得到训练集的标签y_train从测试集数据框df_test中去除标签列‘binary_attack’保留其余特征列得到测试集的特征x_test从测试集数据框df_test中提取标签列‘binary_attack’得到测试集的标签y_test。 # 分割训练集的特征和标签 x_traindf_train.drop(binary_attack,axis1) y_traindf_train[binary_attack]# 分割测试集的特征和标签 x_testdf_test.drop(binary_attack,axis1) y_testdf_test[binary_attack]特征工程 计算特征与目标变量之间的互信息。 :param x_train: 训练集的特征矩阵其中每一列是一个特征。 :param y_train: 训练集的目标变量向量。 from sklearn.feature_selection import mutual_info_classif# 使用mutual_info_classif计算特征与目标变量的互信息 mutual_info mutual_info_classif(x_train, y_train)# 将计算结果转换为pandas Series方便后续处理 mutual_info pd.Series(mutual_info)# 设置Series的索引为特征名这样可以方便地与特征矩阵相对应 mutual_info.index x_train.columns# 按照互信息值降序排序使得最重要的特征排在前面 mutual_info.sort_values(ascendingFalse)绘制相互信息的柱状图 对名为mutual_info的数据结构假设为DataFrame按值进行降序排序 然后使用bar方法绘制柱状图。figsize(图形大小)参数设置为(20, 8)以确保图形足够大 便于细节查看和展示。该图形可用于展示不同变量间的相互信息量帮助分析者理解变量间的关联程度。 mutual_info.sort_values(ascendingFalse).plot.bar(figsize(20, 8));# 选择最重要的20个特征进行筛选 from sklearn.feature_selection import SelectKBest # 使用mutual_info_classif方法评估特征重要性选择最重要的20个特征 sel_five_cols SelectKBest(mutual_info_classif, k20) # 对训练数据进行特征选择 sel_five_cols.fit(x_train, y_train) # 获取选择出的特征的列名 x_train.columns[sel_five_cols.get_support()]Index([‘service’, ‘flag’, ‘src_bytes’, ‘dst_bytes’, ‘logged_in’, ‘count’, ‘serror_rate’, ‘srv_serror_rate’, ‘same_srv_rate’, ‘diff_srv_rate’, ‘srv_diff_host_rate’, ‘dst_host_count’, ‘dst_host_srv_count’, ‘dst_host_same_srv_rate’, ‘dst_host_diff_srv_rate’, ‘dst_host_same_src_port_rate’, ‘dst_host_srv_diff_host_rate’, ‘dst_host_serror_rate’, ‘dst_host_srv_serror_rate’, ‘level’], dtype‘object’) 为了确保训练集和测试集在进行模型训练和评估前其特征维度和类型保持一致只包含对模型有意义或者相关的特征从而提高模型的准确性和泛化能力。 # 将训练集和测试集的数据调整为只包含指定的列 col[service, flag, src_bytes, dst_bytes, logged_in,same_srv_rate, diff_srv_rate, dst_host_srv_count,dst_host_same_srv_rate, dst_host_diff_srv_rate]# 调整训练集特征矩阵仅包含指定的列 x_trainx_train[col]# 调整测试集特征矩阵也仅包含指定的列 x_testx_test[col]生成并显示一个热力图用于可视化x_train数据集的协方差矩阵。 # 创建一个新的图形窗口设置其宽度和高度 plt.figure(figsize(12,10)) # 生成热力图显示元素值使用RdYlGn颜色映射 psns.heatmap(x_train.corr(), annotTrue, cmapRdYlGn) 数据缩放 对机器学习模型的输入数据训练集和测试集进行标准化处理使得数据的范围在0到1之间以提升模型的性能和稳定性。 # 导入MinMaxScaler类用于数据的标准化处理 from sklearn.preprocessing import MinMaxScaler# 实例化MinMaxScaler对象用于后续的数据转换 scaler MinMaxScaler()# 对训练集数据进行标准化处理转换后的数据范围在[0, 1]之间 x_train scaler.fit_transform(x_train)# 对测试集数据进行标准化处理同样的转换确保训练集和测试集的特征缩放一致 x_test scaler.fit_transform(x_test)二元分类模型训练及预测 # 初始化各种模型并将它们以名称为键存储在一个字典中 models {}# 初始化逻辑回归模型 from sklearn.linear_model import LogisticRegression models[Logistic Regression] LogisticRegression()# 初始化线性支持向量机模型 from sklearn.svm import LinearSVC models[Support Vector Machines linear] LinearSVC()# 初始化多项式核支持向量机模型 models[Support Vector Machines plonomial] SVC(kernelpoly)# 初始化高斯核支持向量机模型通过调整C参数来避免过拟合 models[Support Vector Machines RBf] SVC(C100.0)# 初始化决策树模型限制树的最大深度为3 from sklearn.tree import DecisionTreeClassifier models[Decision Trees] DecisionTreeClassifier(max_depth3)# 初始化随机森林模型 from sklearn.ensemble import RandomForestClassifier models[Random Forest] RandomForestClassifier()# 初始化朴素贝叶斯模型 from sklearn.naive_bayes import GaussianNB models[Naive Bayes] GaussianNB()# 初始化K最近邻模型选择20个最近邻点 from sklearn.neighbors import KNeighborsClassifier models[K-Nearest Neighbor] KNeighborsClassifier(n_neighbors20)根据提供的模型集合分别训练每个模型作出预测并计算与存储各个模型的准确度、精确度和召回率。 使用的指标来自sklearn.metrics模块包括accuracy_score准确率、precision_score精确度、recall_score召回率。 三个字典accuracy、precision、recall用于存储每个模型对应的指标结果。 from sklearn.metrics import accuracy_score, precision_score, recall_scoreaccuracy, precision, recall {}, {}, {}for key in models.keys():# 对当前循环到的模型进行训练models[key].fit(x_train, y_train)# 使用训练好的模型对测试集进行预测predictions models[key].predict(x_test)# 计算并存储当前模型的准确率、精确度和召回率accuracy[key] accuracy_score(predictions, y_test)precision[key] precision_score(predictions, y_test)recall[key] recall_score(predictions, y_test)根据提供的模型准确度、精确度和召回率生成一个DataFrame df_model pd.DataFrame(indexmodels.keys(), columns[Accuracy, Precision, Recall]) # 初始化DataFrame设置索引为模型名称列名为Accuracy, Precision, Recalldf_model[Accuracy] accuracy.values() # 将accuracy字典的值赋给DataFrame的Accuracy列df_model[Precision] precision.values() # 将precision字典的值赋给DataFrame的Precision列df_model[Recall] recall.values() # 将recall字典的值赋给DataFrame的Recall列df_model # 输出生成的DataFrameAccuracyPrecisionRecallLogistic Regression0.7170420.9435690.611111Support Vector Machines linear0.7238730.9556170.615630Support Vector Machines plonomial0.7643720.9627230.653822Support Vector Machines RBf0.7729330.9573680.663977Decision Trees0.8230130.8409020.769579Random Forest0.7622870.9696220.650276Naive Bayes0.5462650.4406340.471463K-Nearest Neighbor0.7889460.9620020.680358 使用条形图可视化模型数据。 # 绘制条形图 ax df_model.plot.barh()# 设置图例 ax.legend(ncollen(models.keys()), # 根据模型数量确定图例列数bbox_to_anchor(0, 1), # 将图例位置设置在绘图区右上角loclower left, # 位置细节调整将图例放置在左下角prop{size: 14} # 设置图例文字大小 )# 调整布局确保图表各部分之间没有空隙 plt.tight_layout()遍历所有模型并绘制ROC曲线 from sklearn.metrics import plot_roc_curve# 遍历所有模型并绘制ROC曲线 for key in models.keys():plot_roc_curve( models[key], x_test, y_test)plot_roc_curve函数用于绘制ROC受试者操作特性曲线。参数models[key]表示模型从字典models中通过key获取对应的模型。x_test测试集的特征向量。y_test测试集的真实标签。返回值无返回值直接在图形窗口中绘制ROC曲线。不难得出随机森林和决策树分类器对于NSL-KDD数据集来说有较好的分类效果。 优化建议 平衡数据处理 NSL-KDD数据集中各类别的样本分布可能存在不均衡情况应考虑使用欠采样、过采样或SMOTE等方法来平衡正负样本。 特征工程改进 除了基于互信息的选择外可以尝试其他特征选择方法例如递归特征消除RFE、基于卡方检验的选择等以及探索更高阶的交互特征。可以进一步研究数据集中的特征关联性和冗余性减少共线性特征的影响。 模型调优 对于每个模型通过GridSearchCV或RandomizedSearchCV进行参数网格搜索寻找最优超参数组合提高模型性能。考虑集成学习方法比如AdaBoost、BaggingClassifier或者StackingClassifier结合多个基础模型提升整体表现。 评估指标 由于这是一个二分类问题且可能涉及类不平衡仅依赖准确率评价模型效果可能不够全面。应引入F1分数、AUC-ROC曲线等相关指标进行综合评估。 模型解释性 引入模型可解释性技术例如SHAP值、LIME等帮助理解模型在各个特征上的重要性以及为何做出特定预测增加系统的透明度和可信度。
http://www.zqtcl.cn/news/442788/

相关文章:

  • 郑州好的网站设计公司软件开发哪里学好
  • 网站新建设请示软件外包平台哪家可信赖
  • 做阿里巴巴还是做网站好安卓手机怎么做网站
  • 社区智慧警务网站如何推进警务室建设方案广东网络推广服务
  • 东莞艺美网站建设wordpress get header
  • 做玩具什么 网站比较好网址域名
  • 网站做用户登录中国建设部官方网站资格证查询
  • 济宁网站建设公司大型餐饮网站建设
  • 昊源建设监理有限公司网站做那种的视频网站有哪些
  • wordpress滑块代码seo外链增加
  • 衡阳网站建设公司地址书店网站怎么做
  • 如何检查网站是否做cdn加速html网页基础代码
  • 做网站的岗位好吗钓鱼网站到底怎么做
  • 大连做网站那个公司最好wordpress+高清背景
  • 怎样做网站xml案例建网站
  • 海口发布最新通告用二级域名做网站对seo
  • 网站301重定向 权重转移网站不用下载免费软件
  • 网站系统升级昆明做百度网站电话
  • 电子商务与网站建设实践论文wordpress 主题目录
  • 网站页面打不开中小企业网站推广
  • 佛山建网站企业网站怎么维护
  • 网站制作报价明细wordpress喜欢
  • 网站开发2008文化传播有限公司网站建设
  • 个人账号如何注册网站广州专业网站改版设计公司
  • wordpress视频网站采集沈阳建设工程质量检测中心网站
  • 做网站优化哪家好远程管理wordpress站群
  • 实用写作网站做企业策划的公司
  • 如何建立自己手机网站58招聘网站官网
  • 网站程序源码下载网站怎么做定位功能
  • 深圳vi设计公司联系西安seo诊断