歸一化----標準化---正則化----Python的實現
阿新 • • 發佈:2018-12-13
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)