【数据平台】sklearn库特征工程之数据预处理
生活随笔
收集整理的這篇文章主要介紹了
【数据平台】sklearn库特征工程之数据预处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、背景:
通過特征提取,我們能得到未經處理的特征,這時的特征可能有以下問題:
- 不屬于同一量綱:即特征的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。
- 信息冗余:對于某些定量特征,其包含的有效信息為區間劃分,例如學習成績,假若只關心“及格”或不“及格”,那么需要將定量的考分,轉換成“1”和“0”表示及格和未及格。二值化可以解決這一問題。
- 定性特征不能直接使用:某些機器學習算法和模型只能接受定量特征的輸入,那么需要將定性特征轉換為定量特征。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過于靈活,增加了調參的工作。通常使用啞編碼的方式將定性特征轉換為定量特征:假設有N種定性值,則將這一個特征擴展為N種特征,當原始特征值為第i種定性值時,第i個擴展特征賦值為1,其他擴展特征賦值為0。啞編碼的方式相比直接指定的方式,不用增加調參的工作,對于線性模型來說,使用啞編碼后的特征可達到非線性的效果。
- 存在缺失值:缺失值需要補充。
- 信息利用率低:不同的機器學習算法和模型對數據中信息的利用是不同的,之前提到在線性模型中,使用對定性特征啞編碼可以達到非線性的效果。類似地,對定量變量多項式化,或者進行其他的轉換,都能達到非線性的效果。
我們使用sklearn中的preproccessing庫來進行數據預處理,可以覆蓋以上問題的解決方案。
2、代碼:
# -*- coding: utf-8 -*- ''' Created on 2017年12月15日 @author: Jason.F @summary: sklearn特征工程 '''from sklearn.datasets import load_iris from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import Normalizer from sklearn.preprocessing import Binarizer from sklearn.preprocessing import OneHotEncoder from numpy import vstack, array, nan from sklearn.preprocessing import Imputer from sklearn.preprocessing import PolynomialFeatures #導入IRIS數據集 iris = load_iris() #特征矩陣 iris.data #目標向量 iris.target#數據預處理 #1:無量綱化,使不同規格的數據轉換到同一規格 #1.1:標準化,標準化的前提是特征值服從正態分布,標準化后,其轉換成標準正態分布。 StandardScaler().fit_transform(iris.data) #1.2:區間縮放法,利用了邊界值信息,將特征的取值區間縮放到某個特點的范圍,如縮放到[0, 1]區間 MinMaxScaler().fit_transform(iris.data) #1.3:歸一化:依照特征矩陣的行處理數據,其目的在于樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標準 #歸一化,返回值為歸一化后的數據 Normalizer().fit_transform(iris.data)#2:對定量特征二值化,定量特征二值化的核心在于設定一個閾值,大于閾值的賦值為1,小于等于閾值的賦值為0。 Binarizer(threshold=3).fit_transform(iris.data)#3:對定性特征啞編碼,使用preproccessing庫的OneHotEncoder類對數據進行啞編碼 OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))#4:缺失值計算,使用preproccessing庫的Imputer類對數據進行缺失值計算 #缺失值計算,返回值為計算缺失值后的數據 #參數missing_value為缺失值的表示形式,默認為NaN #參數strategy為缺失值填充方式,默認為mean(均值) Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))#5:數據變換,常見的數據變換有基于多項式的、基于指數函數的、基于對數函數的 #多項式轉換 #參數degree為度,默認值為2 pndata=PolynomialFeatures().fit_transform(iris.data) print (pndata[0:2])3、標準化和歸一化區別
標準化是依照特征矩陣的列處理數據,其通過求z-score的方法,將樣本的特征值轉換到同一量綱下,公式如下:
歸一化是依照特征矩陣的行處理數據,其目的在于樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標準,也就是說都轉化為“單位向量”。規則為l2的歸一化公式如下:
4、總結:
| 類 | 功能 | 說明 |
| StandardScaler | 無量綱化 | 標準化,基于特征矩陣的列,將特征值轉換至服從標準正態分布 |
| MinMaxScaler | 無量綱化 | 區間縮放,基于最大最小值,將特征值轉換到[0, 1]區間上 |
| Normalizer | 歸一化 | 基于特征矩陣的行,將樣本向量轉換為“單位向量” |
| Binarizer | 二值化 | 基于給定閾值,將定量特征按閾值劃分 |
| OneHotEncoder | 啞編碼 | 將定性數據編碼為定量數據 |
| Imputer | 缺失值計算 | 計算缺失值,缺失值可填充為均值等 |
| PolynomialFeatures | 多項式數據轉換 | 多項式數據轉換 |
| FunctionTransformer | 自定義單元數據轉換 | 使用單變元的函數來轉換數據 |
總結
以上是生活随笔為你收集整理的【数据平台】sklearn库特征工程之数据预处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【正一专栏】2018年欧冠八强猜想
- 下一篇: 【数据平台】sklearn库特征工程之特