Deep learning:三十(關於數據預處理的相關技巧)


 

  前言:

  本文主要是介紹下在一個實際的機器學習系統中,該怎樣對數據進行預處理。個人感覺數據預處理部分在整個系統設計中的工作量占了至少1/3。首先數據的采集就非常的費時費力,因為這些數據需要考慮各種因素,然后有時還需對數據進行繁瑣的標注。當這些都有了后,就相當於我們有了元素的raw數據,然后就可以進行下面的數據預處理部分了。本文是參考的UFLDL網頁教程:Data Preprocessing,在該網頁的底部可以找到其對應的中文版。

 

  基礎知識:

  一般來說,算法的好壞一定程度上和數據是否歸一化,是否白化有關。但是在具體問題中,這些數據預處理中的參數其實還是很難准確得到的,當然了,除非你對對應的算法有非常的深刻的理解。下面就從歸一化和白化兩個角度來介紹下數據預處理的相關技術。

  數據歸一化:

  數據的歸一化一般包括樣本尺度歸一化,逐樣本的均值相減,特征的標准化這3個。其中數據尺度歸一化的原因是:數據中每個維度表示的意義不同,所以有可能導致該維度的變化范圍不同,因此有必要將他們都歸一化到一個固定的范圍,一般情況下是歸一化到[0 1]或者[-1 1]。這種數據歸一化還有一個好處是對后續的一些默認參數(比如白化操作)不需要重新過大的更改。

  逐樣本的均值相減主要應用在那些具有穩定性的數據集中,也就是那些數據的每個維度間的統計性質是一樣的。比如說,在自然圖片中,這樣就可以減小圖片中亮度對數據的影響,因為我們一般很少用到亮度這個信息。不過逐樣本的均值相減這只適用於一般的灰度圖,在rgb等色彩圖中,由於不同通道不具備統計性質相同性所以基本不會常用。

  特征標准化是指對數據的每一維進行均值化和方差相等化。這在很多機器學習的算法中都非常重要,比如SVM等。

  數據白化:

  數據的白化是在數據歸一化之后進行的。實踐證明,很多deep learning算法性能提高都要依賴於數據的白化。在對數據進行白化前要求先對數據進行特征零均值化,不過一般只要 我們做了特征標准化,那么這個條件必須就滿足了。在數據白化過程中,最主要的還是參數epsilon的選擇,因為這個參數的選擇對deep learning的結果起着至關重要的作用。

  在基於重構的模型中(比如說常見的RBM,Sparse coding, autoencoder都屬於這一類,因為他們基本上都是重構輸入數據),通常是選擇一個適當的epsilon值使得能夠對輸入數據進行低通濾波。但是何謂適當的epsilon呢?這還是很難掌握的,因為epsilon太小,則起不到過濾效果,會引入很多噪聲,而且基於重構的模型又要去擬合這些噪聲;epsilon太大,則又對元素數據有過大的模糊。因此一般的方法是畫出變化后數據的特征值分布圖,如果那些小的特征值基本都接近0,則此時的epsilon是比較合理的。如下圖所示,讓那個長長的尾巴接近於x軸。該圖的橫坐標表示的是第幾個特征值,因為已經將數據集的特征值從大到小排序過。

  

  文章中給出了個小小的實用技巧:如果數據已被縮放到合理范圍(如[0,1]),可以從epsilon = 0.01或epsilon = 0.1開始調節epsilon。

  基於正交化的ICA模型中,應該保持參數epsilon盡量小,因為這類模型需要對學習到的特征做正交化,以解除不同維度之間的相關性。(暫時沒看懂,因為還沒有時間去研究過ICA模型,等以后研究過后再來理解)。

  教程中的最后是一些常見數據的預處理標准流程,其實也只是針對具體數據集而已的,所以僅供參考。

 

  參考資料:

     Data Preprocessing

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM