处理自己的数据集_手写代码实现KDD CUP99数据集的数据归一化处理

c9a42594381faccede849055faf5cc80.png

归一化是数据处理的常用方法之一,目的是消除不同评价指标之间的量纲对数据分析结果的影响,使各指标处于同一数量级,以解决数据指标之间的可比性问题。

目前学术界关于归一化和标准化的概念还不统一,常常会把这两个概念混用,但它们都是特征处理的一种方法,具体区别看公式就好区分了。这的归一化是指min-max归一化(Min-Max Normalization),基于数据的最小值和最大值对原始数据做线性变换,将结果值映射到[0 , 1]之间,归一化公式如下:

其实,在sklearn库中已经有非常优秀的数据归一化函数——MinMaxScaler(),我们只需要调用该函数就可以轻松实现数据归一化处理。但是这里为了加深对数据归一化的理解,就自己编写了一个数据归一化的程序。

数据集准备

在对kdd数据集标准化之前,需要先对数据集进行数值化处理,可以参考我上一篇文章:

追梦小公子:手写代码实现KDD CUP99数据集的数据数值化处理​zhuanlan.zhihu.com
5888f33cf051c2556bed00408d4a2253.png

数值化处理后的kdd数据集文件为kddcup.data.numerization.txt,百度网盘下载链接:

kddcup.data.numerization.txt
685.4M
·
百度网盘

但是kdd数据集的第4817100行数据存在错误,如图1所示。

08eafe2d9169d066717580e05fcb74e4.png
图1 kdd数据集的错误行数据

该行数据有56列,比正常数据多了14个特征,说明这行数据是错误的。所以在数值化处理后,我手动删除了错误的那一行数据,得到数值化并修正后的kdd数据集文件kddcup.data.numerization_corrected.txt,这也是本文用的数据集,百度网盘下载链接为:

kddcup.data.numerization_corrected.txt
685.4M
·
百度网盘

---------------------------------------------代码---------------------------------------------

导入所需的库

import numpy as np
import csv
from time import *

读取数据集文件

global x_data                           # 定义全局变量
begin_time = time()                     # 读取文件开始时间
data_numerization = open("kddcup.data.numerization_corrected.txt") # 打开数值化后的kdd数据集文件
lines = data_numerization.readlines()   # 按行读取所有数据,并返回列表
line_nums = len(lines)
x_data = np.zeros((line_nums, 42))      # 创建line_nums行 para_num列的矩阵
for i in range(line_nums):
    line = lines[i].strip().split(',')
    x_data[i, :] = line[0:42]           # 获取42个特征
data_numerization.close()
print('数据集大小:',x_data.shape)

# 耗时分析
end_time = time()                      # 读取文件结束时间
total_time = end_time-begin_time       # 读取文件耗时
print('读取文件耗时:',total_time,'s')

定义数据归一化函数

def MinMax_Normalization(x, n):
    if np.max(x)-np.min(x) == 0:
        x_data[:, n] = 0
    else:
        x_data[:, n] = (np.max(x) - np.min(x)) / (np.max(x) - np.min(x))
    print("The ", n , "feature  is normalization.")

获取每一列特征,并依次归一化

begin_time = time()                     # 归一化开始时间
for i in range(42):
    MinMax_Normalization(x_data[:, i], i)
    
# 耗时分析
end_time = time()                      # 归一化结束时间
total_time = end_time-begin_time       # 归一化耗时
print('归一化耗时:',total_time,'s')

将归一化后的数据集写入文件

data_normalization = open("kddcup.data.numerization_corrected_normalization.txt",'w', newline='')
csv_writer = csv.writer(data_normalization)
i = 0
while i<len(x_data[:, 0]):
    csv_writer.writerow(x_data[i, :])
    i = i + 1
data_normalization.close()
print('数据归一化done!')

-------------------------------------------写在最后-------------------------------------------

由于本人精力与能力有限无法尽善尽美,如有错误、疑问或者建议,欢迎留言讨论,希望这篇文章对您有所帮助。

原创文章,非商业转载请注明出处,商业转载请联系作者获得授权。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值