1. 程式人生 > >機器學習中的資料預處理(sklearn preprocessing)

機器學習中的資料預處理(sklearn preprocessing)

Standardization即標準化,儘量將資料轉化為均值為零,方差為一的資料,形如標準正態分佈(高斯分佈)。實際中我們會忽略資料的分佈情況,僅僅是通過改變均值來集中資料,然後將非連續特徵除以他們的標準差。sklearn中 scale函式提供了簡單快速的singlearray-like資料集操作。

一、標準化,均值去除和按方差比例縮放(Standardization, or mean removal and variance scaling)

  資料集的標準化:當個體特徵太過或明顯不遵從高斯正態分佈時,標準化表現的效果較差。實際操作中,經常忽略特徵資料的分佈形狀,移除每個特徵均值,劃分離散特徵的標準差,從而等級化,進而實現資料中心化。

1. scale 零均值單位方差

from sklearn import preprocessing
import numpy as np
X = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])

X_scaled = preprocessing.scale(X)   
print(X_scaled)
output:
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]
#scaled之後的資料零均值,單位方差
X_scaled.mean(axis=0)  # column mean: array([ 0.,  0.,  0.])
X_scaled.std(axis=0)  #column standard deviation: array([ 1.,  1.,  1.])
print(X_scaled.mean(axis=0),X_scaled.std(axis=0))
output:
[ 0.  0.  0.] [ 1.  1.  1.]

注:本來就是按照行來計算的。

2.計算訓練集的平均值和標準差,以便測試資料集使用相同的變換。

     就是訓練集訓練出的 均值,方差,用在測試集上,(測試集減均值,除以方差做變換)

scaler = preprocessing.StandardScaler().fit(X) 
print(scaler,scaler.mean_,scaler.scale_)  # scaler.std_ 被 sacler.scaler 替代了
#測試將該scaler用於輸入資料,變換之後得到的結果同上
print('scaler.transform(X)',scaler.transform(X))
print(scaler.transform([[-1., 1., 0.]]) )
注 :1)若設定with_mean=False 或者 with_std=False,則不做centering 或者scaling處理。

2)scale和StandardScaler可以用於迴歸模型中的目標值處理

二、將資料特徵縮放至某一範圍(scalingfeatures to a range)

另外一種標準化方法是將資料縮放至給定的最小值與最大值之間,通常是0與1之間,可用MinMaxScaler實現。或者將最大的絕對值縮放至單位大小,可用MaxAbsScaler實現。

使用這種標準化方法的原因是,有時資料集的標準差非常非常小,有時資料中有很多很多零(稀疏資料)需要儲存住0元素。

1. MinMaxScaler(最小最大值標準化)

公式:X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) ;

X_scaler = X_std/ (max - min) + min

fit函式 : 只是fit,fit_transform是 fit並且變換

#例子:將資料縮放至[0, 1]間。訓練過程: fit_transform()
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)
print(X_train_minmax)


#將上述得到的scale引數應用至測試資料
X_test = np.array([[ -3., -1., 4.]])
X_test_minmax = min_max_scaler.transform(X_test) #out: array([[-1.5 ,  0. , 1.66666667]])
#可以用以下方法檢視scaler的屬性
print(min_max_scaler.scale_,min_max_scaler.min_)
#out: array([ 0.5 ,  0.5,  0.33...])
#out: array([ 0.,  0.5,  0.33...])

2. MaxAbsScaler(絕對值最大標準化)

每個數除以絕對值最大的數的絕對值

與上述標準化方法相似,但是它通過除以最大值將訓練集縮放至[-1,1]。這意味著資料已經以0為中心或者是含有非常非常多0的稀疏資料。

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)  
# doctest +NORMALIZE_WHITESPACE^, out: 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) #out: array([[-1.5, -1. ,  2. ]])  
max_abs_scaler.scale_  #out: array([ 2.,  1.,  2.])  
更多的資料預處理方法參考官方文件:http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling




相關推薦

機器學習資料處理sklearn preprocessing

資料預處理(data preprocessing)是指在主要的處理以前對資料進行的一些處理。如對大部分地球物理面積性觀測資料在進行轉換或增強處理之前,首先將不規則分佈的測網經過插值轉換為規則網的處理,以利於計算機的運算。另外,對於一些剖面測量資料,如地震資料預處理有垂直疊加、

機器學習資料處理sklearn preprocessing

Standardization即標準化,儘量將資料轉化為均值為零,方差為一的資料,形如標準正態分佈(高斯分佈)。實際中我們會忽略資料的分佈情況,僅僅是通過改變均值來集中資料,然後將非連續特徵除以他們的標準差。sklearn中 scale函式提供了簡單快速的singlearr

機器學習資料處理sklearn庫系列函式

【1】 sklearn.preprocessing.PolynomialFeatures PolynomialFeatures有三個引數 degree:控制多項式的度 interaction_

機器學習 第4篇:資料處理sklearn 插補缺失值

