1. 程式人生 > >歸一化----標準化---正則化----Python的實現

歸一化----標準化---正則化----Python的實現

1、(0,1)標準化:

from sklearn.preprocessing import MinMaxScaler

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

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


'''
sklearn 包就是這麼處理的,輸入必須是二維陣列,每個尺度是縱向分的,

舉個例子X_train為(2,3)矩陣,Min為第一列的最小值,第二列的最小值,第三列的最小值
                            Max 為第一列的最大值,為第一列的最大值,第二列的最大值

下面的例子結果:temp
array([[0., 1., 0.],
       [1., 0., 1.]])
scaler.scale_   為   1/ (Max - Min)
array([0.5       , 0.5       , 0.33333333])
'''
import numpy as np
from sklearn.preprocessing import MinMaxScaler

X_train = np.array([[ 2., 4.,  2.], 
                    [4,   2,    5]
                   ])
scaler = MinMaxScaler(feature_range=(0, 1))
temp = scaler.fit_transform(X_train)
print(scaler.scale_)#  array([0.5       , 0.5       , 0.33333333])
scaler.min_      #     array([-1.        , -1.        , -0.66666667])

scaler.inverse_transform(X_train )  # 預測完成後你歸一化 要保證和X_train 一個形狀

還有一個函式fit_transform很像transform,這裡就用fit_transform就可以,什麼情況下都用fit_transform,就完事了

scaler.min_  目前代表什麼還不知道呢。

scaler.inverse_transform(X_train )  # 預測完成後你歸一化 要保證和X_train 一個形狀

迴歸預測一般來說是(n,1)資料預測(n,1)的資料(有一些預測結果是(n,)的資料,需要變成(n,1)的資料,其實(n,)經驗證也可以,

將預測結果傳入inverse_transform  API 中,即可。

找大小的方法直接用np.max()

np.min()就行了,儘量不要用python內建的max()和min(),除非你喜歡用List.可以試試np.argsort()np.argmax()

3、Sigmoid函式

Sigmoid函式是一個具有S形曲線的函式,是良好的閾值函式,在(0, 0.5)處中心對稱,在(0, 0.5)附近有比較大的斜率而當資料趨向於正無窮和負無窮的時候,映射出來的值就會無限趨向於1和0.

個人非常喜歡的“歸一化方法”,之所以打引號是因為我覺得Sigmoid函式在閾值分割上也有很不錯的表現,根據公式的改變,就可以改變分割閾值,這裡作為歸一化方法,我們只考慮(0, 0.5)作為分割閾值的點的情況:

def sigmoid(X,useStatus):  #這裡useStatus管理是否使用sigmoid的狀態,方便除錯使用
    if useStatus:  
        return 1.0 / (1 + np.exp(-float(X)))
    else:  
        return float(X)