資料的預處理

2022-05-15 02:03:24 字數 3313 閱讀 2998

機器學習演算法無法理解原始資料,所以需對原始資料進行預處理,常用預處理如下:

預處理主要使用了preprocessing包,所以需對該包進行匯入:

import

numpy as np

from sklearn import

preprocessing

data=np.array([

[3,-1.5,2,-5.4],

[0,4,-0.3,2.1],

[1,3.3,-1.9,-4.3]

])

#

將特徵資料的分布調整成標準正太分布,也叫高斯分布,

#也就是使得資料的均值維0,方差為1.標準化是針對每一列而言的

#方法一

data_standardized=preprocessing.scale(data)

print('

mean=

',data_standardized.mean(axis=0))#

特徵均值幾乎為0

print('

std=

',data_standardized.std(axis=0))#

標準差為1

#方法二

scaler=preprocessing.standardscaler().fit(data)

print('

mean=

',scaler.transform(data).mean(axis=0))#

特徵均值幾乎為0

print('

std=

',scaler.transform(data).std(axis=0))#

標準差為1

#

為了對付那些標準差相當小的特徵並且保留下稀疏資料中的0值

#方法一:計算公式如下:

#x_std = (x - x.min(axis=0)) / (x.max(axis=0) - x.min(axis=0))

#x_scaled = x_std / (max - min) + min

data_minmax_scaler = preprocessing.minmaxscaler(feature_range=(0, 1))

data_scaled =data_minmax_scaler.fit_transform(data)

print("

min max scaled data:

", data_scaled)

#方法二:特徵中絕對值最大的那個數為1,其他數以此維標準分布在[[-1,1]之間

max_abs_scaler =preprocessing.maxabsscaler()

x_train_maxsbs =max_abs_scaler.fit_transform(data)

print("

max abs scaled data:

", x_train_maxsbs)

#

正則化:保證每個特徵向量的值都縮放到相同的數值範圍內,

#提高不同特徵特徵資料的可比性,如資料有許多異常值可使用此方法

#方法一:第二個引數可謂l1與l2,最常用為調整到l1範數,使所有特徵向量之和為1

data_normalized = preprocessing.normalize(data, norm='l1'

)print("

\nl1 normalized data:\n

", data_normalized)

#方法二:

normalizer = preprocessing.normalizer(copy=true, norm='

l2').fit(data)#

建立正則器

normalizer.transform(data)

#

將數值型的特徵資料轉換成布林型別的值

#方法一

data_binarized = preprocessing.binarizer(threshold=1.4).transform(data)#

比1.4大的為1,小的為0

print("

\nbinarized data:\n

", data_binarized)

#方法二:

binarizer = preprocessing.binarizer(threshold=0)

print("

\nbinarized data:\n

", binarizer.transform(data))

#

encoder =preprocessing.onehotencoder()

encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])

encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()

print("

encoded vector:

", encoded_vector)

print("

_values_:

", encoder.n_values_)#

值的每個特徵的最大數量。

print("

encoded vector:

", encoder.feature_indices_)

#

imp = preprocessing.imputer(missing_values='

nan', axis=0)#

nan可換成其他

imp.fit([[1, 2], [np.nan, 3], [7, 6]])

x = [[np.nan, 2], [6, np.nan], [7, 6]]

print(imp.transform(x))#

填入(1+7)/2和(2+3+6)/3

#

生成多項式的特徵,得到高階相互作用特徵

poly = preprocessing.polynomialfeatures(2)#

建立2次方的多項式

print(poly.fit_transform(data))

#

定製變壓器:輔助資料清洗或處理

transformer =preprocessing.functiontransformer(np.log1p)

print(transformer.transform(np.array([[0, 1], [2, 3]])))

python機器學習經典例項

資料預處理

現實世界中資料大體上都是不完整,不一致的髒資料,無法直接進行資料探勘,或挖掘結果差強人意。為了提前資料探勘的質量產生了資料預處理技術。資料預處理有多種方法 資料清理,資料整合,資料變換,資料歸約等。這些資料處理技術在資料探勘之前使用,大大提高了資料探勘模式的質量,降低實際挖掘所需要的時間。一 資料清...

資料預處理

常見的資料預處理方法,以下通過sklearn的preprocessing模組來介紹 變換後各維特徵有0均值,單位方差。也叫z score規範化 零均值規範化 計算方式是將特徵值減去均值,除以標準差。sklearn.preprocessing scale x 一般會把train和test集放在一起做標...

資料預處理

用cut函式分箱 有時把數值聚集在一起更有意義。例如,如果我們要為交通狀況 路上的汽車數量 根據時間 分鐘資料 建模。具體的分鐘可能不重要,而時段如 上午 下午 傍晚 夜間 深夜 更有利於 如此建模更直觀,也能避免過度擬合。這裡我們定義乙個簡單的 可復用的函式,輕鬆為任意變數分箱。def binni...