標籤:

正經機器學習之數據比賽的一般套路

感謝麻婆豆腐,本文來源於麻婆豆腐的分享。

談不上經驗,也可以當作教訓送給閱讀這篇文章的有緣人。

數據比賽基本上分為結構化數據和非結構化數據的演算法賽和創新賽等。結構化數據可以用二維表結構邏輯表達,而對於不方便使用此種結構表示的數據稱為非結構化數據,例如:文本,圖片,音頻等。

對於存放在文本載體或者資料庫中的數據,需要一種有效的方式來對數據進行操作,則要選擇一種適合自己使用的編程語言,例如:Python,R,SQL,JAVA等(現在有很多的網路資源可以幫助初學者快速入門語言)。這裡各類編程語言之間並沒有優劣之分,方便自己使用,能夠用編程語言表達自己思想讓計算機去執行就可以。

拿到賽題,需要對賽題描述的有基本的理解,從宏觀去劃分這個題目是回歸或分類等問題,很多題目剛剛拿到的時候,並不是那麼明顯的能夠看出來它屬於那一類問題,例如:這次螞蟻金服的比賽,去預測付款用戶當前所在商鋪的ID,思路很多,一種方式就是把問題理解為預測用戶在可能商鋪ID的概率,另外一種方式就是建模為根據周圍wifi的信息的多分類問題。所以,問題的理解是多方面的,解體的思路不是唯一的。關鍵是要有自己對賽題的理解和想法。

之後就是對賽題的評測函數和數據字典進行分析。基本上,比賽的數據一般以文本的形式公布給參賽的選手,利用一些現有的工具對數據進行可視化展示更能從宏觀去了解數據帶給你的信息和內容。當然,做可視化展示的過程中,需要以「目標」為導向去分析數據,例如:分類問題,就要分析正負樣本在不同欄位的分布情況;回歸問題,基本要分析不同欄位和目標的線性關係。這個部分,基本上會消耗大部分的比賽時間,好的數據可以讓模型學的更好。推薦去看一下kaggle中kernel中內容,基本上都會有很多對數據可視化分析的文章和資料方便學習,包含了使用不同語言處理數據的技巧。

當然,會遇到這樣的問題,就是當對數據進行了好多的觀察後,依舊不知道如何利用這些數據。兩眼對電腦,腦子一片白。這個時候,借鑒別人的經驗就尤其重要了,腦洞不是那麼大,就先去學習別人的成功經驗。2017年,網路上面已經多的歷史比賽的資源積累,例如:天池技術圈積累了很多歷史比賽的答辯視頻和最近大佬的經驗分享。當然,也可以去閱讀一些論文,去實現論文提出的方法。不同賽題的目標和數據不一樣,很多情況下,思路是可以通用的。

辨別實體,數據字典給了很多屬性欄位,時間欄位,行為欄位等,對於實體的辨別,是建模前的關鍵,分析出這些數據中擁有那些實體,分別針對不同實體先要提取各個實體的特徵,之後就是對於不同實體之間的交互行為,提取可用特徵。這個部分,也是比賽中耗時的部分之一。注意,時間是一個永恆的實體。

有了不同實體中提取的特徵之後,就是選擇一個模型,去擬合題目需要的目標,那麼選擇什麼模型,就要針對不同題目和提取到的特徵。模型這個部分,我理解的是,我們要應用一種有效的方法去針對特徵尋找使評測方案最優的一個解。

流傳這樣的一句話,特徵決定上限,那麼如何逼近這個上限,調參就是逼近這個上限要做的事情。參數不理解怎麼辦,去閱讀你所用模型的一些底層實現,可以幫助你對模型參數更深入的理解。


推薦閱讀:

張量分解如何應用於數據挖掘?求詳細說明,最好有例子!?
Multi-Armed Bandit: UCB (Upper Bound Confidence)
Kaggle HousePrice : LB 0.11666(前15%), 用搭積木的方式(3.實踐-訓練、調參和Stacking)
GBDT預測時每一棵樹是否能並行?
CS229機器學習(一)——線性回歸

TAG:机器学习 |