1. 程式人生 > >tensorflow預處理:資料標準化的幾種方法

tensorflow預處理:資料標準化的幾種方法

 

資料歸一化問題是資料探勘中特徵向量表達時的重要問題,當不同的特徵成列在一起的時候,由於特徵本身表達方式的原因而導致在絕對數值上的小資料被大資料“吃掉”的情況,這個時候我們需要做的就是對抽取出來的features vector進行歸一化處理,以保證每個特徵被分類器平等對待。下面我描述幾種常見的Normalization Method,並提供相應的python實現(其實很簡單):

1、(0,1)標準化:

這是最簡單也是最容易想到的方法,通過遍歷feature vector裡的每一個數據,將Max和Min的記錄下來,並通過Max-Min作為基數(即Min=0,Max=1)進行資料的歸一化處理:

LaTex:{x}_{normalization}=\frac{x-Min}{Max-Min}

Python實現:

def MaxMinNormalization(x,Max,Min):
    x = (x - Min) / (Max - Min);
    return x;

找大小的方法直接用np.max()和np.min()就行了,儘量不要用python內建的max()和min(),除非你喜歡用List管理數字偷笑

 

2、Z-score標準化:

這種方法給予原始資料的均值(mean)和標準差(standard deviation)進行資料的標準化。經過處理的資料符合標準正態分佈,即均值為0,標準差為1,這裡的關鍵在於複合標準正態分佈,個人認為在一定程度上改變了特徵的分佈,關於使用經驗上歡迎討論,我對這種標準化不是非常地熟悉,轉化函式為:

LaTex:{x}_{normalization}=\frac{x-\mu }{\sigma }

Python實現:

def Z_ScoreNormalization(x,mu,sigma):

    x = (x - mu) / sigma;

    return x;
def get_train_data(batch_size=60,time_step=20,train_begin=0,train_end=5800):
    batch_index=[]
    data_train=data[train_begin:train_end]
    #標準化 np.mean(data_train,axis=0) 計算每一列的均值,np.std(data_train,axis=0)每列的標準差
    normalized_train_data=(data_train-np.mean(data_train,axis=0))/np.std(data_train,axis=0)  
    print "normalized_train_data:\n",normalized_train_data

這裡一樣,mu(即均值)用np.average(),sigma(即標準差)用np.std()即可。
 

3、Sigmoid函式

Sigmoid函式是一個具有S形曲線的函式,是良好的閾值函式,在(0, 0.5)處中心對稱,在(0, 0.5)附近有比較大的斜率,而當資料趨向於正無窮和負無窮的時候,映射出來的值就會無限趨向於1和0,是個人非常喜歡的“歸一化方法”,之所以打引號是因為我覺得Sigmoid函式在閾值分割上也有很不錯的表現,根據公式的改變,就可以改變分割閾值,這裡作為歸一化方法,我們只考慮(0, 0.5)作為分割閾值的點的情況:

 

LaTex:{x}_{normalization}=\frac{1}{1+{e}^{-x}}

Python實現:

def sigmoid(X,useStatus):
    if useStatus:
        return 1.0 / (1 + np.exp(-float(X)));
    else:
        return float(X);

這裡useStatus管理是否使用sigmoid的狀態,方便除錯使用。

參考

https://blog.csdn.net/kryolith/article/details/39770187