kaggle competition 之 Titanic: Machine Learning from Disaster

     Kaggle是一個數據科學競賽平臺(making data science a sport),在上面,很多機構會發布研究問題和數據集提供大家解決,有些會有報酬。第一次看到這個網站就覺得它會火,在信息爆炸時代,通過挖掘歷史數據來對業務提供更有效的服務已經是大勢所趨。而kaggle上的題目都是偏向數據挖掘類的,這相比ACM或者projecteuler這種純算法的題要更有專業和更開放;一個題一般都會有一個量化評價指標,所以又比數模競賽更專注。因此從事數據分析挖掘行業的研究人士和工作者都可以在上面找到一些題目練手。Kaggle只允許每個題目每天提交2次結果,所以你不能線下瘋狂嘗試各種參數往上測試。

     現在有一道機器學習的題目 Titanic: Machine Learning from Disaster 這個題數據量小而且問題簡單就是預測在那次還難之中誰更有機會存活下來。其中數據集包含幾個字段:姓名,乘客類型,是否有家屬,船票信息,等等,詳細的留意dataset頁面。作者提供了自己的方案和分析,按照作者的辦法,簡單的用性別進行預測準確率都達到75%;之後又增加年齡、類型等屬性,又提高了一些;然而繼續增加屬性,採用隨機森林算法的時候卻反而沒有達到最好,作者也進行了一些分析。所以看到這,相信直接從簡單的屬性和模型開始,可能會得到更好的預測結果。

      我首先用了pclass,sex,age,sibsp,parch這幾個字段,其中age按10歲劃分、連沒年齡的共8個區間,其他字段全部利用屬性的值,訓練算法用了libsvm的線性核svm,第一次提交效果就超過作者最好的結果了. 運氣不錯。之後試了幾次非線性的SVM,效果反而下降了。到這裏可以組合的策略其實很多,一方面增加和改善特徵,另一方面選用和改進分類器。對於學術研究來說一般偏向後者,因爲前者更針對數據集,而在kaggle問題是具體的,因此改進特徵選擇各方面考慮更實用。

      我的特徵選擇改進了sibsp,parch的劃分: 0, 1, 2~4, 5+ 增加fare和cabin。fare取底爲2的log之後以2進行劃分,cabin分爲有和沒有,分類器繼續用線性核svm,效果再次提高到接近80%,顯示特徵選擇效果還是比較明顯。如果看過電影的人都應該會知道婦女和兒童更具有更多的生還機會,而登上救生艇也肯定不是人屬性上的線性疊加,猜測多元屬性組合可能還會提高預測效果。

      而之後進行的幾次二元聯合特徵加入都沒提高分類效果。這也好理解,訓練樣本只有不到900,二元組合特徵加進去就有100多,很容易造成過擬合,於是我只選擇部分對生還置信度較高和較低的二元特徵,效果更差了、又再試了試L1邏輯迴歸來減少有效特徵數目,提交結果也是不如最好的那兩次....

     暫時想不出還能怎麼搞,應該要從人物關係上投入點挖掘,有人就開始研究人名了....就在提交的這幾天,看到有隊伍做到94%+ 拉開下面的10%,我也想到了,估計是直接把生還名單找出來填答案的,這兩天結果又被撤掉了,其實作弊一點的辦法也有,就是拿正確的測試集和訓練集一起訓練,模型一定更準.....反正這個題目挺適合機器學習入門的人嘗試玩玩


      Kaggle提供的競賽平臺還是很好的,做上面的題未必要拿個前幾名,能夠通過題目擴展數據挖掘知識和提高技能最重要。大家空閒時間多的話強烈推薦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章