文章來源:hackerearth 翻譯:云棲社區【方向】
摘要:本文總結由Marios Michailidis(a.k.a Kazanova),Kaggle Grandmaster在2016年3月5日現在排名第3位的在線研討會上分享的技巧,更好地在機器學習競賽中取勝
作者:Team Machine Learning,這是一個機器學習愛好者團隊,他們熱衷于建立一個有希望在數據科學/機器學習方面建立事業的有抱負的年輕畢業生和專業人士的環境。
介紹
機器學習很復雜。你可能會遇到一個令你無從下手的數據集,特別是當你處于機器學習的初期。
在這篇文章中,你將學到一些基本的關于建立機器學習模型的技巧,大多數人都從中獲得經驗。這些技巧由Marios Michailidis(a.k.a Kazanova),Kaggle Grandmaster在2016年3月5日現在排名第3位的在線研討會上共享的。在線研討會有三個方面:
1.視頻:
2.幻燈片——視頻中使用的幻燈片由Marios分享。實際上,是一個豐富的機器學習知識匯編。
3.問答——本博客列出所有參與者在研討會所問的問題。
成功的關鍵是堅持不懈。
問答部分
1.你解決ML問題的步驟是什么?請從頭描述。
以下是解決任何ML問題時我所采取的步驟:
1.了解數據——下載數據后,開始探索功能。 查看數據類型。 檢查變量類。 創建一些單變量-雙變量圖來了解變量的性質。
2.了解度量優化——每個問題都有獨特的評估指標。你必須理解它,特別是它如何隨著目標變量的變化而變化。
3.確定交叉驗證策略——為避免過擬合,確定你在初期階段已經設置了交叉驗證策略。一個很好的CV策略將幫助你在排行榜上獲得可靠的得分。
4.啟動超參數調整——一旦CV在位,嘗試使用超參數調整來提高模型的精度。 它還包括以下步驟:
數據轉換:包括縮放、移除異常值、處理空值、變換分類變量、做特征選擇、創建交互等步驟。
選擇算法并調整其超參數:嘗試多種算法來了解模型性能的變化。
保存結果:從上面訓練的所有模型中,確保保存預測。 它們對于集成將是有用的。
組合模型:最后,集成模型,可能在多個層次上。 確保模型相關以獲得最佳效果。
2.你解決問題時所采用的模型選擇和數據處理技術是什么?
一般來說,我嘗試(幾乎)一切的大多數問題。原則上:
時間序列:我使用GARCH、ARCH、回歸、ARIMA模型等。
圖像分類:我在Python中使用深度學習(卷積網)。
聲音分類:普通神經網絡
高基數分類(如文本數據):我用線性模型、FTRL、Vowpal wabbit、LibFFM、libFM、SVD等。
對于其他一切,我使用漸變增壓機(如XGBoost和LightGBM)和深入學習(如keras、Lasagne、caffe、Cxxnet)。 我決定使用特征選擇技術來保留/刪除元模型的模型。 我使用的一些特征選擇技術包括:
向前(cv或否)——從空模型開始。 一次添加一個特征并檢查CV精度。 如果改進保持變量,否則丟棄。
向后(cv或否)——從完整模型開始,逐個刪除變量。 它通過刪除任何變量來提高CV精度,丟棄它。
混合(或逐步)——使用以上混合技術。
排列
使用特征的重要性 ——使用隨機森林、gbm、xgboost特征選擇特征。
應用一些統計學的邏輯,如卡方檢驗、方差分析。
每個問題的數據操作可能不同:
時間序列:你可以計算移動平均數、導數。 去除異常值。
文本:有用的技術是tfidf、countvectorizers、word2vec、svd(維度降低)。 詞干提取、拼寫檢查、稀疏矩陣、似然編碼、一個熱編碼(或虛擬)、散列。
圖像分類:你可以進行縮放、調整大小、去除噪點(平滑)、注釋等
聲音:計算Furrier變換,MFCC(Mel頻率倒譜系數),低通濾波器等
其他一切:單變量特征變換(如數值數據的日志+1),特征選擇,處理空值,去除異常值,將分類變量轉換為數字。
3.你能詳細說明交叉驗證策略嗎?
交叉驗證意味著從我的主集中隨機地創建了2個集。 我用第一個集建立(訓練)我的算法(讓我們稱之為訓練集),并用另一個評分(讓我們稱之為驗證集)。 我重復此過程多次,并始終檢查我的模型在測試集上對于我要優化的度量執行的方式。
過程可能如下所示:
10(你選擇多少X)次
在訓練中分組(原始數據的50%—90%)
和驗證(原始數據的10%—50%)
然后在訓練集上擬合算法
評分驗證集。
保存與所選指標相關的得分結果。
計算這10個(x)次的平均值。
記住使用SEED能夠復制這些X分裂
其他需要考慮的事情是KFold和KFold分層。對于時間敏感的數據,確保你在測試時總是有過去預測未來的規則。
閱讀地址:https://www.cs.cmu.edu/%7Eschneide/tut5/node42.html?spm=5176.100239.blogcont73755.11.QZnFef
4.你能解釋一些用于交叉驗證的技術嗎?
Kfold
Kfold分層
隨機X%分割
時間分割
對于大數據,僅一個驗證集就足夠了(如20%的數據——你不需要多次執行)。
5.你如何提高機器學習的技能? 你使用什么訓練策略?
我在2做了資料的匯總。加上很多自己的研究。同時,編程和軟件(java)和很多kaggling。
6.哪些是數據科學家最有用的python庫?
以下是一些我發現最有用的解決問題的庫:
數據操作
Numpy
Scipy
Pandas
數據可視化
Matplotlib
機器學習/深度學習
Xgboost
Keras
Nolearn
Gensim
Scikit image
自然語言處理
NLTK
7.當所有的變量本質上是明確的時,什么是有用的ML技術/策略來估算缺失值或預測分類標簽。
估算缺失值是關鍵的一步。 有時你可能會發現缺失值的趨勢。 以下是我使用的一些技巧:
使用均值、模式、中位數進行插補
在變量的正常值的范圍之外使用值。如- 1,或- 9999等。
用一種可能性替換——例如與目標變量有關的事物。
用有意義的東西代替。例如:有時空可能意味著零
嘗試基于已知值子集來預測缺失值
可以考慮刪除具有許多空值的行
8.你可以詳細說明你所做的硬件投資是什么,即你自己的PC / GPU設置用于深度學習相關任務? 還是使用更多的基于云的GPU服務?
到目前為止,我大多數使用自制解決方案(Java)。我的第一場比賽必須匯總三千萬行的交易數據,所以我不得不解析數據,而且需要將內存使用率降至最低。
不過,從那時起,我做了一些很好的投資,成為排名第一。 現在,我可以訪問linux服務器的32個內核和256 GBM內存。 我也有一個geforce 670機器(用于深度學習/ gpu任務)。 此外,我現在主要使用Python。 但是,如果你真的有興趣獲得最高的收益,你也可以考慮使用亞馬遜的AWS,因為如果你使用它很多,成本可能會很高。
9.你是否使用像GPU這樣的高性能機器?;蛘撸缒阕鲫P于隨機森林參數的網格搜索,這需要大量的時間,所以你使用哪臺機器?
對于每個深入學習的訓練模式,我都使用GPU。 我必須指出,對于深度學習,GPU是必須的。 在CPU上訓練神經網絡需要很長時間,而普通的GPU可以使一個簡單的神經網絡(例如深度學習)快50-70倍。 我不喜歡網格搜索。 我這樣做相當于手動。 我認為在一開始它可能會很慢,但過了一會兒,你可以獲得相當好的解決方案與第一組參數! 那是因為你可以學習哪些參數最適合每一個問題,并且你可以更好地了解這些算法。
10.人們如何通過改變超參數調整建立大約80個模型?
這需要時間。我有一些過去工作的參數,我用這些值初始化,然后根據現在的問題開始調整它們。 顯然,你需要強力探索更多的領域,并豐富這個庫關于每個模型過去成功的超參數組合。 你應該考慮別人在做什么。不會只有一組最優的超參數。你可能會在完全不同的一組參數中得到一個和你所擁有的相比類似的分值。
11.如何提高Kaggle排名?
這不是一個一夜之間的事情。你只需要繼續學習。 以下是我的一些建議:
學習更好的編程:如果你知道R那么學習python.
繼續學習的工具(如下所列)
讀一些書
參加“知識”比賽
看看其他人在內核中做什么或在過去的比賽中尋找“獲勝解決方案”
與更多的有經驗的人合作,但你需要在此之前稍微提高排名
創建一個代碼庫
多多參與!
12.你能告訴我們有關機器學習中使用的一些有用的工具嗎?
以下是我最喜歡的工具的列表:
Liblinear:線性模型
支持向量機的LibSvm
對于所有機器學習模型的Scikit Learn
用于快速可伸縮梯度提升的Xgboost
LightGBM
用于快速記憶效率線性模型的Vowpal Wabbit
神經網絡 encog
H2O在R為許多型號
LibFm
LibFFM
使用Java的Weka
用于因式分解的Graphchi
含有大量資料的GraphLab
Cxxnet:卷積神經網絡中最好的實現之一。 難以安裝,需要使用NVDIA顯卡的GPU。
RankLib:java中最好的適合于支持像NDCG這樣的優化功能的排序算法(例如客戶級產品)的庫。
Keras和Lasagne用于神經網絡。前提你有Theano或Tensorflow。
13.如何從機器學習開始?
我從猶他大學的這些幻燈片中了解到有關機器學習的一些基本算法和概念。這本書關于python。不要忘記遵循scikit Learn文檔。使用anaconda的jupyter筆記本。
你可以在kaggle找到許多很好的鏈接。
另外,你應該去上Andrew Ng的機器學習課程。 除此之外,你可以瀏覽一些好的博客,如mlwave,fastml,analyticsvidhya。 但最好的辦法是親自動手。 做一些kaggle! 先解決有“知識”標志的比賽,,然后開始解決一些主要的問題。 嘗試解決一些過去的。
14.在Kaggle和一般的大數據集上哪些技術最好? 如何解決內存問題?
具有高基數的大數據集可以通過線性模型得到很好的解決。 考慮稀疏模型。像vowpal wabbit這樣的工具。 FTRL、libfm、libffm、liblinear是python中的優秀的工具矩陣(像csr矩陣)。 考慮在數據的較小部分集成(如結合)模型的訓練。
15.涉及機器學習的項目的SDLC(軟件開發生命周期)是什么?
在一個工業項目上展開并采取步驟,以便我們能夠了解如何使用它們。 基本上,我正在學習階段,并期待獲得行業水平的曝光。
商業問題:如何在線推薦產品以增加購買。
將其翻譯成ml問題。 在客戶可能會點擊/購買時嘗試預測顧客會買什么并給定一些可用的數據,給定一些歷史風險的建議
建立一個測試/驗證框架。
找到最佳的解決方案來預測客戶最佳選擇。
考慮時間/成本效率以及性能
導出模型參數/管道設置
將這些應用到聯機環境中。暴露一些客戶,但不是所有。保持測試組和對照組
評估算法的運行情況以及隨著時間的推移進行調整。
16.你最喜歡的機器學習算法是哪一種?
當然是梯度提升決策樹。但在不同的任務中,所有可能都是好的。
17.哪種語言最適合深入學習,R或Python?
我更喜歡Python。 我認為它更程序化。 R也很好。
18.在數據科學中轉行的人需要從技術技能中獲得什么?因為我沒有開發人員背景,個人項目是展示我的知識的最好方式嗎?
將業務問題轉化為機器學習的能力,并將其轉化為可解決的問題。
19.你是否同意在一般特征中工程(探索和重組的預測)比改進預測模型在提高準確度上更有效?
原則上是。我認為模型的多樣性比一些真正強大的模型要好。但這取決于問題。
20.是否需要Kaggle排行榜頂尖的技能,也是你作為數據科學家日常工作所需的技能? 或者它們相交還是有些不同? 我可以認為數據科學家的工作是基于Kaggle比賽嗎? 如果一個人在Kaggle上做得很好,那么她會在她的職業生涯中成為一名成功的數據科學家嗎?
有一定比例的重疊,特別是在制作預測模型時,通過python / R處理數據并創建報告和可視化。 Kaggle不提供(但你可以得到一些想法):
如何將業務問題轉化為建模的問題
如何監控模型的部署
如何解釋(多次)困難的概念給利益相關者。
我認為在業界總是留有優秀的kagglers的空間。 只是數據科學可以有許多可能的路線。 例如,不是每個人都傾向于自己創業,或者是面對客戶,而是解決非常特殊的(技術)任務。
21.哪些機器學習概念必須在Kaggle比賽中表現良好?
數據詢問/探索
數據轉換-預處理
掌握工具知識
熟悉度量和優化
交叉驗證
模型校正
集成
22.你如何看待數據科學家工作的未來?自動化會扼殺這份工作嗎?
不,我不這么認為。這就是他們過去曾說的自動化計算。但最終需要大量的開發人員來完成這項工作!數據科學家可能會專注于隨著時間的推移,將業務問題翻譯成ml問題,并且通常成為流程的指導者——如建模過程的經理/主管一樣。
23.如何在R和Python中使用整體建模來提高預測的準確性。 請引用一些現實生活中的例子?
你可以看我的github腳本,它解釋了不同的基于Kaggle比賽的機器學習方法。同時,核對集成指南。
Github:https://github.com/kaz-Anova/ensemble_amazon
集成指南:https://mlwave.com/kaggle-ensembling-guide/
24.什么是最好的python深度學習庫或文本分析框架?
我喜歡Keras(因為現在支持稀疏數據),Gensim(對于word 2 vec)。
25.在現實生活中,通過這些競賽獲得的知識有多大價值? 我經??吹酵ㄟ^合并許多模型贏得的比賽...這是現實生活中的情況嗎? 還是在真實的制作系統中解釋模型比這些龐大的組合更有價值?
在某些情況下,是的——可解釋或快速(或記憶效率)更重要。但隨著時間的推移,這將很可能改變,因為人們將不再害怕黑盒子解決方案,并專注于準確性。
26.我應該學習關于機器學習算法的核心,還是繼續嘗試形成對算法的理解并使用它們(在比賽中,并解決現實生活中的商業問題)?
你不需要核心。 每天都有出現的新東西——有時很難跟蹤它。 這就是為什么你應該專注于任何算法的正確使用,而不是投資于一個。
27.哪些是不平衡數據的最佳機器學習技術?
我在這里不做特別的處理。 這歸功于優化正確的度量(對我來說)。用幾句話來解釋很難。有很多技術的抽樣,但我從來沒有使用過。 有些人正在使用Smote。 我認為試圖更改目標變量的主分布是沒有價值的。你只是最終得到增加或改變主要幾率。 如果你真的想要一個界限來決定你是否應該采取行動 - 你可以根據主要幾率進行設置。
我可能不是最好的回答這個問題的人。我個人從來沒有發現它(顯著)有助于改變目標變量的分布或目標變量中的幾率的感知。可能只是其他算法在處理這個任務時比其他算法更好(例如基于樹的應用程序應該能夠處理這個)。
28.通常,營銷研究問題主要通過標準回歸技術來處理 - 線性和邏輯回歸,聚類,因子分析等。我的問題是機器學習和深度學習技巧/算法對營銷研究或業務問題有用嗎? 例如,如何解釋一個神經網絡的輸出到客戶端是有用的?有什么資源可以參考嗎?
它們在某種意義上是有用的,你可以很有可能提高準確度(在預測上我們說營銷反應)與線性模型(如回歸)。 解釋輸出是很困難的,在我看來,這不是必要的,因為我們一般都會走向更多的黑盒子和復雜的解決方案。
作為數據科學家,你應該努力確保有一種方法來測試一些不可觀察(測試)數據的結果有多好,而不是想了解為什么你得到的預測類型。 我認為從復雜模型中解壓縮信息是一個很好的話題(對研究有用),但是我不認為這是必要的。
另一方面,公司、人員、數據科學家、統計學家和一般可被歸類為“數據科學玩家”的任何人都需要接受教育,接受黑箱解決方案是完全正常的。 這可能需要一段時間,所以運行一些回歸以及你正在做的任何其他建模可能會很好,并且通常會嘗試提供說明圖和總結信息,以便為您的模型為什么執行此操作。
29.如何在Kaggle建立合作團隊?
你可以在論壇(即kaggle)中詢問。 在“人們可以信任你”之前,這可能需要幾場比賽。 原因是他們害怕復制的帳戶(違反競爭規則),所以人們更喜歡被證明是公平的人。 假設有一段時間過去了,你只需要想想你想玩的人,你認為你可以從中學習的人與可能和你采取不同的方法的人,所以你可以在組合方法時利用多樣性的好處。
30.我已經完成了基本的機器學習課程(理論)。現在我開始了我的實踐歷程。你剛剛推薦通過scikit learn文檔,現在人們都在說TENSORFLOW是下一個scikit learn,所以我應該通過scikit還是TF是一個不錯的選擇?
我不同意這個“人們在說TENSORFLOW是下一個scikit learn”的說法。 Tensorflow是一個完成某些機器學習任務(如深入學習)的框架。 我想你可以學習兩者,但我會從scikit開始。 我個人不知道TensorFlow,但是我使用的是基于張量流的工具(例如Keras)。
31.我在任何比賽中面臨的主要挑戰是清理數據,使其可用于預測模型。 你如何克服呢?
我加入了俱樂部! 一段時間后,你將創建可以相對較快處理這個的管道。 但是,你總是需要在這方面花時間。
32.如何在沒有強大的機器的情況下計算大數據?
你應該考慮一些如vowpal wabbit和在線解決方案的工具,可以逐一解析所有內容。 你需要在編程方面投入更多資源。
33.什么是特征工程?
簡而言之,特征工程可以理解為:
特征變換(例如將數字或分類變量轉換為其他類型)
特征選擇
利用特征交互(比如我應該把變量A和變量B結合起來)
處理空值
處理異常值
34.哪些數學技能在機器學習中很重要?
一些基本概率以及線性代數(例如向量)。 然后一些統計數據也有幫助。 像平均值、頻率、標準偏差等。
35.可以分享你以前的解決方案嗎?
看一些代碼和一些沒有(只是一般的方法)。
https://www.kaggle.com/c/malware-classification/discussion/13863
http://blog.kaggle.com/2015/05/11/microsoft-malware-winners-interview-2nd-place-gert-marios-aka-kazanova/
https://github.com/kaz-Anova/ensemble_amazon
http://blog.kaggle.com/2015/12/03/dato-winners-interview-1st-place-mad-professors/
http://blog.kaggle.com/2016/04/08/homesite-quote-conversion-winners-write-up-1st-place-kazanova-faron-clobber/
https://mlwave.com/how-we-won-3rd-prize-in-crowdanalytix-copd-competition/
http://blog.kaggle.com/2016/08/31/avito-duplicate-ads-detection-winners-interview-2nd-place-team-the-quants-mikel-peter-marios-sonny/
http://blog.kaggle.com/2016/12/15/bosch-production-line-performance-competition-winners-interview-3rd-place-team-data-property-avengers-darragh-marios-mathias-stanislav/
36.你需要多長時間來建立你的第一個機器學習預測器?
取決于問題(大小、復雜性、特征數量)。一般來說,一開始你可能會花費很多時間在稍后可以考慮的事情上。 考慮到編程,背景或其他經驗,每個人的時間可能會有所不同。
37.你可以推薦一些知識競賽嗎,不一定在水平上競爭如kaggle但是可以為你的技能打基礎?
titanic和數字識別器都是很好的比賽來開始。titanic更好,因為它假定一個平面文件。 數字識別器用于圖像分類,因此可能會更先進。
網址:https://www.kaggle.com/competitions
38.你對于使用Weka或R 和Python來學習機器學習有什么看法?
我喜歡Weka。它有一個很好的文檔——特別是如果你想學習算法。 不過我不得不承認,它不像R和Python的一些實現一樣有效。 它有很好的覆蓋。 Weka也有一些很好的可視化——特別是對于一些基于樹的算法。 我可能會建議你把重點放在R和Python,除非你的背景完全是使用Java。
概要
簡而言之,機器學習競賽成功的關鍵在于學習新事物,花費大量的時間訓練,特征工程和驗證模型。 除此之外,在論壇上與社區進行互動,閱讀博客并從其他競爭對手的方法中學習。
文章為簡譯,更為詳細的內容,請查看原文
http://blog.hackerearth.com/winning-tips-machine-learning-competitions-kazanova-current-kaggle-3?spm=5176.100239.blogcont73755.33.QZnFef