在sklearn中有這么幾個(gè)常用的預(yù)處理方法帖汞。另外為了將數(shù)據(jù)預(yù)處理的各個(gè)階段連接起來還可以使用pipeline涨冀。
類 | 功能 | 說明 |
---|---|---|
StandardScaler | 無量綱化 | 標(biāo)準(zhǔn)化鹿鳖,基于特征矩陣的列壮莹,將特征值轉(zhuǎn)換至服從標(biāo)準(zhǔn)正態(tài)分布 |
MinMaxScaler | 無量綱化 | 區(qū)間縮放命满,基于最大最小值,將特征值轉(zhuǎn)換到[0, 1]區(qū)間上 |
Normalizer | 歸一化 | 基于特征矩陣的行杂抽,將樣本向量轉(zhuǎn)換為“單位向量” |
Binarizer | 二值化 | 基于給定閾值缩麸,將定量特征按閾值劃分 |
OneHotEncoder | 啞編碼 | 將定性數(shù)據(jù)編碼為定量數(shù)據(jù) |
Imputer | 缺失值計(jì)算 | 計(jì)算缺失值赡矢,缺失值可填充為均值等 |
PolynomialFeatures | 多項(xiàng)式數(shù)據(jù)轉(zhuǎn)換 | 多項(xiàng)式數(shù)據(jù)轉(zhuǎn)換 |
FunctionTransformer | 自定義單元數(shù)據(jù)轉(zhuǎn)換 | 使用單變?cè)暮瘮?shù)來轉(zhuǎn)換數(shù)據(jù)函數(shù)來轉(zhuǎn)換數(shù)據(jù) |
具體代碼實(shí)現(xiàn)
首先準(zhǔn)備數(shù)據(jù)
from sklearn.datasets import load_iris
iris = load_iris()
train_data = iris.data
target_data = iris.target
然后是sklearn的具體實(shí)現(xiàn)
"""
缺失值計(jì)算
"""
#缺失值計(jì)算杭朱,返回值為計(jì)算缺失值后的數(shù)據(jù)
#參數(shù)missing_value為缺失值的表示形式,默認(rèn)為NaN
#參數(shù)strategy為缺失值填充方式吹散,默認(rèn)為mean(均值)
from sklearn.preprocessing import Imputer
Imputer().fit_transform(train_data)
"""
無量綱化
"""
#1.標(biāo)準(zhǔn)化
#根據(jù)【均值】和【標(biāo)準(zhǔn)差】調(diào)整
from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(train_data)
#2.區(qū)間縮放
#利用最大最小值縮放
#區(qū)間縮放弧械,返回值為縮放到[0, 1]區(qū)間的數(shù)據(jù)
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(train_data)
#3.正則化
#正則化和標(biāo)準(zhǔn)化的區(qū)別是正則化是根據(jù)【特征均值】和【特征值標(biāo)準(zhǔn)差】調(diào)整
from sklearn.preprocessing import Normalizer
Normalizer().fit_transform(train_data)
"""
對(duì)定量特征二值化
"""
#主要是閾值設(shè)定 threshold=n
#閾值設(shè)置為3,返回值為二值化后的數(shù)據(jù)
from sklearn.preprocessing import Binarizer
Binarizer(threshold=3).fit_transform(train_data)
"""
對(duì)定性特征啞編碼
TODO iris數(shù)據(jù)都是定量的空民,沒必要做
"""
#啞編碼刃唐,對(duì)IRIS數(shù)據(jù)集的目標(biāo)值,返回值為啞編碼后的數(shù)據(jù)
from sklearn.preprocessing import OneHotEncoder
OneHotEncoder().fit_transform(target_data.reshape((1,-1)))
"""
數(shù)據(jù)變換
"""
#1.多項(xiàng)式轉(zhuǎn)換
#參數(shù)degree為度界轩,默認(rèn)值為2
from sklearn.preprocessing import PolynomialFeatures
PolynomialFeatures().fit_transform(train_data)
#2.自定義轉(zhuǎn)換函數(shù)
#第一個(gè)參數(shù)是單變?cè)瘮?shù)
#本例為對(duì)數(shù)函數(shù)的數(shù)據(jù)變換
from numpy import log1p
from sklearn.preprocessing import FunctionTransformer
FunctionTransformer(log1p).fit_transform(train_data)
注:
基于樹的方法是不需要進(jìn)行特征的歸一化画饥,例如隨機(jī)森林,bagging 和 boosting等耸棒。
基于參數(shù)的模型或基于距離的模型荒澡,都是要進(jìn)行特征的歸一化。