機(jī)器學(xué)習(xí)特征工程1-數(shù)據(jù)預(yù)處理(sklearn實(shí)踐)

概述

有這么一句話在業(yè)界廣泛流傳:數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,而模型和算法只是逼近這個上限而已。因此這一步可能比實(shí)際上使用的模型和算法更重要,而且會占開發(fā)一個機(jī)器學(xué)習(xí)模型80%-90%的時間,是最耗時的環(huán)節(jié)。
那么到底什么是特征工程?特征工程是將原始數(shù)據(jù)轉(zhuǎn)化特征的過程,特征要能更好地表示潛在問題并提高預(yù)測模型在未知數(shù)據(jù)上的準(zhǔn)確率。

「特征處理是困難的、耗時的且需要專家知識。『實(shí)用化的機(jī)器學(xué)習(xí)』基本上就是特征工程。」
—— 吳恩達(dá)

下面主要介紹特征工程一般流程和技術(shù)點(diǎn)。本文基于預(yù)測場景介紹,其它場景基本通用。

通用術(shù)語

屬性

用來進(jìn)行預(yù)測的變量。在數(shù)據(jù)集中,一般列表示屬性值。在Andrew Ngdeeplearning.ai 的課程上用行表示屬性值。屬性也被稱為:

  • 特征
  • 預(yù)測因子
  • 獨(dú)立變量
  • 輸入

標(biāo)簽

用來進(jìn)行預(yù)測的結(jié)果。在數(shù)據(jù)集中,一般最后一列表示標(biāo)簽值。在Andrew Ng的deeplearning.ai 課程上用行表示標(biāo)簽值。標(biāo)簽也被稱為:

  • 結(jié)果
  • 目標(biāo)
  • 響應(yīng)
  • 輸出

實(shí)例

實(shí)例是屬性和標(biāo)簽的一個實(shí)例值。在數(shù)據(jù)集中,一般一行表示一個實(shí)例。在Andrew Ng的deeplearning.ai 課程上用列表示實(shí)例。

一般流程

一般流程包括數(shù)據(jù)預(yù)處理、特征降維、特征構(gòu)造和特征選擇等幾部分,下面先聊聊數(shù)據(jù)預(yù)處理。

數(shù)據(jù)預(yù)處理

數(shù)據(jù)預(yù)處理包括特征值映射、缺失值處理、異常值處理和特征值轉(zhuǎn)換等

特征值映射

數(shù)值類型無需映射,字符串類型需要通過one-hot編碼映射,具體參考google機(jī)器學(xué)習(xí)教程章節(jié)https://developers.google.com/machine-learning/crash-course/representation/feature-engineering?hl=zh-cn
pandas示例:

pd.get_dummies(all_df)

缺失值處理

缺失值處理也叫做缺失值插補(bǔ)(imputation)。以下是兩種簡單的處理方式:

  • 最簡單的方法,用該屬性的平均值來代替缺失值。可以用pandas的fillna函數(shù)。
    pandas示例:
    pd.fillna("平均值")
    
  • 如果數(shù)據(jù)實(shí)例過多的時候,可以刪除實(shí)例??梢杂胮andas的dropna函數(shù)。
    pandas示例:
    pd.dropna(columns="列名")
    
  • 預(yù)測插補(bǔ)
  • 更多請見 http://www.itdecent.cn/p/0127b187a7c2

異常值處理

異常值指明顯離群的點(diǎn),一般將等同缺失值一樣處理??捎靡韵路绞綑z測:

  • 將一組數(shù)據(jù)按照百分位進(jìn)行劃分。如四分位、五分位和十分位等。
  • 可以用python probplot的畫分位數(shù)圖(quantile-quantile,Q-Q),檢測異常點(diǎn)
  • 更多請見 http://www.itdecent.cn/p/0127b187a7c2

特征值轉(zhuǎn)換

一般有以下三種方式

  • 標(biāo)準(zhǔn)化,Z-Score,公式為:(X-mean)/std 計算時對每個屬性/每列分別進(jìn)行。sklearn示例:
    import sklearn.preprocessing as pre
    #X 特征矩陣
    pre.StandardScaler().fit_transform(X)
    
  • 歸一化,常用的方法是將屬性縮放到一個指定的最大和最小值(通常是1-0)之間。公式為:(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0))。sklearn示例:
    import sklearn.preprocessing as pre
    #X 特征矩陣
    pre.MinMaxScaler().fit_transform(X)
    
  • 正則化,Normalization主要思想是對每個樣本計算其p-范數(shù),然后對該樣本中每個元素除以該范數(shù),這樣處理的結(jié)果是使得每個處理后樣本的p-范數(shù)(l1-norm,l2-norm)等于1。sklearn示例:
    import sklearn.preprocessing as pre
    #X 特征矩陣
    pre.Normalizer().fit_transform(X)
    
  • 具體參考http://www.cnblogs.com/charlotte77/p/5622325.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容