特征工程之数据预处理(上)
機器學(xué)習(xí)入門系列(2)–如何構(gòu)建一個完整的機器學(xué)習(xí)項目,第三篇!
該系列的前兩篇文章:
- 機器學(xué)習(xí)入門系列(2)–如何構(gòu)建一個完整的機器學(xué)習(xí)項目(一)
- 機器學(xué)習(xí)數(shù)據(jù)集的獲取和測試集的構(gòu)建方法
分別介紹了確定項目終極目標、選擇損失函數(shù)、獲取數(shù)據(jù)以及構(gòu)建測試集,接下來在進入選擇算法和訓(xùn)練模型之前,一個很重要的步驟就是特征工程,它包括了對數(shù)據(jù)的預(yù)處理、特征提取、特征分析以及特征構(gòu)建等幾個步驟,可以說能否訓(xùn)練一個好的模型,除了選擇合適的算法,準備好數(shù)據(jù)也是非常關(guān)鍵的!
由于篇幅問題,所以這篇文章先介紹如何處理缺失值和圖片數(shù)據(jù)擴充的問題,下一篇文章會介紹處理異常值和類別不平衡的問題。
3 特征工程
何為特征工程呢?顧名思義,就是對原始數(shù)據(jù)進行一系列工程處理,將其提煉為特征,作為輸入供算法和模型使用。
本質(zhì)上講,特征工程是一個表示和展現(xiàn)數(shù)據(jù)的過程;實際工作中,特征工程的目的是去除原始數(shù)據(jù)中的雜質(zhì)和冗余,設(shè)計更高效的特征以刻畫求解的問題與預(yù)測模型之間的關(guān)系。
特征工程的重要性有以下幾點:
3.1 數(shù)據(jù)預(yù)處理
首先需要對數(shù)據(jù)進行預(yù)處理,一般常用的兩種數(shù)據(jù)類型:
這里主要介紹結(jié)構(gòu)化數(shù)據(jù)和圖像數(shù)據(jù)兩種數(shù)據(jù)的數(shù)據(jù)預(yù)處理方法。
3.1.1 處理缺失值
數(shù)據(jù)的缺失主要包括記錄的缺失和記錄中某個字段信息的缺失,兩者都會造成分析結(jié)果的不準確。
缺失值產(chǎn)生的原因
- 信息暫時無法獲取,或者獲取信息的代價太大。
- 信息被遺漏,人為的輸入遺漏或者數(shù)據(jù)采集設(shè)備的遺漏。
- 屬性不存在,在某些情況下,缺失值并不意味著數(shù)據(jù)有錯誤,對一些對象來說某些屬性值是不存在的,如未婚者的配偶姓名、兒童的固定收入等。
缺失值的影響
- 數(shù)據(jù)挖掘建模將丟失大量的有用信息。
- 數(shù)據(jù)挖掘模型所表現(xiàn)出的不確定性更加顯著,模型中蘊含的規(guī)律更難把握。
- 包含空值的數(shù)據(jù)會使建模過程陷入混亂,導(dǎo)致不可靠的輸出。
缺失值的處理方法
最常使用的還是第三種插值補全缺失值的做法,這種做法又可以有多種補全方法。
如果樣本屬性的距離是可度量的,則使用該屬性有效值的平均值來補全;
如果樣本屬性的距離不可度量,則可以采用眾數(shù)或者中位數(shù)來補全。
對樣本進行分類后,根據(jù)同類其他樣本該屬性的均值補全缺失值,當然同第一種方法類似,如果均值不可行,可以嘗試眾數(shù)或者中位數(shù)等統(tǒng)計數(shù)據(jù)來補全。
利用固定的數(shù)值補全缺失的屬性值。
利用機器學(xué)習(xí)方法,將缺失屬性作為預(yù)測目標進行預(yù)測,具體為將樣本根據(jù)是否缺少該屬性分為訓(xùn)練集和測試集,然后采用如回歸、決策樹等機器學(xué)習(xí)算法訓(xùn)練模型,再利用訓(xùn)練得到的模型預(yù)測測試集中樣本的該屬性的數(shù)值。
這個方法根本的缺陷是如果其他屬性和缺失屬性無關(guān),則預(yù)測的結(jié)果毫無意義;但是若預(yù)測結(jié)果相當準確,則說明這個缺失屬性是沒必要納入數(shù)據(jù)集中的;一般的情況是介于兩者之間。
將屬性映射到高維空間,采用獨熱碼編碼(one-hot)技術(shù)。將包含 K 個離散取值范圍的屬性值擴展為 K+1 個屬性值,若該屬性值缺失,則擴展后的第 K+1 個屬性值置為 1。
這種做法是最精確的做法,保留了所有的信息,也未添加任何額外信息,若預(yù)處理時把所有的變量都這樣處理,會大大增加數(shù)據(jù)的維度。這樣做的好處是完整保留了原始數(shù)據(jù)的全部信息、不用考慮缺失值;缺點是計算量大大提升,且只有在樣本量非常大的時候效果才好。
多重插補認為待插補的值是隨機的,實踐上通常是估計出待插補的值,再加上不同的噪聲,形成多組可選插補值,根據(jù)某種選擇依據(jù),選取最合適的插補值。
壓縮感知通過利用信號本身所具有的稀疏性,從部分觀測樣本中回復(fù)原信號。壓縮感知分為感知測量和重構(gòu)恢復(fù)兩個階段。
-
感知測量:此階段對原始信號進行處理以獲得稀疏樣本表示。常用的手段是傅里葉變換、小波變換、字典學(xué)習(xí)、稀疏編碼等
-
重構(gòu)恢復(fù):此階段基于稀疏性從少量觀測中恢復(fù)原信號。這是壓縮感知的核心
矩陣補全可以查看知乎上的問題–矩陣補全(matrix completion)的經(jīng)典算法有哪些?目前比較流行的算法是什么?
除了手動補全方法,其他插值補全方法只是將未知值補以我們的主觀估計值,不一定完全符合客觀事實。在許多情況下,根據(jù)對所在領(lǐng)域的理解,手動對缺失值進行插補的效果會更好。但這種方法需要對問題領(lǐng)域有很高的認識和理解,要求比較高,如果缺失數(shù)據(jù)較多,會比較費時費力。
尋找與該樣本最接近的樣本,使用其該屬性數(shù)值來補全。
3.1.2 圖片數(shù)據(jù)擴充
對于圖片數(shù)據(jù),最常遇到的問題就是訓(xùn)練數(shù)據(jù)不足的問題。
一個模型所能獲取的信息一般來源于兩個方面,一個是訓(xùn)練數(shù)據(jù)包含的信息;另一個就是模型的形成過程中(包括構(gòu)造、學(xué)習(xí)、推理等),人們提供的先驗信息。
而如果訓(xùn)練數(shù)據(jù)不足,那么模型可以獲取的信息就比較少,需要提供更多的先驗信息保證模型的效果。先驗信息一般作用來兩個方面,一是模型,如采用特定的內(nèi)在結(jié)構(gòu)(比如深度學(xué)習(xí)的不同網(wǎng)絡(luò)結(jié)構(gòu))、條件假設(shè)或添加其他約束條件(深度學(xué)習(xí)中體現(xiàn)在損失函數(shù)加入不同正則項);第二就是數(shù)據(jù),即根據(jù)先驗知識來調(diào)整、變換或者拓展訓(xùn)練數(shù)據(jù),讓其展現(xiàn)出更多的、更有用的信息。
對于圖像數(shù)據(jù),如果訓(xùn)練數(shù)據(jù)不足,導(dǎo)致的后果就是模型過擬合問題,即模型在訓(xùn)練樣本上的效果不錯,但在測試集上的泛化效果很糟糕。過擬合的解決方法可以分為兩類:
- 一定程度內(nèi)的隨機旋轉(zhuǎn)、平移、縮放、裁剪、填充、左右翻轉(zhuǎn)等,這些變換對應(yīng)著同一個目標在不同角度的觀察結(jié)果;
- 對圖像中的元素添加噪聲擾動,如椒鹽噪聲、高斯白噪聲等;
- 顏色變換。比如在圖像的 RGB 顏色空間進行主成分分析,得到 3 個主成分的特征向量p1,p2,p3以及對應(yīng)的特征值λ1,λ2,λ3,然后在每個像素的 RGB 值上添加增量[p1,p2,p3]*[a1λ1,a2λ2,a3λ3],其中a1,a2,a3都是均值為 0, 方差較小的高斯分布隨機數(shù);
- 改變圖像的亮度、清晰度、對比度、銳度等。
上述數(shù)據(jù)擴充方法是在圖像空間進行變換的,也可以選擇先對圖像進行特征提取,然后在圖像的特征空間進行變換,利用一些通用的數(shù)據(jù)擴充或者上采樣方法,例如 SMOTE(Synthetic Minority Over-sampling Technique)。
此外,最近幾年一直比較熱門的 GAN,生成對抗網(wǎng)絡(luò),它的其中一個應(yīng)用就是生成圖片數(shù)據(jù),也可以應(yīng)用于數(shù)據(jù)擴充。
最后,還有一種方法可以不需要擴充數(shù)據(jù),利用遷移學(xué)習(xí)的做法,也是如今非常常用的一個方法,微調(diào)(Finetuning),即借用在大數(shù)據(jù)集(如 ImageNet)上預(yù)訓(xùn)練好的模型,然后在自己的小數(shù)據(jù)集上進行微調(diào),這是一種簡單的遷移學(xué)習(xí),同時也可以快速訓(xùn)練一個效果不錯的針對目標類別的新模型。
小結(jié)
數(shù)據(jù)特征缺失和圖片數(shù)據(jù)的不足都是機器學(xué)習(xí)任務(wù)中非常常見的問題,因此需要好好掌握如何處理缺失值,以及擴充圖片數(shù)據(jù)的方法。
參考:
- 《百面機器學(xué)習(xí)》第一章 特征工程
- 機器學(xué)習(xí)之特征工程
- [數(shù)據(jù)預(yù)處理(方法總結(jié))]
- Python數(shù)據(jù)分析(三)——數(shù)據(jù)預(yù)處理
- Python數(shù)據(jù)分析(二)——數(shù)據(jù)探索
- 【Python數(shù)據(jù)分析基礎(chǔ)】: 異常值檢測和處理
歡迎關(guān)注我的微信公眾號–機器學(xué)習(xí)與計算機視覺,或者掃描下方的二維碼,大家一起交流,學(xué)習(xí)和進步!
往期精彩推薦
學(xué)習(xí)筆記
- 機器學(xué)習(xí)入門系列(1)–機器學(xué)習(xí)概覽
- [GAN學(xué)習(xí)系列] 初識GAN
- [GAN學(xué)習(xí)系列2] GAN的起源
- [GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實現(xiàn)圖片修復(fù)(上)
數(shù)學(xué)學(xué)習(xí)筆記
- 程序員的數(shù)學(xué)筆記1–進制轉(zhuǎn)換
- 程序員的數(shù)學(xué)筆記2–余數(shù)
- 程序員的數(shù)學(xué)筆記3–迭代法
Github項目 & 資源教程推薦
- [Github 項目推薦] 一個更好閱讀和查找論文的網(wǎng)站
- [資源分享] TensorFlow 官方中文版教程來了
- 必讀的AI和深度學(xué)習(xí)博客
- [教程]一份簡單易懂的 TensorFlow 教程
- [資源]推薦一些Python書籍和教程,入門和進階的都有!
總結(jié)
以上是生活随笔為你收集整理的特征工程之数据预处理(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的职业选择:打工者、独立开发者、创
- 下一篇: 程序员公司选择:创业公司、中等规模公司、