天天看點

使用Scikit-Learn輕松實作資料縮放

本文參考翻譯Jason Brownlee部落格

機器學習在模組化之前,需要做資料準備。資料準備的過程主要包括3個步驟:

  • 資料選擇
  • 資料預處理
  • 資料轉換

本文會告訴你兩種方法,即如何使用Python的Scikit-Learn庫進行簡單的資料轉換。

一、資料縮放

你的預處理資料集中可能包含各種各樣、不同比例的特征字段,比如美元、千克、價格,有的特征列數值範圍在100以内,有的卻達到幾百萬,差異很大。

很多機器學習模型不希望有這樣大的差異,如果資料集各個屬性之間的數值差異越小,則模型表現的會越好。這裡不一概而論,具體原因小夥伴們自行探索下。

方法1:資料歸一化

資料歸一化是指将原始資料縮放到0和1之間。

對于依賴于值的大小的模型,這種對輸入屬性的縮放很管用。比如在K近鄰模型的距離測量和回歸系數的準備。

接下來用都知道的鸢尾花資料集示範資料歸一化:

# 對鸢尾花資料集進行資料歸一化處理.
from sklearn.datasets import load_iris
from sklearn import preprocessing
# 加載資料
iris = load_iris()
print(iris.data.shape)
# 分離原始資料集,分為自變量和因變量
X = iris.data
y = iris.target
# 歸一化處理
normalized_X = preprocessing.normalize(X)      

更多關于歸一化處理,詳見API

方法2:資料标準化

資料标準化是指:将資料縮放,改變每個屬性的分布,使其平均值為0,标準差為1。

諸如高斯過程等依賴于特征分布的模型,對特征進行标準化是非常有用的。

依然用鸢尾花的例子:

# 對鸢尾花資料集進行資料标準化處理.
from sklearn.datasets import load_iris
from sklearn import preprocessing
# 加載資料
iris = load_iris()
print(iris.data.shape)
# 分離原始資料集,分為自變量和因變量
X = iris.data
y = iris.target
# 标準化處理
standardized_X = preprocessing.scale(X)      

更多關于歸一化處理,詳見API

二、說明

很難知道資料縮放是否會有利于模型的效果,大機率上是有用的,但不排除出現産生負效果。

中肯的建議是,先建立一個資料縮放後的副本,使用你的算法模型測試對比縮放前後的效果。

這可以讓你快速知道,你的模型中縮放帶來的好處或弊端。

你也可以試用不同的縮放方法,進行對比。

三、總結

資料縮放是一種非常重要的資料轉換方法。

本文介紹了歸一化和标準化兩種方法,均用Python Scikit-Learn庫提供的方法實作。簡單好用,快試試吧!

-END-