KDD CUP99数据预处理三个步骤

2024-03-13 12:38

本文主要是介绍KDD CUP99数据预处理三个步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

入侵检测实验一般使用的是KDD CUP99中的kddcup.data_10percent数据集。由于数据集中包含有符号型的数据属性,不适合直接处理,所以需要进行预处理,数据集的预处理一般由三个步骤:
1.将字符型特征转换成数值型特征
2.数值标准化
3.数值归一化

关于KDD CUP99的数据预处理看了两个博客,两个博客合在一起比较完整,所以这里转载过来,记录下来方便学习。

!!!以下部分转自:https://blog.csdn.net/asialee_bird/article/details/80491256

1、数据集下载:http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html

2、KDDCup99网络入侵检测数据集介绍

https://blog.csdn.net/com_stu_zhang/article/details/6987632

https://www.cnblogs.com/gongyanc/p/6703532.html

3、Weka进阶——基于KDD99数据集的入侵检测分析

https://blog.csdn.net/jbfsdzpp/article/details/44099849

4、符号型特征数值化

采用one-hot方法进行数值化:https://blog.csdn.net/qq_28617019/article/details/79717184

5、KDD CUP99数据集预处理

(1)字符型特征转换为数值型特征(即符号型特征数值化)
Python3对KDD CUP99数据集预处理代码实现(仅实现字符型特征转为数值型特征)

#kdd99数据集预处理
#将kdd99符号型数据转化为数值型数据#coding:utf-8import numpy as np
import pandas as pd
import csv
import time
global label_list  #label_list为全局变量#定义kdd99数据预处理函数
def preHandel_data():source_file='kddcup.data_10_percent_corrected'handled_file='kddcup.data_10_percent_corrected.csv'data_file=open(handled_file,'w',newline='')     #python3.x中添加newline=''这一参数使写入的文件没有多余的空行with open(source_file,'r') as data_source:csv_reader=csv.reader(data_source)csv_writer=csv.writer(data_file)count=0   #记录数据的行数,初始化为0for row in csv_reader:temp_line=np.array(row)   #将每行数据存入temp_line数组里temp_line[1]=handleProtocol(row)   #将源文件行中3种协议类型转换成数字标识temp_line[2]=handleService(row)    #将源文件行中70种网络服务类型转换成数字标识temp_line[3]=handleFlag(row)       #将源文件行中11种网络连接状态转换成数字标识temp_line[41]=handleLabel(row)   #将源文件行中23种攻击类型转换成数字标识csv_writer.writerow(temp_line)count+=1#输出每行数据中所修改后的状态print(count,'status:',temp_line[1],temp_line[2],temp_line[3],temp_line[41])data_file.close()#将相应的非数字类型转换为数字标识即符号型数据转化为数值型数据
def find_index(x,y):return [i for i in range(len(y)) if y[i]==x]#定义将源文件行中3种协议类型转换成数字标识的函数
def handleProtocol(input):protocol_list=['tcp','udp','icmp']if input[1] in protocol_list:return find_index(input[1],protocol_list)[0]#定义将源文件行中70种网络服务类型转换成数字标识的函数
def handleService(input):service_list=['aol','auth','bgp','courier','csnet_ns','ctf','daytime','discard','domain','domain_u','echo','eco_i','ecr_i','efs','exec','finger','ftp','ftp_data','gopher','harvest','hostnames','http','http_2784','http_443','http_8001','imap4','IRC','iso_tsap','klogin','kshell','ldap','link','login','mtp','name','netbios_dgm','netbios_ns','netbios_ssn','netstat','nnsp','nntp','ntp_u','other','pm_dump','pop_2','pop_3','printer','private','red_i','remote_job','rje','shell','smtp','sql_net','ssh','sunrpc','supdup','systat','telnet','tftp_u','tim_i','time','urh_i','urp_i','uucp','uucp_path','vmnet','whois','X11','Z39_50']if input[2] in service_list:return find_index(input[2],service_list)[0]#定义将源文件行中11种网络连接状态转换成数字标识的函数
def handleFlag(input):flag_list=['OTH','REJ','RSTO','RSTOS0','RSTR','S0','S1','S2','S3','SF','SH']if input[3] in flag_list:return find_index(input[3],flag_list)[0]#定义将源文件行中攻击类型转换成数字标识的函数(训练集中共出现了22个攻击类型,而剩下的17种只在测试集中出现)
def handleLabel(input):#label_list=['normal.', 'buffer_overflow.', 'loadmodule.', 'perl.', 'neptune.', 'smurf.',# 'guess_passwd.', 'pod.', 'teardrop.', 'portsweep.', 'ipsweep.', 'land.', 'ftp_write.',# 'back.', 'imap.', 'satan.', 'phf.', 'nmap.', 'multihop.', 'warezmaster.', 'warezclient.',# 'spy.', 'rootkit.']global label_list  #在函数内部使用全局变量并修改它if input[41] in label_list:return find_index(input[41],label_list)[0]else:label_list.append(input[41])return find_index(input[41],label_list)[0]if __name__=='__main__':start_time=time.clock()global label_list   #声明一个全局变量的列表并初始化为空label_list=[]preHandel_data()end_time=time.clock()print("Running time:",(end_time-start_time))  #输出程序运行时间