由於各種原因,現實世界中的許多資料集都包含缺失值,通常把缺失值編碼為空白,NaN或其他佔位符。但是,此類資料集與scikit-learn估計器不相容,這是因為scikit-learn的估計器假定陣列中的所有值都是數字,並且都存在有價值的含義。如果必須使用不完整資料集,那麼處理缺失資料的基本策略是丟棄包含缺失值

機器學習 第2篇:資料處理缺失值

在真實的世界中,缺失資料是經常出現的,並可能對分析的結果造成影響。我們需要了解資料缺失的原因和資料缺失的型別,並從資料中識別缺失值,探索資料缺失的模式,進而處理缺失的資料。本文概述處理資料缺失的方法。 一,資料缺失的原因 首先我們應該知道:資料為什麼缺失?資料的缺失是我們無法避免的,可能的原因有很多種,博主總

Python機器學習資料處理

# -*- coding: utf-8 -*- """ Created on Sat Sep 29 22:39:26 2018 @author: Lxiao217 email:[email protected] """ #資料預處理 #CSV(comma-srpared values,

機器學習資料處理 preprocessing

前言對於資料的預處理,沒有固定的步驟。 下文寫的僅僅的常規的一些小步驟。 具體的預處理,還需要根據資料以及需求來自行處理。====================================PythonSTEP1、匯入依賴包import numpy as np import matplotlib.pypl

機器學習資料處理及特徵工程總結

         機器學習裡有一句名言:資料和特徵決定了機器學習的上限,而模型和演算法的應用只是讓我們逼近這個上限。這個說法形象且深刻的提出前期資料處理和特徵分析的重要性。這一點從我們往往用整個資料探勘全流程60%以上的時間和精力去做建模前期的資料處理和特徵分析也能看出。那

機器學習的優化演算法附程式碼

摘要 > 優化演算法指通過改善訓練方式,來最小化(或最大化)損失函式E(x) 區域性最優問題 區域性最優與鞍點。在神經網路中,最小化非凸誤差函式的另一個關鍵挑戰是避免陷於多個其他區域性最小值中。實際上,問題並非源於區域性極小值,而是來自鞍點,即一個維度向上傾斜且

資料處理方法總結

資料預處理(方法總結) 轉自-https://www.cnblogs.com/sherial/archive/2018/03/07/8522405.html 一、概述 在工程實踐中,我們得到的資料會存在有缺失值、重複值等,在使用之前需要進行資料預處理。資料預處理沒有標準的流程,通常針對不

python機器學習::資料處理1【轉】

轉載自:http://2hwp.com/2016/02/03/data-preprocessing/ 常見的資料預處理方法,以下通過sklearn的preprocessing模組來介紹; 1. 標準化(Standardization or Mean Removal and

機器學習 第3篇:資料處理使用插補法處理缺失值

插補法可以在一定程度上減少偏差,常用的插補法是熱卡插補、擬合插補和多重插補。擬合插補,要求變數間存在強的相關性;多重插補(MCMC法),是在高缺失率下的首選插補方法,優點是考慮了缺失值的不確定性。 一,熱卡插補 熱卡填充(Hot deck imputation)也叫就近補齊,對於一個包含空值的物件,熱卡填充法

機器學習資料的歸一化處理

資料的標準化(normalization)是將資料按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除資料的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權。   其中最典型的就是資料的歸一化處理,即將資料統一對映到[0,1]區間上

程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之資料匯入&資料處理

程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_recommender.ipynb 下一篇有一些資料的

程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之資料匯入&資料處理

這篇主要是進行程式碼中的一些數值視覺化,幫助理解 程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_re

基於深度學習的CT影象肺結節自動檢測技術一——資料處理歸一化,資料增強,資料標記

開發環境 Anaconda:jupyter notebook /pycharm pip install SimpleItk # 讀取CT醫學影象 pip install tqdm # 可擴充套件的Python進度條,封裝

機器學習 --2 特徵處理資料將維

特徵選擇 概念 特徵選擇就是單純地從提取到的所有特徵中選擇部分特徵作為訓練集特徵,特徵在選擇前和選擇後可以改變值、也不改變值,但是選擇後的特徵維數肯定比選擇前小,畢竟我們只選擇了其中的一部分特徵。 方差過濾式 # 按照方差過濾 from sklearn.f

機器學習 --2 特徵處理資料標準化

歸一化: API位置 sklearn.preprocessing 歸一化: 特點:通過對原始資料進行變換把資料對映到(預設為[0,1])之間 注意也可以通過指定MinMaxScalar 裡邊的feature_range 來指定縮放的範圍 示例程式碼

機器學習資料訓練集,測試集劃分與交叉驗證的聯絡與區別含程式

因為一個模型僅僅重複了剛剛訓練過的樣本的標籤,這種情況下得分會很高,但是遇到沒有訓練過的樣本就無法預測了。這種情況叫做過擬合。為了避免過擬合,一個常見的做法就是在進行一個(有監督的)機器學習實驗時,保留

Python: sklearn資料處理函式fit_transform()和transform()的區別

敲《Python機器學習及實踐》上的code的時候,對於資料預處理中涉及到的fit_transform()函式和transform()函式之間的區別很模糊,查閱了很多資料,這裡整理一下:涉及到這兩個函式