前言

在傳統的機器學習當中,特徵工程可以說是最為重要的部分之一。如果大家看看Kaggle比賽中獲得前幾名的團隊的代碼就不難發現,他們用的演算法並不複雜,構建模型的思路也並不複雜,往往是他們對數據本身的理解以及構建特徵的方式起到了更為關鍵的作用,這也正是特徵工程的核心所在。今天我們就來說一說特徵工程。

特徵工程內容零散,定義方式較模糊,大致包括特徵提取和特徵選擇兩個方面。特徵提取,通常指運用特點的變換方式降低數據的維度,即通過更少的資源來描述數據,其中最為經典的可以算得上PCA(Principle Component Analysis)演算法。而特徵選擇,通常指運用某種規則或模型的輔助,篩選出更利於建模的特徵。特徵提取和特徵選擇雖然都能起到降低維度的作用,但是原理和目的卻是有比較大的不同:特徵提取的主要目的在於降低數據維度或者說是從原始數據中提取出有意義的內容,並不考慮是否保留原數據中特徵的意義;而特徵選擇的根本目的並不一定在於降低數據維度,其目的往往是在保留特徵原本意義的基礎上,篩選出表現更為優秀的特徵。

除了特徵提取和特徵選擇之外,特徵工程往往還包括特徵創建。利於已有特徵創建新的特徵,在某種意義上仍然屬於特徵提取的範疇之內,但是我還是更喜歡把它單獨拿出來說。儘管新特徵的創建在建模當中看似是可有可無的步驟,但在我看來,特徵創建在某種程度上來說可以說是機器學習建模的核心所在。簡單來說,我們所擁有的數據越貼合我們想要解決的問題,則建立優秀模型的可能就越高,而創建新的特徵就是在利於我們的經驗來使數據更加貼合模型。

舉例來講,筆者曾經參與過一項Kaggle競賽,這個項目是要求參賽者識別某拍賣網站的競標者是機器人還是人類(類似於有些遊戲中的拍賣系統,如魔獸世界),並最終禁止機器人參加競標。他們給出的數據只有一些拍賣的基本信息,如拍賣事件的編號、參與競拍的人的ID、ID所屬地區及競拍時間等。利用這些基本信息直接建立模型的效果是非常差的,但是如果我們利用自己的常識來思考這個問題的話,我們可以用這些基本特徵來計算競標者競標的速度、競標者在一段較短時間內參與的拍賣事件的數量、競標者參與競標的地點數量等來進一步深挖人類競標者與機器人之間的不同。

這裡我為大家整理了一些特徵工程的難點所在:

1. 行業背景知識或常識

如果你是在一個擁有固定種類數據的公司為公司內部建立機器學習模型(如銀行),那麼恭喜你,你所需要學習的可能只有與銀行業務相關的知識;如果你是在一個沒有自己數據的數據服務公司,那麼同樣恭喜你,你有機會去深入瞭解更多行業了。我曾和一個做數據服務的同行聊過,公司每接一個客戶,他就需要去了解一個行業,兩年下來他跟來自五六種行業的客戶都打過交道,他自嘲說自己已經變成了這些行業的「專家」。的確,在筆者從事車聯網行業之初,可以說我對車聯網一無所知。後來為了建出更好的模型,我們數據部門不得不經常和產品部門以及運營部門交流,瞭解行業狀況和公司的運行狀況是建立好的預測模型的重要一步。

在實際工作當中(尤其是與硬體設備有關的行業),我們拿到的往往是原始到不能再原始的數據。以車聯網行業為例,我們拿到手的其實只有每隔30秒從汽車上的感測器發出的GPS信號信息,我們需要根據自己的需求來自己計算出真正有用的特徵,如果沒有相關行業的背景知識,想要做好特徵工程實在是非常非常困難的。

2. 數據分析及建模的經驗

如果僅有行業知識就可以做好特徵工程的話,那可能也沒有機器學習工程師什麼事了。特徵的創建及選擇不只是從業務的角度考慮,更是一種對數據的嗅覺。有經驗的工程師們,往往通過自己做的可視化的內容,就可以產生特徵組合、變換的靈感。儘管有一些基礎的方法可以幫助我們不需動太多腦筋便能創建出比較好的特徵,但經驗的累積卻能夠使我們創造出關鍵性的特徵。

關於這一點,我建議大家多去看看別人是怎麼做特徵工程的,看看別人的代碼,參考別人的思路。比如Kaggle競賽上取得前幾名的隊伍,如果你看過他們的代碼你就會發現,每個隊伍採用的特徵工程的思路可以說是天差地別。正確的姿勢是,吸收別人的方法,拓寬自己的視野,創造出屬於自己的特徵工程的思路。

結語

總的來說,特徵工程沒有完全固定的方法和思路,也沒有一定有用的演算法,在某些數據中可能起作用的方式,換到另一組數據中可能完全無效。有人說機器學習模型的調參是整個建模過程中最繁瑣的,但我認為特徵工程是比調參更令人頭疼的事情。提升特徵工程的能力沒有捷徑,只有不斷去參考別人的方式,不斷取長補短,增進所能。

想成為一名合格的機器學習工程師嗎?微信掃碼關注「機器學習學社」獲取每天一份的新鮮諮詢,為你開拓屬於你自己的AI之路


推薦閱讀:
相關文章