資料預處理

2021-08-18 08:16:25 字數 1921 閱讀 2416

包:sklearn.preprocessing提供了一些實用的公共函式和轉化類

標準化,或稱為去平均和方差縮放

對乙個資料集進行標準化是大部分機器學習估測器的要求

scikit-learn中的許多學習器都需要將資料集進行標準化處理。資料集的標準化:當個體特徵太過或明顯不遵從高斯正態分佈時,標準化表現的效果較差。實際操作中,經常忽略特徵資料的分布形狀,移除每個特徵均值,劃分離散特徵的標準差,從而等級化,進而實現資料中心化。

例如,用於學習演算法(例如支援向量機的rbf核心或線性模型的l1和l2正則化器)的目標函式中,假設所有特徵都以零為中心並且具有相同量級的方差。如果某乙個特徵的方差大於其他數量級,則可能會對目標函式影響較大,使學習器無法按預期正確地學習其他特徵。

函式scale提供了一種快速簡單的方法來在單個陣列資料集上執行此操作:

公式為:(x-mean)/std 計算時對每個屬性/每列分別進行。

將資料按期屬性(按列進行)減去其均值,並處以其方差。得到的結果是,對於每個屬性/每列來說所有資料都聚集在0附近,方差為1。

>>> from sklearn import preprocessing

>>> import numpy as np

>>> x_train = np.array([[ 1., -1., 2.],

... [ 2., 0., 0.],

... [ 0., 1., -1.]])

>>> x_scaled = preprocessing.scale(x_train)

>>> x_scaled

array([[ 0. ..., -1.22..., 1.33...],

[ 1.22..., 0. ..., -0.26...],

[-1.22..., 1.22..., -1.06...]])

scaled data has zero mean and unit variance:

>>> x_scaled.mean(axis=0)

array([ 0., 0., 0.])

>>> x_scaled.std(axis=0)

array([ 1., 1., 1.])

!!!提供乙個api,對訓練集進行標準化,對測試集做同樣的標準化

>>> scaler = preprocessing.standardscaler().fit(x_train)

>>> scaler

standardscaler(copy=true, with_mean=true, with_std=true)

>>> scaler.mean_

array([ 1. ..., 0. ..., 0.33...])

>>> scaler.scale_

array([ 0.81..., 0.81..., 1.24...])

>>> scaler.transform(x_train)

array([[ 0. ..., -1.22..., 1.33...],

[ 1.22..., 0. ..., -0.26...],

[-1.22..., 1.22..., -1.06...]])

這個scaler能在新的資料集上做和訓練集上同樣的縮放轉換

注 :1)若設定with_mean=false 或者 with_std=false,則不做centering 或者scaling處理。

2)scale和standardscaler可以用於回歸模型中的目標值處理。

資料預處理

現實世界中資料大體上都是不完整,不一致的髒資料,無法直接進行資料探勘,或挖掘結果差強人意。為了提前資料探勘的質量產生了資料預處理技術。資料預處理有多種方法 資料清理,資料整合,資料變換,資料歸約等。這些資料處理技術在資料探勘之前使用,大大提高了資料探勘模式的質量,降低實際挖掘所需要的時間。一 資料清...

資料預處理

常見的資料預處理方法,以下通過sklearn的preprocessing模組來介紹 變換後各維特徵有0均值,單位方差。也叫z score規範化 零均值規範化 計算方式是將特徵值減去均值,除以標準差。sklearn.preprocessing scale x 一般會把train和test集放在一起做標...

資料預處理

用cut函式分箱 有時把數值聚集在一起更有意義。例如,如果我們要為交通狀況 路上的汽車數量 根據時間 分鐘資料 建模。具體的分鐘可能不重要,而時段如 上午 下午 傍晚 夜間 深夜 更有利於 如此建模更直觀,也能避免過度擬合。這裡我們定義乙個簡單的 可復用的函式,輕鬆為任意變數分箱。def binni...