处理自己的数据集_手写代码实现KDD CUP99数据集的数据归一化处理
歸一化是數據處理的常用方法之一,目的是消除不同評價指標之間的量綱對數據分析結果的影響,使各指標處于同一數量級,以解決數據指標之間的可比性問題。
目前學術界關于歸一化和標準化的概念還不統一,常常會把這兩個概念混用,但它們都是特征處理的一種方法,具體區別看公式就好區分了。這的歸一化是指min-max歸一化(Min-Max Normalization),基于數據的最小值和最大值對原始數據做線性變換,將結果值映射到[0 , 1]之間,歸一化公式如下:
其實,在sklearn庫中已經有非常優秀的數據歸一化函數——MinMaxScaler(),我們只需要調用該函數就可以輕松實現數據歸一化處理。但是這里為了加深對數據歸一化的理解,就自己編寫了一個數據歸一化的程序。數據集準備
在對kdd數據集標準化之前,需要先對數據集進行數值化處理,可以參考我上一篇文章:
追夢小公子:手寫代碼實現KDD CUP99數據集的數據數值化處理?zhuanlan.zhihu.com數值化處理后的kdd數據集文件為kddcup.data.numerization.txt,百度網盤下載鏈接:
kddcup.data.numerization.txt685.4M · 百度網盤但是kdd數據集的第4817100行數據存在錯誤,如圖1所示。
圖1 kdd數據集的錯誤行數據該行數據有56列,比正常數據多了14個特征,說明這行數據是錯誤的。所以在數值化處理后,我手動刪除了錯誤的那一行數據,得到數值化并修正后的kdd數據集文件kddcup.data.numerization_corrected.txt,這也是本文用的數據集,百度網盤下載鏈接為:
kddcup.data.numerization_corrected.txt685.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] = 0else: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!')-------------------------------------------寫在最后-------------------------------------------
由于本人精力與能力有限無法盡善盡美,如有錯誤、疑問或者建議,歡迎留言討論,希望這篇文章對您有所幫助。
原創文章,非商業轉載請注明出處,商業轉載請聯系作者獲得授權。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的处理自己的数据集_手写代码实现KDD CUP99数据集的数据归一化处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rds 数据库营销报告_千人千面的营销数
- 下一篇: u盘数据恢复的原理_日臻薄技 | 电脑回