1.機器學習演算法應用---數據預處理

  隨著2016年阿爾法狗的橫空出示,很多人開始對人工智慧,機器學習等相關技術有所了解。演算法做為人工智慧領域的重要性也越來越被人認可。做為推進演算法在實際工程應用中的一線工程師,每天的工作是什麼樣的,是否有別人想的那麼神秘。有句話說的好不會講段子的程序員不是好司機。今天開始,逐步寫一些做為一個演算法工程師每天的工作都有那些。或者說每天都在那些事情上給自己挖坑填坑。

  第一講說說數據預處理的那些事,數據就是演算法的糧食,巧婦難為無米之炊。在當今數據收集的完整性和及時性,對演算法模型的效果的優劣這一點上已達成廣泛共識。如何利用好這些數據使其產生最大的價值是演算法工作者每天思考的主要問題。但不可忽視的是通過系統收集來的數據信息並不能直接用於演算法,需要做一些清洗,歸一化等操作,這就是今天我們要講的數據預處理部分。

(一)缺失數據處理

  首先說說缺失數據的問題,缺失數據是真實世界中必然發生的事情(承認這是真實世界不是完美的)。在統計和採集數據維度的各方面信息時,經常會由於一些特殊原因或者異常狀態導致有些數據樣本個體的數據缺失,如何針對這部分缺失的數據進行處理使其能為演算法的訓練做貢獻是本部分需要考慮的主要問題。

1. 刪除法:簡單刪除一些因為特殊異常原因導致的數據缺失,將存在數據維度缺失的樣本刪除,這種情況僅限刪除小部分樣本數據就可以達到目標的情況,且在將來演算法模型應用的過程中,缺失維度的情況發生概率很小。

2. 填充法:這種方法通常用默認值或者均值等默認填充的方法來補充缺失的維度信息,目前這種方法是通常使用情況最多的方法,存在易操作,易解釋等優點。但在一定程度上,由於單一維度填入大量相同的數值,可能會導致該維度的區分度下降。

3. 映射到高維空間:例如男,女,缺失三種情況的性別數據維度,映射為是否男,是否女,是否缺失。這樣的好處是完美的保留的缺失值這個信息,不會對原始信息加入人為的先驗知識,帶來的問題就是數據維度的增加,演算法的計算量也隨之變大。

(二)數據數值化

  在收集到的各個維度信息中,經常會有些字元串的信息,例如,男,女。高中低等信息,對於這類信息不能直接用於演算法的計算,通常情況下,需要將這些數據轉化為數值的形式進行編碼,便於後期演算法的計算。

1. 離散編碼:對於可窮舉的字元串通常根據出現的頻率進行編碼即可,例如男出現100次,女出現80次,將男編碼為0,女編碼唯1。

2. 語義編碼:對於在有些信息無法通過窮舉法來表示完全,做文本分類過程中的文本信息,包含了一段自然語言信息,導致這一段無法通過窮舉來表示。對於這一類信息通常採用詞嵌入(word embedding)的方式是比較好的選擇,在同一語料庫訓練下,這部分詞嵌入信息可以攜帶一些語義信息。目前在這一領域比較好的方法是基於google的word2vec方法。

(三)數據正規化或者也叫歸一化

  數據的正規化指的是什麼呢,舉一個簡單的例子,如果做一個人群的聚類工作,統計的信息包括男女,薪資,身高,體重等等相關信息,如果對這些信息做過數值化替換後,可能會發現薪資欄位為5000,體重欄位為50。這樣的數據如果不做正規化處理,當計算聚類時,簡單的計算兩個員工之間的歐式距離時,可能會發現如果直接計算距離,體重欄位的信息值可能被薪資欄位掩蓋了,也就是說數據絕對值小的維度信息被絕對值大的維度信息淹沒了,導致這一維度在實際計算中其實是不發生作用的。如何避免這一問題的出現就是數據正規化解決的問題,對每一個維度值利用如下公式進行正規化處理。

     zi=xi-xmin/xmax-xmin

其中:zi為指標的標準分數,xi為某鎮某指標的指標值,xmax為全部鎮中某指標的最大值,xmin為全部鎮中某指標的最小。通過利用上面的公式可以將一個維度的數值信息映射到0到1之間,這樣當所有的維度都在0到1之間時,這一問題就得到了解決。

  本次簡單聊了一下數據預處理的一些操作,限於篇幅很多細節和更多的方法在文中並未體現。這些工作看似枯燥繁雜,但對於演算法的最終效果有質的影響,算是萬里長征的第一步。後續會陸續介紹演算法工作的其他方面內容。逐步分析演算法工作的各個流程。

  個人看法,歡迎討論

推薦閱讀:

自動駕駛還在盯著「演算法」和「感測器」么?風河打算為其開發通用底層操作系統了
無序數組的中第k小的數字
偽·從零開始學演算法 - 1.2 演算法的歷史
動態規劃求解最長不重疊子串

TAG:演算法 | 機器學習 |