Python資料處理從零開始----第三章(pandas)③資料標準化
標準化,也稱去均值和方差按比例縮放
資料集的 標準化 對scikit-learn中實現的大多數機器學習演算法來說是 常見的要求 。如果個別特徵或多或少看起來不是很像標準正態分佈(具有零均值和單位方差),那麼它們的表現力可能會較差。在實際情況中,我們經常忽略特徵的分佈形狀,直接經過去均值來對某個特徵進行中心化,再透過除以非常量特徵(non-constant features)的標準差進行縮放。
例如,在機器學習演算法的目標函式(例如SVM的RBF核心或線性模型的l1和l2正則化),許多學習演算法中目標函式的基礎都是假設所有的特徵都是零均值並且具有同一階數上的方差。如果某個特徵的方差比其他特徵大幾個數量級,那麼它就會在學習演算法中佔據主導位置,導致學習器並不能像我們說期望的那樣,從其他特徵中學習。
函式 [scale
]"sklearn.preprocessing.scale"為陣列形狀的資料集的標準化提供了一個快捷實現:
from sklearn import preprocessingimport numpy as np X_train = np.array([[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]]) X_scaled = preprocessing.scale(X_train) X_scaled Out[28]: array([[ 0. , -1.22474487, 1.33630621], [ 1.22474487, 0. , -0.26726124], [-1.22474487, 1.22474487, -1.06904497]])
經過縮放後的資料具有零均值以及標準方差:
X_scaled.mean(axis=0) Out[29]: array([0., 0., 0.]) X_scaled.std(axis=0) Out[30]: array([1., 1., 1.])
預處理
模組還提供了一個實用類 ,它實現了轉化器的API來計算訓練集上的平均值和標準偏差,以便以後能夠在測試集上重新應用相同的變換。因此,這個類適用於 的早期步驟:
from sklearn.preprocessing import StandardScaler scaler = preprocessing.StandardScaler().fit(X_train) scaler Out[31]: StandardScaler(copy=True, with_mean=True, with_std=True) scaler.mean_ Out[32]: array([1. , 0. , 0.33333333]) scaler.scale_ Out[33]: array([0.81649658, 0.81649658, 1.24721913]) scaler.transform(X_train) Out[34]: array([[ 0. , -1.22474487, 1.33630621], [ 1.22474487, 0. , -0.26726124], [-1.22474487, 1.22474487, -1.06904497]])
縮放類物件可以在新的資料上實現和訓練集相同縮放操作:
X_test = [[-1., 1., 0.]] scaler.transform(X_test) array([[-2.44..., 1.22..., -0.26...]])
你也可以透過在建構函式 :class:StandardScaler 中傳入引數 with_mean=False` 或者``with_std=False 來取消中心化或縮放操作
將特徵縮放至特定範圍內
一種標準化是將特徵縮放到給定的最小值和最大值之間,通常在零和一之間,或者也可以將每個特徵的最大絕對值轉換至單位大小。可以分別使用 [MinMaxScaler
] 和 [MaxAbsScaler
] 實現。使用這種縮放的目的包括實現特徵極小方差的魯棒性以及在稀疏矩陣中保留零元素。以下是一個將簡單的資料矩陣縮放到[0, 1]
的例子:
X_train = np.array([[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]]) ...>>> min_max_scaler = preprocessing.MinMaxScaler()>>> X_train_minmax = min_max_scaler.fit_transform(X_train)>>> X_train_minmax array([[ 0.5 , 0. , 1. ], [ 1. , 0.5 , 0.33333333], [ 0. , 1. , 0. ]])
同樣的轉換例項可以被用與在訓練過程中不可見的測試資料:實現和訓練資料一致的縮放和移位操作:
X_test = np.array([[ -3., -1., 4.]])>>> X_test_minmax = min_max_scaler.transform(X_test)>>> X_test_minmax array([[-1.5 , 0. , 1.66666667]])
可以檢查縮放器(scaler)屬性,來觀察在訓練集中學習到的轉換操作的基本性質:
min_max_scaler.scale_ array([ 0.5 , 0.5 , 0.33...]) >>> min_max_scaler.min_ array([ 0. , 0.5 , 0.33...])
如果給 提供一個明確的 feature_range=(min, max)
,完整的公式是:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
類 的工作原理非常相似,但是它只透過除以每個特徵的最大值將訓練資料特徵縮放至 [-1, 1]
範圍內,這就意味著,訓練資料應該是已經零中心化或者是稀疏資料。 例子::用先前例子的資料實現最大絕對值縮放操作。
以下是使用上例中資料運用這個縮放器的例子:
X_train = np.array([[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]]) ...>>> max_abs_scaler = preprocessing.MaxAbsScaler()>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)>>> X_train_maxabs # doctest +NORMALIZE_WHITESPACE^array([[ 0.5, -1. , 1. ], [ 1. , 0. , 0. ], [ 0. , 1. , -0.5]])>>> X_test = np.array([[ -3., -1., 4.]])>>> X_test_maxabs = max_abs_scaler.transform(X_test)>>> X_test_maxabs array([[-1.5, -1. , 2. ]])>>> max_abs_scaler.scale_ array([ 2., 1., 2.])
在 [scale
]模組中進一步提供了方便的功能。當你不想建立物件時,可以使用如 [minmax_scale
]以及 [maxabs_scale
].
作者:夜神moon
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2818428/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python資料處理-pandas用法Python
- Python資料處理從零開始----第四章(視覺化)(5)(韋恩圖)Python視覺化
- Python利用pandas處理資料與分析Python
- Python資料預處理:徹底理解標準化和歸一化Python
- 資料的規範化——Pandas處理
- Python 資料處理庫 pandas 入門教程Python
- Python 資料處理庫 pandas 進階教程Python
- 資料處理--pandas問題
- 【Python自動化Excel】pandas處理Excel資料的基本流程PythonExcel
- 從零開始學機器學習——準備和視覺化資料機器學習視覺化
- 資料清洗與預處理:使用 Python Pandas 庫Python
- 從零開始學Python:第22課-Python標準庫初探Python
- Python資料處理(二):處理 Excel 資料PythonExcel
- 手把手教你從資料預處理開始體驗圖資料庫資料庫
- 我從零開始構建MySQL資料處理系統(用Python)學到這7個教訓!MySqlPython
- Python自動化測試-使用Pandas來高效處理測試資料Python
- 資料預處理之 pandas 讀表
- 從零開始學習時空資料視覺化(序)視覺化
- python 處理資料Python
- 從零開始資料分析01--什麼是資料分析
- Python自動化處理Excel資料PythonExcel
- 資料視覺化Seaborn從零開始學習教程(三) 資料分佈視覺化篇視覺化
- 從零開始實現資料庫自動化巡檢(一)資料庫
- Pandas 基礎 (5) - 處理缺失的資料
- pandas 資料處理 一些常用操作
- 處理pandas讀取資料為nan時NaN
- Pandas高階教程之:處理缺失資料
- Pandas高階教程之:處理text資料
- 從零開始學Python:第九課-常用資料結構之字串Python資料結構字串
- 資料視覺化初探-從零開始開發一個渲染引擎概述視覺化
- 從零開始學Spring Boot系列-返回json資料Spring BootJSON
- 關於使用sklearn進行資料預處理 —— 歸一化/標準化/正則化
- Python - pandas 資料分析Python
- pandas 處理資料和crc16計算
- oracle遊標批次處理資料Oracle
- 從零開始學Python:第十一課-常用資料結構之列表Python資料結構
- Profile標準化資料庫管理資料庫
- Python資料處理(一):處理 JSON、XML、CSV 三種格式資料PythonJSONXML