天天看點

參加kaggle競賽是怎樣一種體驗?

作者:Naiyan Wang

連結:http://www.zhihu.com/question/24533374/answer/34631808

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

先貼下Kaggle Profile以示誠意: Winsty | Kaggle 我是KDD Cup專業戶,雖然每年做的都不是特别好。。。和一些Kaggle專業戶們無論從數量還是品質上都差了好多。不過我一直覺得Kaggle在我PhD期間扮演了一個非常重要的角色。下面列幾個我覺得比較重要的問題自問自答下哈

Kaggle的比賽究竟鍛煉的是什麼能力?

首先說,絕大部分的Kaggle比賽是 Data Mining(DM)比賽(除少數是和Discrete Optimization還有Computer Vision(CV) 有關),最重要的是和 Machine Learning(ML)關系不大。這是很多人一個誤區,往往希望在Kaggle上學到很多ML的知識。Kaggle教給我的第一件事情,就是讓我清晰領會到了這兩者之間的不同:ML一般從模型或者算法出發,講的是模型或者算法本身存在的不合理的地方,然後提出新的假設,進而去優化模型或算法。在這個過程中并不針對某一個具體的特殊的問題。而DM恰恰相反,它是從資料本身問題本身出發,希望針對問題的特性來設計最适合的方案。關鍵是在于對問題和資料的了解。之前總是覺得,DM/CV的paper都好水,到處找一個應用套。在我想明白這個問題之後,我就開始懂得欣賞DM/CV的paper。

其次,我覺得在一個DM的比賽中,最能鍛煉到的是對于資料的"嗅覺"。舉一個最有趣的例子,往往在比賽中會存在Data Leakage的情況,也就是說,某些和label相關的資訊不小心會洩漏在feature中。有人通過這樣的feature取得了很好的成績之後,往往有人覺得非常鄙視。當然我不是說Data Leakage是一件好事情,但是在這背後往往隐藏的是發現leakage的人對于資料本身深刻的認識。這并不是每個人都能做到的。換句話講,就算沒有leakage,這群人還是會排名很前。在Kaggle的比賽中,能收獲最大的就是這種嗅覺。這其實也把我自己訓練成了一個data believer:也許一次兩次的巧合真的是意外,但是如果巧合總是持續發生,那麼背後一定有一個原因。

怎樣才能做好Kaggle的比賽?

第一點也是最重要的一點就是 專注,專注,再專注。其實說來慚愧,我在這點上做得很不好。

第一年開始高歌猛進了一段,中間卡住,也是能力不足,然後就放棄了。

第二年抱學長大腿僥幸成績不錯,其實個人來講沒有做出太大貢獻。先是去寫了一個NIPS,然後又去處理了一些私事。

第三年做到一半,很偶然地被拉去百度做了ImageNet的比賽,精力主要就放到了ImageNet上。坑了隊友。。。

是以其實這三年,離我自己的期待都有一定的距離,我也很清楚問題出在哪裡。希望明年能真正focus一次吧。

第二點,永遠不要放棄。希望總存在于絕望之後。每個比賽都會有一個瓶頸期。耐心地去突破它後,就是一片開闊天空。

第三點,切記隻看不做。很多人隻喜歡紙上談兵,武斷覺得這個問題,或者這個資料就應該是怎樣。很多資料的特質都是要真正動手做進去才能發現其中的奧妙,針對這些特質設計的一些Feature或者Model,往往都能帶來極大的提高。

第四點,才是多看,尤其是在比賽結束之後。很多leader會在比賽結束之後部分甚至全部地公布自己的解法。這個時候傳回去看看在比賽中自己忽略掉了什麼地方,才是成長最最重要的。第一年的比賽教給了我在一個實際的推薦系統裡session的重要性。第二年的比賽教給了我機器不是萬能的,人肉一些規則往往更有效。 每一年其實都對實際的Data Mining問題有新的認識,也更清楚了哪些paper是真的work,哪些是在灌水。這其實也就是我來做比賽的最大目的吧。

