特徵工程之資料預處理(上)
機器學習入門系列(2)--如何構建一個完整的機器學習專案,第三篇!
該系列的前兩篇文章:
分別介紹了確定專案終極目標、選擇損失函式、獲取資料以及構建測試集,接下來在進入選擇演算法和訓練模型之前,一個很重要的步驟就是特徵工程,它包括了對資料的預處理、特徵提取、特徵分析以及特徵構建等幾個步驟,可以說能否訓練一個好的模型,除了選擇合適的演算法,準備好資料也是非常關鍵的!
由於篇幅問題,所以這篇文章先介紹如何處理缺失值和圖片資料擴充的問題,下一篇文章會介紹處理異常值和類別不平衡的問題。
3 特徵工程
何為特徵工程呢?顧名思義,就是 對原始資料進行一系列工程處理,將其提煉為特徵,作為輸入供演算法和模型使用。
本質上講, 特徵工程是一個表示和展現資料的過程 ;實際工作中,特徵工程的目的是 去除原始資料中的雜質和冗餘,設計更高效的特徵以刻畫求解的問題與預測模型之間的關係。
特徵工程的重要性有以下幾點:
- 特徵越好,靈活性越強 。好的特徵的靈活性在於它允許你選擇不復雜的模型,同時執行速度也更快,也更容易和維護。
- 特徵越好,構建的模型越簡單 。好的特徵可以在引數不是最優的情況,依然得到很好的效能,減少調參的工作量和時間,也就可以大大降低模型複雜度。
- 特徵越好,模型的效能越出色 。特徵工程的目的本來就是為了提升模型的效能。
3.1 資料預處理
首先需要對資料進行預處理,一般常用的兩種資料型別:
- 結構化資料 。結構化資料可以看作是關係型資料庫的一張表,每列都有清晰的定義,包含了數值型和類別型兩種基本型別;每一行資料表示一個樣本的資訊。
- 非結構化資料 。主要是文字、影象、音訊和視訊資料,其包含的資訊無法用一個簡單的數值表示,也沒有清晰的類別定義,並且每個資料的大小互不相同。
這裡主要介紹結構化資料和影象資料兩種資料的資料預處理方法。
3.1.1 處理缺失值
資料的缺失主要包括 記錄的缺失和記錄中某個欄位資訊的缺失 ,兩者都會造成分析結果的不準確。
缺失值產生的原因
- 資訊暫時無法獲取,或者獲取資訊的代價太大。
- 資訊被遺漏,人為的輸入遺漏或者資料採集裝置的遺漏。
- 屬性不存在,在某些情況下,缺失值並不意味著資料有錯誤,對一些物件來說某些屬性值是不存在的,如未婚者的配偶姓名、兒童的固定收入等。
缺失值的影響
- 資料探勘建模將丟失大量的有用資訊。
- 資料探勘模型所表現出的不確定性更加顯著,模型中蘊含的規律更難把握。
- 包含空值的資料會使建模過程陷入混亂,導致不可靠的輸出。
缺失值的處理方法
- 直接使用含有缺失值的特徵 :當僅有少量樣本缺失該特徵的時候可以嘗試使用;
- 刪除含有缺失值的特徵 :這個方法一般適用於大多數樣本都缺少該特徵,且僅包含少量有效值是有效的;
- 插值補全缺失值
最常使用的還是第三種插值補全缺失值的做法,這種做法又可以有多種補全方法。
- 均值/中位數/眾數補全
如果樣本屬性的距離是可度量的,則使用該屬性有效值的平均值來補全;
如果樣本屬性的距離不可度量,則可以採用眾數或者中位數來補全。
- 同類均值/中位數/眾數補全
對樣本進行分類後,根據同類其他樣本該屬性的均值補全缺失值,當然同第一種方法類似,如果均值不可行,可以嘗試眾數或者中位數等統計資料來補全。
- 固定值補全
利用固定的數值補全缺失的屬性值。
- 建模預測
利用機器學習方法,將缺失屬性作為預測目標進行預測,具體為將樣本根據是否缺少該屬性分為訓練集和測試集,然後採用如迴歸、決策樹等機器學習演算法訓練模型,再利用訓練得到的模型預測測試集中樣本的該屬性的數值。
這個方法 根本的缺陷是如果其他屬性和缺失屬性無關,則預測的結果毫無意義;但是若預測結果相當準確,則說明這個缺失屬性是沒必要納入資料集中的 ;一般的情況是介於兩者之間。
- 高維對映
將屬性對映到高維空間,採用 獨熱碼編碼(one-hot)技術 。將包含 K 個離散取值範圍的屬性值擴充套件為 K+1 個屬性值,若該屬性值缺失,則擴充套件後的第 K+1 個屬性值置為 1。
這種做法是最精確的做法,保留了所有的資訊,也未新增任何額外資訊,若預處理時把所有的變數都這樣處理,會大大增加資料的維度。這樣做的好處是 完整保留了原始資料的全部資訊、不用考慮缺失值 ;缺點是 計算量大大提升,且只有在樣本量非常大的時候效果才好 。
- 多重插補
多重插補認為待插補的值是隨機的,實踐上通常是估計出待插補的值,再加上不同的噪聲,形成多組可選插補值,根據某種選擇依據,選取最合適的插補值。
- 壓縮感知和矩陣補全
壓縮感知通過 利用訊號本身所具有的稀疏性,從部分觀測樣本中回覆原訊號 。壓縮感知分為感知測量和重構恢復兩個階段。
-
感知測量:此階段對原始訊號進行處理以獲得稀疏樣本表示。常用的手段是傅立葉變換、小波變換、字典學習、稀疏編碼等
-
重構恢復:此階段基於稀疏性從少量觀測中恢復原訊號。這是 壓縮感知的核心
矩陣補全可以檢視知乎上的問題-- 矩陣補全(matrix completion)的經典演算法有哪些?目前比較流行的演算法是什麼?
- 手動補全
除了手動補全方法,其他插值補全方法只是將未知值補以我們的主觀估計值,不一定完全符合客觀事實。在許多情況下,根據對所在領域的理解,手動對缺失值進行插補的效果會更好。但這種方法需要對問題領域有很高的認識和理解,要求比較高,如果缺失資料較多,會比較費時費力。
- 最近鄰補全
尋找與該樣本最接近的樣本,使用其該屬性數值來補全。
3.1.2 圖片資料擴充
對於圖片資料,最常遇到的問題就是訓練資料不足的問題。
一個模型所能獲取的資訊一般來源於兩個方面,一個是訓練資料包含的資訊;另一個就是模型的形成過程中(包括構造、學習、推理等),人們提供的先驗資訊。
而如果訓練資料不足,那麼模型可以獲取的資訊就比較少,需要提供更多的先驗資訊保證模型的效果。先驗資訊一般作用來兩個方面,一是 模型 ,如採用特定的內在結構(比如深度學習的不同網路結構)、條件假設或新增其他約束條件(深度學習中體現在損失函式加入不同正則項);第二就是 資料 ,即根據先驗知識來調整、變換或者拓展訓練資料,讓其展現出更多的、更有用的資訊。
對於影象資料,如果訓練資料不足,導致的後果就是 模型過擬合問題 ,即模型在訓練樣本上的效果不錯,但在測試集上的泛化效果很糟糕。過擬合的解決方法可以分為兩類:
- 基於模型的方法 :主要是採用降低過擬合風險的措施,如簡化模型(從卷積神經網路變成邏輯迴歸演算法)、新增約束項以縮小假設空間(如 L1、L2等正則化方法)、整合學習、Dropout方法(深度學習常用方法)等;
- 基於資料的方法 :主要就是 資料擴充 (Data Augmentation),即根據一些先驗知識,在保持特點資訊的前提下,對原始資料進行適當變換以達到擴充資料集的效果。具體做法有多種,在保持影象類別不變的前提下,可以對每張圖片做如下變換處理。
- 一定程度內的隨機旋轉、平移、縮放、裁剪、填充、左右翻轉等,這些變換對應著同一個目標在不同角度的觀察結果;
- 對影象中的元素新增噪聲擾動,如椒鹽噪聲、高斯白噪聲等;
- 顏色變換。比如在影象的 RGB 顏色空間進行主成分分析,得到 3 個主成分的特徵向量
p1,p2,p3
以及對應的特徵值λ1,λ2,λ3
,然後在每個畫素的 RGB 值上新增增量[p1,p2,p3]*[a1λ1,a2λ2,a3λ3]
,其中a1,a2,a3
都是均值為 0, 方差較小的高斯分佈隨機數; - 改變影象的亮度、清晰度、對比度、銳度等。
上述資料擴充方法是在影象空間進行變換的,也可以選擇先對影象進行特徵提取,然後在影象的特徵空間進行變換,利用一些通用的資料擴充或者上取樣方法,例如 SMOTE(Synthetic Minority Over-sampling Technique)。
此外,最近幾年一直比較熱門的 GAN,生成對抗網路,它的其中一個應用就是生成圖片資料,也可以應用於資料擴充。
最後,還有一種方法可以不需要擴充資料,利用遷移學習的做法,也是如今非常常用的一個方法,微調(Finetuning),即借用在大資料集(如 ImageNet)上預訓練好的模型,然後在自己的小資料集上進行微調,這是一種簡單的遷移學習,同時也可以快速訓練一個效果不錯的針對目標類別的新模型。
小結
資料特徵缺失和圖片資料的不足都是機器學習任務中非常常見的問題,因此需要好好掌握如何處理缺失值,以及擴充圖片資料的方法。
參考:
- 《百面機器學習》第一章 特徵工程
- 機器學習之特徵工程
- [資料預處理(方法總結)]
- Python資料分析(三)——資料預處理
- Python資料分析(二)——資料探索
- 【Python資料分析基礎】: 異常值檢測和處理
歡迎關注我的微信公眾號--機器學習與計算機視覺,或者掃描下方的二維碼,大家一起交流,學習和進步!