该代码仅对10%的训练集(kddcup.data_10_percent_corrected)进行处理

!!!以下部分转自:https://blog.csdn.net/jsh306/article/details/86536707

(2)数值标准化

首先计算各属性的平均值和平均绝对误差,公式为
在这里插入图片描述

其中,X_k 表示第k个属性的均值,S_k表示第k个属性的平均绝对误差,X_ik表示第i条记录的第k个属性。

然后对每条数据记录进行标准化度量,即
在这里插入图片描述

其中,Z_ik表示标准化后的第i条数据记录的第k个属性值。

Python3 对数据集的数据标准化方法实现如下:

def Handle_data():source_file = "kddcup.data_10_percent_corrected.csv"handled_file = "kddcup1.data_10_percent_corrected.csv"data_file = open(handled_file,'w',newline='')with open(source_file,'r') as data_source:csv_reader = csv.reader(data_source)       count = 0        row_num = ""        for row in csv_reader:count = count+1        row_num = row               sum = np.zeros(len(row_num))  #和sum.astype(float) avg = np.zeros(len(row_num)) #平均值avg.astype(float)stadsum = np.zeros(len(row_num)) #绝对误差stadsum.astype(float)        stad = np.zeros(len(row_num)) #平均绝对误差stad.astype(float)  dic = {} lists = [] for i in range(0,len(row_num)):with open(source_file,'r') as data_source:csv_reader = csv.reader(data_source)for row in csv_reader:sum[i] += float(row[i])avg[i] = sum[i] / count    #每一列的平均值求得                    with open(source_file,'r') as data_source:csv_reader = csv.reader(data_source)for row in csv_reader:stadsum[i] += math.pow(abs(float(row[i]) - avg[i]), 2)stad[i] = stadsum[i] / count #每一列的平均绝对误差求得       with open(source_file,'r') as data_source:csv_reader = csv.reader(data_source)list = []                                                              for row in csv_reader:                        temp_line=np.array(row)   #将每行数据存入temp_line数组里                  if avg[i] == 0 or stad[i] == 0:temp_line[i] = 0else:temp_line[i] = abs(float(row[i]) - avg[i]) / stad[i]                                             list.append(temp_line[i])                          lists.append(list)                for j in range(0,len(lists)):                                                                dic[j] = lists[j] #将每一列的元素值存入字典中                                                                                                          df = pd.DataFrame(data = dic)df.to_csv(data_file,index=False,header=False)                              data_file.close()

(3)数值归一化

将标准化后的每个数值归一化到[0,1]区间。公式为
在这里插入图片描述

其中max为样本数据的最大值,min为样本数据的最小值,x为标准化后的数据。

Python3 对数据集的数据归一化方法实现如下:

def Find_Maxmin():source_file = "kddcup1.data_10_percent_corrected.csv" handled_file = "kddcup2.data_10_percent_corrected.csv"dic = {}data_file = open(handled_file,'w',newline='')with open(source_file,'r') as data_source:csv_reader=csv.reader(data_source)       count = 0        row_num = ""        for row in csv_reader:count = count+1        row_num = row       with open(source_file,'r') as data_source:csv_reader=csv.reader(data_source)final_list = list(csv_reader)print(final_list)jmax = []jmin = []for k in range(0, len(final_list)):                              jmax.append(max(final_list[k]))jmin.append(min(final_list[k]))jjmax = float(max(jmax))  jjmin = float(min(jmin))           listss = []  for i in range(0,len(row_num)):lists = [] with open(source_file,'r') as data_source:csv_reader=csv.reader(data_source)           for row in csv_reader: if (jjmax-jjmin) == 0:x = 0else:x = (float(row[i])-jjmin) / (jjmax-jjmin)                      lists.append(x)listss.append(lists)for j in range(0,len(listss)):                                         dic[j] = listss[j]df = pd.DataFrame(data = dic)df.to_csv(data_file,index=False,header=False)data_file.close()

这篇关于KDD CUP99数据预处理三个步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

IDEA之MyBatisX使用的图文步骤

《IDEA之MyBatisX使用的图文步骤》本文主要介绍了IDEA之MyBatisX使用,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录一、idea插件安装二、IDEA配置数据库连接(以mysql为例)三、生产基础代码一、idea插

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

Redis中的数据一致性问题以及解决方案

《Redis中的数据一致性问题以及解决方案》:本文主要介绍Redis中的数据一致性问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Redis 数据一致性问题的产生1. 单节点环境的一致性问题2. 网络分区和宕机3. 并发写入导致的脏数据4. 持