技術方面上什麼最關鍵?

前面提到Kaggle主要是以Data Mining的比賽為主,那麼這個答案就非常直接了: Feature Engineering 無數經驗告訴我們,做Kaggle比賽如果是抱着Machine Learning的态度,沉迷于facny的模型而忽略資料本身,一定會死得很慘很慘!

當然,基本的ML知識還是有的。在比賽中,最常用的分類器一般是Gradient Boosting Tree(GBDT)和Random Forest(對,你沒看錯,不是那個在教科書中推Dual時讓很多人痛不欲生的SVM)一些常見的預處理技巧,比如PCA,KMeans,TF/IDF,Hashing等等都還是必須的。這裡就不展開講了。

最後,但是非常關鍵的一點是 Ensemble 從KDD Cup到Imagenet,我從來沒見過ensemble不會改善結果的情況,隻是多與少的問題。不做ensemble就意味着你自己告别了一大塊寶藏。

總結

我覺得Kaggle是一個對于每個想成為所謂的Data Scientist的同學最好的試煉廠。在這裡,你就會知道課上學到的那些東西和能解決一個實際問題所需要的能力的差距。更何況,在學校裡往往是拿不到任何大規模的資料。絕大多數課堂上用的還是隻有幾百個幾千個資料的UCI dataset。Kaggle是縮小這個gap最好的一個地方。

最後,希望大家在Kaggle上都玩得愉快~~

作者:匿名使用者

連結:http://www.zhihu.com/question/24533374/answer/34602798

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

下面是我的一些個人經驗:

1. 一定做Ensemble,甚至是對submissions做ensemble。

2. 目的如果單純是拿好的排名,那麼就找人多的比賽參加,因為那些參加人數上千的比賽裡面大批僵屍參賽者,超過他們就可以進25%了。

3. 對大多數比賽來說,Feature Engineering比選用什麼模型更重要

4. 多看論壇,大家會在比賽進行中讨論很多泛泛的思路,對自己可能有幫助。有時候會有人釋出比較好的Beat the benchmark代碼,仔細思考為什麼這個模型能夠work,在上面塗塗改改有時候效果更好。

5. 永遠相信自己的cross validation結果,甚于public leaderboard,結束前後的榜單常常震動巨大,具體例子參見 Description - Africa Soil Property Prediction Challenge 和 Description - Higgs Boson Machine Learning Challenge

6. 每次比賽最有價值的東西就是結束之後的方法分享帖,大家的方法都很不一樣,挑一個說得比較全面清晰的方法,自己嘗試重制一個一樣或者接近的效果,然後再嘗試改進它,這個過程能學到非常多東西。 作者:H Hsu

連結:http://www.zhihu.com/question/24533374/answer/34649594

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

同意@Naiyan Wang的觀點,大部分kaggle比賽和machine learning關系不大。大部分比賽還是很brute force的方法,個人看法能拿到10%并不是很困難,都是一些常見的featuer處理方法(Hash, BOW, TFIDF, Categorization, Normalization),加幾個常見模型(RF, GBDT, LR),cross-validation調參數,最後ensemble一下。最好有很好的機器(主要是ram,以及tree-based model并行),這樣就不用太擔心online training的問題,大部分的lib也能用了。

不過如果想拿top10還是有一定難度,大部分冠軍得主其實都有相關領域從業經驗,有一些domain knowledge,對問題的思考也會更本質一點。

總體而言,我覺得參加kaggle還是很不錯的體驗,有一些幫助,特别是比賽結束後大家解法的分享和探讨可以學到一些東西(貼一個位址 Kaggle Competition Past Solutions。)但honestly,我覺得kaggle更适合機器學習入門者,對這個領域有興趣的同學們來産生興趣,鍛煉實際能力,感受一下實際的資料集(雖然仍然有些不一樣),對從業者或者researcher們而言幫助不是很大。

繼續閱讀