2.1對 特徵歸一化 的一些理解

來源:互聯網
上載者:User

標籤:mod   定義   歸一化   高斯   nump   scale   generated   效果   表示   

特徵歸一化有很多不同的叫法,比如:特徵縮放,Feature Normalization,Feature Scaling

資料標準化(歸一化)處理是資料採礦的一項基礎工作,不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到資料分析的結果,為了消除指標之間的量綱影響,需要進行資料標準化處理,以解決資料指標之間的可比性。未經處理資料經過資料標準化處理後,各指標處於同一數量級,適合進行綜合對比評價。

特徵歸一化的意義
  • 各特徵之間的大小範圍一致,才能使用距離度量等演算法
  • 加速梯度下降演算法的收斂
  • 在SVM演算法中,一致化的特徵能加速尋找支援向量的時間
  • 不同的機器學習演算法,能接受的輸入數值範圍不一樣
以下是兩種常用的歸一化方法:
  1. Min-Max標準化(Min-Max Normalization)線性歸一化

稱為離差標準化,是對未經處理資料的線性變換,使結果值對應到[0 1]之間。轉換函式如下:

x^*=\frac{x-min}{max-min}

該方法實現對未經處理資料的等比例縮放,其中x^*為歸一化後的資料,x為未經處理資料,max為樣本資料的最大值,min為樣本資料的最小值。

缺點:

  • 當有新資料加入時,可能導致max和min的變化,需要重新定義。
  • 資料不穩定,存在異常值和較多噪音

優點:

  • 當我們需要將特徵值都歸一化為某個範圍[a,b]時,選MinMaxScaler
  1. 0均值標準化(Z-score standardization)

這種方法給予未經處理資料的均值(mean)和標準差(standard deviation)進行資料的標準化。將未經處理資料集歸一化為均值為0、方差1的資料集,轉化函數為:

x^*=\frac{x-\mu}{\delta}

其中μ、δ分別為未經處理資料集的均值和方法。該種歸一化方式要求未經處理資料的分布可以近似為高斯分布,否則歸一化的效果會變得很糟糕。

優點:

  • 適用於資料的最大值和最小值未知,或存在孤立點
  1. 比較

以上為兩種比較普通但是常用的歸一化技術,那這兩種歸一化的應用情境是怎麼樣的呢?什麼時候第一種方法比較好、什麼時候第二種方法比較好呢?下面做一個簡要的分析概括:

  • 在分類、聚類演算法中,需要使用距離來度量相似性的時候、或者使用PCA技術進行降維的時候,第二種方法(Z-score
    standardization)表現更好。
  • 在不涉及距離度量、共變數計算、資料不符合正太分布的時候,可以使用第一種方法或其他歸一化方法。比像處理中,將RGB映像轉換為灰階映像後將其值限定在[0
    255]的範圍。
下面用Python來實現上述

舉例:假設有4個樣本及他們的特徵如下
樣本 | 特徵1 | 特徵2
---|---|---
1 | 10001 | 2
2 | 16020 | 4
3 | 12008 | 6
4 | 13131 | 8

可見歸一化前,特徵1和特徵2的大小不是一個數量級。歸一化後,特徵變為

樣本 特徵1 特徵2
1 0 0
2 1 0.33
3 0.73 0.67
4 0.81 1
min-max標準化(Min-Max Normalization)線性歸一化

sklearn.preprocessing.MinMaxScaler
在sklearn中,sklearn.preprocessing.MinMaxScaler是一種用於特徵歸一化的方法。使用樣本如下

from sklearn.preprocessing import MinMaxScalerx = [[10001,2],[16020,4],[12008,6],[13131,8]]min_max_scaler = MinMaxScaler()X_train_minmax = min_max_scaler.fit_transform(x)#歸一化後的結果X_train_minmaxarray([[ 0.        ,  0.        ],       [ 1.        ,  0.33333333],       [ 0.33344409,  0.66666667],       [ 0.52001994,  1.        ]])

它預設將每種特徵的值都歸一化到[0,1]之間,歸一化後的數值大小範圍是可調的(根據MinMaxScaler的參數feature_range調整)。下面代碼能將特徵歸一化到[-1,1]之間。

min_max_scaler = MinMaxScaler(feature_range=(-1,1))X_train_minmax = min_max_scaler.fit_transform(x)#歸一化後的結果X_train_minmaxarray([[-1.        , -1.        ],       [ 1.        , -0.33333333],       [ 0.46574339,  0.33333333],       [ 0.6152873 ,  1.        ]])

MinMaxScaler的實現公式如下

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))X_scaled = X_std * (max - min) + min

這是向量化的表達方式,說明X是矩陣,其中

  • X_std:將X歸一化到[0,1]之間
  • X.min(axis=0)表示列最小值
  • max,min表示MinMaxScaler的參數feature_range參數。即最終結果的大小範圍

以下例說明計算過程(max=1,min=0)
樣本 | 特徵1 | 特徵2
---|---|---
1 | 10001 | 2
2 | 16020 | 4
3 | 12008 | 6
4 | 13131 | 8
X.max | 16020 | 8
X.min | 10001 | 2

歸一化的過程如下,假設歸一化後的矩陣為S

  • S11=(10001-10001)/(16020-10001)=0
  • S21=(16020-10001)/(16020-10001)=1
  • S31=(12008-10001)/(16020-10001)=0.333444
  • S41=(13131-10001)/(16020-10001)=0.52002
  • S12=(2-2)/(8-2)=0
  • S22=(4-2)/(8-2)=0.33
  • S32=(6-2)/(8-2)=0.6667
  • S42=(8-2)/(8-2)=1

可見,結果與章節“MinMaxScaler使用”中的計算結果一致。

StandardScaler標準化方法 零均值歸一化

sklearn.preprocessing.StandardScaler
sklearn.preprocessing.robust_scale
在sklearn中,sklearn.preprocessing.StandardScaler是一種用於特徵歸一化的方法。使用樣本如下

from sklearn.preprocessing import StandardScalerx = [[10001,2],[16020,4],[12008,6],[13131,8]]X_scaler = StandardScaler()X_train = X_scaler.fit_transform(x)X_trainarray([[-1.2817325 , -1.34164079],       [ 1.48440157, -0.4472136 ],       [-0.35938143,  0.4472136 ],       [ 0.15671236,  1.34164079]])

歸一化後,矩陣每列的均值為0,標準差為1。注意,這裡的標準差是指加了Delta Degrees of Freedom因子後的標準差,這與傳統的標準差計算公式有區別。(在numpy中,有std()函數用於計算標準差)

StandardScaler的歸一化方式是用每個特徵減去列均值,再除以列標準差。
以下例說明計算過程,注意標準差是用np.std()計算的。

樣本 特徵1 特徵2
1 10001 2
2 16020 4
3 12008 6
4 13131 8
列均值 12790 5
列標準差 2175.96 2.236

歸一化的過程如下,假設歸一化後的矩陣為S

  • S11=(10001-12790)/2175.96=-1.28173
  • S21=(16020-12790)/2175.96=1.484
  • S31=(12008-12790)/2175.96=-0.35938
  • S41=(13131-12790)/2175.96=0.1567
  • S12=(2-5)/2.236=-1.342
  • S22=(4-5)/2.236=-0.447
  • S32=(6-5)/2.236=0.447
  • S42=(8-5)/2.236=1.3416

2.1對 特徵歸一化 的一些理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.