处理自己的数据集_手写代码实现KDD CUP99数据集的数据归一化处理
歸一化是數(shù)據(jù)處理的常用方法之一,目的是消除不同評(píng)價(jià)指標(biāo)之間的量綱對(duì)數(shù)據(jù)分析結(jié)果的影響,使各指標(biāo)處于同一數(shù)量級(jí),以解決數(shù)據(jù)指標(biāo)之間的可比性問(wèn)題。
目前學(xué)術(shù)界關(guān)于歸一化和標(biāo)準(zhǔn)化的概念還不統(tǒng)一,常常會(huì)把這兩個(gè)概念混用,但它們都是特征處理的一種方法,具體區(qū)別看公式就好區(qū)分了。這的歸一化是指min-max歸一化(Min-Max Normalization),基于數(shù)據(jù)的最小值和最大值對(duì)原始數(shù)據(jù)做線(xiàn)性變換,將結(jié)果值映射到[0 , 1]之間,歸一化公式如下:
其實(shí),在sklearn庫(kù)中已經(jīng)有非常優(yōu)秀的數(shù)據(jù)歸一化函數(shù)——MinMaxScaler(),我們只需要調(diào)用該函數(shù)就可以輕松實(shí)現(xiàn)數(shù)據(jù)歸一化處理。但是這里為了加深對(duì)數(shù)據(jù)歸一化的理解,就自己編寫(xiě)了一個(gè)數(shù)據(jù)歸一化的程序。數(shù)據(jù)集準(zhǔn)備
在對(duì)kdd數(shù)據(jù)集標(biāo)準(zhǔn)化之前,需要先對(duì)數(shù)據(jù)集進(jìn)行數(shù)值化處理,可以參考我上一篇文章:
追夢(mèng)小公子:手寫(xiě)代碼實(shí)現(xiàn)KDD CUP99數(shù)據(jù)集的數(shù)據(jù)數(shù)值化處理?zhuanlan.zhihu.com數(shù)值化處理后的kdd數(shù)據(jù)集文件為kddcup.data.numerization.txt,百度網(wǎng)盤(pán)下載鏈接:
kddcup.data.numerization.txt685.4M · 百度網(wǎng)盤(pán)但是kdd數(shù)據(jù)集的第4817100行數(shù)據(jù)存在錯(cuò)誤,如圖1所示。
圖1 kdd數(shù)據(jù)集的錯(cuò)誤行數(shù)據(jù)該行數(shù)據(jù)有56列,比正常數(shù)據(jù)多了14個(gè)特征,說(shuō)明這行數(shù)據(jù)是錯(cuò)誤的。所以在數(shù)值化處理后,我手動(dòng)刪除了錯(cuò)誤的那一行數(shù)據(jù),得到數(shù)值化并修正后的kdd數(shù)據(jù)集文件kddcup.data.numerization_corrected.txt,這也是本文用的數(shù)據(jù)集,百度網(wǎng)盤(pán)下載鏈接為:
kddcup.data.numerization_corrected.txt685.4M · 百度網(wǎng)盤(pán)---------------------------------------------代碼---------------------------------------------
導(dǎo)入所需的庫(kù)
import numpy as np import csv from time import *讀取數(shù)據(jù)集文件
global x_data # 定義全局變量 begin_time = time() # 讀取文件開(kāi)始時(shí)間 data_numerization = open("kddcup.data.numerization_corrected.txt") # 打開(kāi)數(shù)值化后的kdd數(shù)據(jù)集文件 lines = data_numerization.readlines() # 按行讀取所有數(shù)據(jù),并返回列表 line_nums = len(lines) x_data = np.zeros((line_nums, 42)) # 創(chuàng)建line_nums行 para_num列的矩陣 for i in range(line_nums):line = lines[i].strip().split(',')x_data[i, :] = line[0:42] # 獲取42個(gè)特征 data_numerization.close() print('數(shù)據(jù)集大小:',x_data.shape)# 耗時(shí)分析 end_time = time() # 讀取文件結(jié)束時(shí)間 total_time = end_time-begin_time # 讀取文件耗時(shí) print('讀取文件耗時(shí):',total_time,'s')定義數(shù)據(jù)歸一化函數(shù)
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() # 歸一化開(kāi)始時(shí)間 for i in range(42):MinMax_Normalization(x_data[:, i], i)# 耗時(shí)分析 end_time = time() # 歸一化結(jié)束時(shí)間 total_time = end_time-begin_time # 歸一化耗時(shí) print('歸一化耗時(shí):',total_time,'s')將歸一化后的數(shù)據(jù)集寫(xiě)入文件
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('數(shù)據(jù)歸一化done!')-------------------------------------------寫(xiě)在最后-------------------------------------------
由于本人精力與能力有限無(wú)法盡善盡美,如有錯(cuò)誤、疑問(wèn)或者建議,歡迎留言討論,希望這篇文章對(duì)您有所幫助。
原創(chuàng)文章,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的处理自己的数据集_手写代码实现KDD CUP99数据集的数据归一化处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: rds 数据库营销报告_千人千面的营销数
- 下一篇: u盘数据恢复的原理_日臻薄技 | 电脑回