數據的標準化與歸一化


聊一聊Normalization and Standardization

什麼是

Normalization就是歸一化,是最小-最大縮放(min-max scaling)的特例,指的是將數據縮放到指定range,這個range通常是0 1或者-1 +1,直觀來講就是下圖,在數據不包含離群點時很有用,
Screen Shot 2017-11-29 at 12.35.41

公式則是

$$
x^{(i)}
$$

若要縮放至-1~+1,則是
$$
x' = frac{x – min}{max – min}
$$

代碼實現

 1
2
3
4
5
6
7
8
 #導入數據預處理庫
from

#範圍縮放標準化
min_max_scaler = preprocessing.MinMaxScaler()

#訓練集縮放標準化
min_max_scaler.fit_transform(X_train)
 1
2
 #測試集縮放標準化
min_max_scaler.fit_transform(X_test)

Z-score 標準化指的是,通過縮放讓數據的均值為0(移除均值),標準差為固定值(比如1)。在許多模型裡,如SVM的RBF、線性模型的L1 & L2 正則項對於所有的feature都有這樣的假設。
$$
x^{(i)}_{std} = frac{x^{(i)} – mu_x}{sigma_x}
$$

以下是一個簡單的例子展示了兩者的區別:

Screen Shot 2017-11-29 at 12.41.13

 1
2
3
4
5
6
7
8
 #導入數據預處理庫
from

#數據標準化
scaler = preprocessing.StandardScaler().fit(X_train)

#訓練集數據標準化
scaler.transform(X_train)

同時對測試集的數據進行標準化處理,以保證訓練集和測試集的變換方式相同。

 1
2
 #測試集數據標準化
scaler.transform(X_test)

值得注意

從流程上講,標準化和歸一化應該在讀入數據、處理缺失值,切分訓練測試集之後,而且我們要做的是在切分之後,在訓練集fit,再去transform測試集,而不是在整個數據上轉換以後再切分,因為

類似於缺失值的填充,舉個例子,我們使用均值填充以下數據,

 1
2
3
4
5
6
 #使用均值填充缺失值
imp = Imputer(missing_values=
imp.fit(X_train)

#填充訓練集
X_train=imp.transform(X_train)

以同樣的方式填充測試集,以保證測試集和訓練集的數據填充方式保持一致。

 1
2
 #填充測試集
X_test=imp.transform(X_test)

Leave a Comment

Your email address will not be published.