数据科学竞赛经验分享:你从未见过的究极进化秘笈
作者:?David K(來自知乎)
排版:杰少,kaggle競賽寶典小編
“聽過很多道理,卻依然過不好一生;看過很多分享,卻依然做不好比賽。”
如今,數據科學競賽(大數據競賽,機器學習競賽,人工智能算法競賽)已經成為各大知名互聯網企業征集解決方案和選拔人才的第一選擇,很多同學為了拿到大廠offer,紛紛加入了數據競賽的浪潮之中。遺憾的是,大部分同學都在激烈的競爭中成為炮灰,許多人不停地上網瀏覽各類競賽開源分享,卻依舊感到困惑迷茫。
在過去幾年時間內,筆者靠著個人天賦和不懈努力,從0到1地走通了數據科學競賽方法論,培養了一直數據科學競賽的團隊,并作為隊長率多名選手參與了近20次數據科學競賽,獲得前5名5次,前10名8次,賽題方向包括金融、交通、信息安全、廣告推薦、運籌優化等。考慮到近幾年在數據科學競賽里取得的豐厚的成果,我將自己的獨門秘笈進行了詳細總結并開源之,希望可以幫助更多同學快速上手相關比賽。
我認為這份競賽秘笈與市面上流傳的各種競賽分享相比,更real,更direct,更cunning。如果你想快速成為競賽高手,這份文檔是你必須要認真研究的參考資料。
下面,我將從三個方面來詳細介紹數據科學競賽,然后在結尾處談一點個人的感悟。建議不熟悉機器學習建模套路的同學先搞清楚流程,熟悉建模套路的同學,直接看經驗干貨即可。
目錄
一、數據科學家競賽是什么?
二、為什么要做數據科學競賽?
三、怎樣做數據科學競賽?
3.1 武器庫
3.2 賽題分析
3.3 數據探索
3.3.1 數據整體認知
3.3.2 數據質量分析
3.3.3 數據統計量分析
3.3.4 數據分布分析
3.3.5 數據探索小結
3.4 特征工程
3.4.1 數據預處理
3.4.2 特征構造
3.4.2.1 思想方法
3.4.2.2 特征構造舉例
3.4.2.3 特征構造 注意事項
3.4.3 特征選擇
3.4.4 特征工程總結
3.5 模型選擇
3.6 模型優化
3.6.1 評估方法
3.6.2 性能度量
3.6.3 參數調整
3.7 模型融合
3.8 迭代策略
3.9 其他
四、總結
一、數據科學競賽是什么?
數據科學競賽是由企業或者研究機構通過競賽平臺發布商業和科研難題,通過高額獎金的懸賞,吸引全球的數據科學家參與,利用眾包方式解決建模問題的一種游戲。這個游戲本質上就是一種打擂臺的玩法,符合各種有限游戲的規則設計,不過你同時要與成百上千的人PK。
數據科學競賽一般通過各類數據競賽平臺進行發布,最著名的數據科學競賽平臺是Kaggle和天池,Kaggle的背后是Google,天池的背后是阿里巴巴。當然,還有很多公司自己組織的比賽和頂級學術會議籌辦的比賽。如果你想做比賽的話,去下面這些平臺上尋找適合自己的比賽即可:
Kaggle,天池
京東智匯平臺,DataFountain,DataCastle,科賽網,創新工場AIChallenger等
騰訊,滴滴出行,第四范式,中國平安,融360,中國農業銀行等
SIGKDD,ICDM,CIKM,IJCAI等
二、為什么要做數據科學競賽?
第一,讓你100%清楚哪些算法在實際應用中更有效。解釋一下,這里的“有效”包括算法的性能和效率。現在很多人往往是看過了周志華的西瓜書,就覺得自己懂機器學習了,這是很可笑的。最典型的例子就是很多人覺得SVM是最好用的分類器。包括很多發過會議論文的同學,其實也是停留在理論的烏托邦,而且論文的results部分有多real也很難判斷。做比賽你可以拿到工業界的數據,而且這些數據都是頭部互聯網大廠的實際業務數據,所以在實戰的過程中,我們可以逐漸井底之蛙蛻變為翱翔在天空的雄鷹,很清楚地知道哪些算法好用,哪些方法靠譜,哪些人在吹逼和忽悠。
第二,結識朋友,提升人脈。做比賽時如果你運氣比較好,可以和優秀的同學組隊,當然前提是你自己足夠牛逼。另外,如果你拿到了某個競賽top5或top10,你的team有可能被邀請去參加線下的答辯,這絕對是認識技術大牛,提升人脈的好機會。比如筆者就去過像阿里云、京東、滴滴、馬上金融,中國平安、中國農業銀行這樣的單位參與線下答辯,在緊張的答辯之余,利用吃吃喝喝的時間進行social,運氣好的話,你還能加到某些公司中高級管理者的微信。截止目前,國內競賽圈一半以上的頭部大佬都是我的朋友,有些還在一起玩比賽、做課題。
第三,訓練和提高自己快速寫代碼的能力。要知道每場比賽你要在短時間內實現很多很多的idea,有時候一天之內你要想出三到四個上分的辦法。這個過程講究的是速戰速決,不僅可以訓練自己快速寫代碼和實現idea的能力,也可以很好地訓練你的判斷力和決策能力。
第四,實習機會 & 高薪工作。像我之前就拿到過多家大廠的直通終面機會。統計了一下跟我做過比賽的學弟學妹的工作情況,目前大部分就職于知名國企和互聯網企業,比如阿里、騰訊、京東、滴滴、美團、中國農業銀行、中國交通建設股份有限公司、中國人壽資產管理有限公司、一汽大眾等等。
第五,獎金。一般的比賽都會有獎金,不給錢的比賽就別做了,那種比賽除了練手,沒有任何價值可言。錢是體現賽題困難程度的重要指標。具體的錢數,最少1萬起,多則稅前30萬到50萬。但悲哀的是,獎金一般人是拿不到的,因為任何一個圈子都是1%的人賺走了99%的利潤,小白們只能跟著長點見識,苦逼陪跑。
三、怎樣做數據科學競賽?
3.1 武器庫
俗話說,臺上一分鐘、臺下十年功。雖然參加數據科學競賽不需要十年的修煉,但還是需要一些基礎的知識技能作為支撐的,我講以下幾個方面。
基礎知識
數學基礎:微積分、線性代數、概率論與數理統計、優化理論
機器學習理論:周志華《機器學習》、李航《統計機器學習》、Ian Goodfellow和Youshua Bengo《Deep Learning》、Bishop的PRML
目前國內大大小小的課程和博客都在講周志華的西瓜書和李航的書,但這里我想補充一點個人的看法:
我認為我看過的最好的講傳統機器學習理論的書籍是K. P. Murphy的《Machine learning: A Probabilistic Perspective》,其次是Bishop的PRML
另外,臺大李宏毅老師的網課,真的是十分良心,建議大家去B站學習
Python:《Python基礎教程》《利用Python進行數據分析》《機器學習實戰》
文獻資料
Paper
主要關注CCF A里的頂級會議論文
arxiv要好好利用
Csdn、知乎、GitHub等開源知識分享平臺
Kaggle、天池里的各種kernel
軟件配置
開發環境
Anaconda
Jupyter Notebook
Pycharm
雖然Jupyter Notebook的交互性更好,但個人更喜歡用Pycharm
開源庫
數據處理包:Numpy Scipy Matplotlib Pandas等
機器學習包:Sklearn XGBoost LightGBM Keras TensorFlow Pytorch等
硬件配置
高性能PC:
強推Macbook Pro,資金不足的話可以自己搭Linux。這個時代Windows也可以了其實,但用起來總有些地方讓你不爽。
早年很多關鍵的包比如lightgbm不支持Windows,筆者也是畫了一兩個月的時間才熟悉了Linux,用熟了還是很順滑的
服務器
注:現在越來越多的比賽平臺提供運算資源了,但除非是必須,能不用就不用,因為大家一起搶資源導致寫了代碼不能跑的滋味真的很酸爽
關于以上這些知識技術儲備,我建議大家不要一直看書,計算機科學和機器學習的相關應用都是實踐性很強的項目。任何一門有關編程語言的教材,看一周的時間足夠了。關鍵在于動手實踐,做項目做比賽,也就是任務驅動型學習。關于編程我還想說一個原則,就是“天下文章一大抄,看你會抄不會抄”。在做一個任務時,你的代碼能復制粘貼就不要自己敲。這些年我見過很多喜歡耍小聰明的同學,試圖通過自主實現一些算法來證明自己的智商。這其實是一種十分幼稚的心理,編程本質上是一個結果導向十分明顯的活動,解決問題遠比證明你自己有多么優秀更重要。
除了以上這些武器之外,你還需要知道做比賽的流程。參與一個數據科學競賽,大致需要這么幾個步驟:賽題分析,數據探索,數據預處理,特征構造,特征選擇,模型選擇,模型優化,模型融合,預測提交。其中數據預處理、特征構造、特征選擇合起來可以稱之為特征工程。然后,還需要一個有效的迭代策略來管理你的idea和代碼。做比賽之前一定要將此流程牢記于心并一步一步地進行,下面就讓我為大家介紹圖中的每一步具體是如何操作的。
3.2 賽題分析
在我看來啊,賽題分析其實是在解決戰略層面的問題,這一塊其實是非常重要的,但市面上的很多開源的經驗分享往往有意回避這一塊內容,只談各種具體的方法和技巧。殊不知,真正做成一件事,不僅需要“術”,還需要“道”,但可惜的是,懂“道”的人實在是不多。為了讓大家更好地理解數據科學競賽中的“道”,我將賽題分析部分總結為以下這些內容,包括對賽題背景的理解,對重要時間的把握,組隊的規則,評測機會的多少,以及對賽方提供訓練數據的理解。
關于賽題背景。你需要仔細閱讀官方給出的賽題背景,然后查閱相關資料,對問題場景做深入的理解。因為對于我們這些學生來講,我們可能對機器學習和數據挖掘的理論知識掌握的很好,但缺乏對具體的問題場景理解。這就好比你只會做算術題卻不會做應用題。希望大家記住一句話,解決問題的第一步是認識問題。你只有把問題背景認識清楚,看清出題者的動機,才有可能在比賽中取得好成績。
關于重要時間。一個數據科學競賽一般要持續兩到三個月甚至更長的時間,你在這么長的時間內肯定還會有其他的事情要做,所以時間管理是很重要的。所以要根據賽方給出的重要時間節點(包括初賽開始時間、組隊完成時間、復賽開始時間、復賽結束時間、線下答辯時間),規劃好比賽與其他工作的時間安排。這里要插一句,其實并行工作是很難的,也是很扯淡的。如果你想取的好成績,還是需要專注在一件事上。
關于組隊規則。你一定要想清楚和什么樣的人組隊。我真心想告訴大家的一句話是,不怕神一樣的對手,就怕豬一樣的隊友。這句話什么意思大家應該很清楚了。希望大家不拒絕豬隊友,也不要當豬隊友坑別人。還有一點就是,搞清楚這個比賽能不能利用小號。每多一個小號,意味著多一倍的評測機會。你的評測機會越多,你上分的可能性越大。因此,每場比賽都會有很多人拿不同的手機號去注冊競賽平臺的賬號以求增加自己的評測機會,排行榜上也存在大量的小號。有時候你雖然線上測評的分數在提高,但名次依然再下降,這時候不要灰心,說不定是前排大佬的小號把你踢了下來。
關于評測機會。搞清楚每天有幾次評測機會、幾點開始評測。較大的比賽受限于計算資源,每天只有一次評測機會,這種情況下還是得好好做線下的測試,珍惜每一次提交的機會。同時,基于評測次數,設計每天的模型迭代策略。另外要注意的是,評測次數多不一定是好事,因為次數多了之后對自己有利,但對手也有利。所以在同樣的游戲規則下,如何充分利用各方面的條件提高自己的排名,的確是個需要你認真琢磨的事情。
關于賽題數據。你需要搞清楚,賽方提供了什么數據?要解決的問題:分類問題 or 回歸問題?用什么軟件工具:個人PC or 官方計算平臺?提交什么樣的結果?也就是結果的數據格式要求。我在剛剛做比賽的時候經常出現因為提交數據文件格式不正確而浪費評測機會。
3.3 數據探索
主要包括四個方面:數據整體認知、數據質量分析、數據統計量分析、數據分布分析
3.3.1 數據整體認知
所謂的整體認知就是,研究訓練集、測試集、表數、記錄數、用戶數、變量數、變量類型、變量屬性值、標簽等內容,然后繪制實體-關系圖。實體-關系圖(E-R圖)包括三個組成部分:實體、屬性、關系。學過數據庫的同學應該熟悉E-R圖這個概念。
比如我在做IJCAI2018阿里媽媽國際廣告算法大賽時,就繪制了如下圖的實體關系圖來幫助我們理解數據。
把這個圖畫出來之后,對每個屬性變量,施以哲學中的三大靈魂拷問:
你是誰?
你從哪兒來?
你要到哪里去?
也就是搞清楚每一個變量包含了什么信息,搞清楚它的來龍去脈,搞清楚變量和變量之間的關系。通過這個過程,讓你對整個問題背景和原始數據有一個深入地了解,為后續工作做準備。
3.3.2 數據質量分析
所謂數據質量分析,就是分析數據的缺失值、重復值、異常值、歧義值、正負樣本比例(樣本不平衡)等特性。由于這些東西都會影響到模型的學習效果,所以在后面做數據預處理時需要做相應的工作。
圖片來自網絡3.3.3 數據統計量分析
數據統計量分析主要分為三塊:
第一,對單個變量的統計分析。比如考察單個變量的均值、中位數、眾數、分位數、方差、變異系數等。常用的工具有:直方圖、箱線圖、小提琴圖等。
第二,對兩個變量的統計分析。這里主要考察的是兩個變量統計分布之間的關系。常用的工具包括散點圖、相關性分析圖、熱力圖等。
第三,對多個變量的統計分析。可以使用彩色的散點圖,或者RadViz(詳見scikit-yb.org/en/latest)。
圖片來自網絡3.3.4 數據分布分析
數據分布分析指的是考察某個字段或某些字段的統計分布。包括頻數、時間、空間三個方面。
頻數統計。用概率論的語言講叫累積分布函數CDF。比如在IJCAI2018阿里媽媽國際廣告算法大賽中,我們就統計了不同點擊次數下各有多少用戶。基于類似的累積分布函數圖我們就可以知道用戶行為的分布情況,進而可以幫助我們充分理解數據。
時間維度上的統計分布。我們可以觀察事件發生的趨勢和周期性,這里會涉及不少時間序列的知識。比如下圖所示的“每天的點擊數趨勢”,就是在時間維度上考察點擊數的變化情況。
空間維度上的統計分布,我們可以尋找某個變量在地理位置上的相關關系。比如2020年以來我們十分熟悉的疫情地圖,就是一種空間上的分布分析。
另外,以上三種分析常常結合分組or聚類方法,對細分的業務場景進行考察,為后面的數據建模做鋪墊。
3.3.5 數據探索小結
對于數據探索,我總結了幾個需要牢記在心的關鍵點,分別是:對比,分組,頻數,抓大放小和可視化。
所謂對比,指的是在做數據探索時,考慮對比訓練集不同樣本之間的特征分布,還要考慮對比訓練集和測試集中每一個特征的分布。
所謂分組,就是在做數據探索時,常常用到按類別標簽、某個離散變量的不同取值groupby后的sum、unique。
所謂頻數,就是要注意考察并自行計算某些變量的概率累積分布。諸如“事件發生次數”這樣的的統計量需要自己計算;有時還要關注“同id下某個事件多次發生”的統計。
所謂抓大放小,就是對于那些特征重要性較高的變量,要做重點分析。因為這些變量對你模型預測能力的影響是較大的。
所謂可視化,就是建議大家在做數據探索的時候多畫圖(尤其是各種趨勢圖、分布圖),圖形給人的沖擊力往往是要大于數字本身的。
3.4 特征工程
下面我們來講特征工程。這也是做數據競賽時最重要的一項內容。
首先說一下為什么要做特征工程。
在我們解決一個機器學習問題時,輸入機器學習模型的數據必須是標準的向量形式。但當我們處理現實世界的數據時,數據并不會以格式規范的特征向量的形式呈現在我們面前。相反,呈現給我們的數據是數據庫記錄、時間序列、圖像、音頻、文字等形式,同時還存著在大量的噪聲數據。所以我們需要一定的方法把非結構化的數據轉化為結構化的數據。
結合維基百科,我給特征和特征工程做了如下定義:
特征:An variable useful for your modeling task,which describe/represent our data
特征工程:A process of using domain knowledge, techniques, experiences or even tricks to create features that make machine learning algorithms work well.
為了說明特征工程的重要性,這里聚一個小例子。下圖中有一些藍色的點和一些綠色的點,在直角坐標系下它們的分布如左圖所示,肉眼看上去,它們顯然是屬于兩個類別,但是如果你想用一個機器學習的線性分類器去做分類的話是很困難的。但是你把這些點轉移到極坐標系下,它們就可以很容易用一個線性分類器做分類了。從這個地方我們就能看出數據的表示方式對機器學習模型的效果的影響還是很大的。
圖片來自Yoshua Bengio《Deep Learning》我希望大家記住一點,就是在解決一個機器學習問題時,最關鍵的就是去研究如何表示你的樣本,而特征工程解決的就是representation的問題,Feature engineering is a?representation?problem。這里把傳統的軟件開發和機器學習項目做一個簡單的比較:在編程開發項目中,很關鍵的地方在于如何優化你的代碼;而在機器學習項目中,關注點變成了表示。也就是說,開發者通過添加和改善特征來調整模型。
所以,這也是我們圈內經常說的,“數據和特征決定了機器學習的上限,而模型和算法只能去逼近這個上限”。我希望大家應該牢牢地記住這句話。不管是做機器學習的比賽還是實際的項目,特征工程都是最最重要的一部分。這里引用了兩句英文來進一步證明這個道理:
Coming up with features is difficult, time-consuming, requires expert knowledge. "Applied machine learning" is basically feature engineering.—?吳恩達Andrew Ng, Machine Learning and AI via Brain simulations
“...some machine learning projects succeed and some fail. What makes thedifference? Easily the most important factor is the features used.”
—《終極算法:機器學習和人工智能如何重塑世界》作者 Pedro Domingos
我將特征工程分為三個部分,分別是數據預處理、特征構造和特征選擇。下面分別介紹這些內容。
3.4.1 數據預處理
首先來說一下為什么要做數據預處理。首先,考慮到海量原始數據中存在大量信息缺失、不一致、冗余值、異常值等,會影響我們模型的學習效果。另外,在用各種模型算法時也要牢記監督學習的假設,即正負樣本要平衡且訓練集和測試集樣本是獨立同分布的。第三,在模型訓練時,數據規范化的操作可以讓梯度下降算法收斂得更快,也就是更快地找到最優超參數。
傳統意義上的數據預處理一般包括數據清洗、數據集成、數據重采樣、數據變換(特征編碼)和數據規范化(特征縮放),這一塊的內容也是網絡上流傳最廣、介紹最多的數據分析技巧,因此我不做具體的解釋,僅僅把各自常用的處理技巧羅列一下。
數據清洗
缺失值插補
均值、中位數、眾數插補
固定值插補
最近鄰插補
離群值
直接刪除
替換法
異常、冗余值
直接刪除
小技巧:用訓練集數據學習一個模型,然后用它預測訓練集的標簽,刪除預測結果偏差較大的樣本
數據集成
多表數據整合
一對一
一對多
多對一
多對多
數據重采樣
滑窗法:
對于時間序列數據,選取不同的時間窗間隔,可以得到多份訓練數據集
該方法可以增加訓練樣本,也方便做交叉驗證實驗
非平衡重采樣:調整正負樣本量
欠采樣
過采樣
組合采樣
數據變換
連續變量離散化(分箱)
等頻
等寬
聚類
離散變量編碼
One-hot Encoding
Label Encoding
長尾分布
Ln、Log
數據規范化
Min-Max
Z-score
MaxAbs
網絡上羅列的這些方法,如何更高效地使用,詳見t.zsxq.com/IMfe2vB。
3.4.2 特征構造
在一個機器學習比賽中,很多的有效特征都不是直接給出的,需要自己去挖掘。不要以為實際中的訓練數據都像UCI開源的數據集那樣簡單直接好用。
我把基于對原始數據的數據探索,不斷構造新特征的過程定義為特征構造(Feature Construction)。在這個過程中,你需要深入了解場景知識,并做大量開腦洞的工作。但僅憑開腦洞和無腦地堆砌并不能真正解決問題,如果你想構造出具有可解釋性且豐富的特征,需要一套思想方法。
在此我給出一種特征構造的思想方法,希望能給大家一定的啟發。
3.4.2.1 思想方法
理解字段
抽取實體
分析實體關系
設計特征群
按特征群分別構造特征
考察特征群關系,進一步構造新特征
3.4.2.2 特征構造舉例
t.zsxq.com/IMfe2vB
3.4.2.3 特征構造 注意事項
t.zsxq.com/IMfe2vB
3.4.3 特征選擇
前面你構造了很多特征,但這些特征不一定都是有用的,需要用特征選擇的辦法把有用的特征選出來。Feature selection is a process that chooses an optimal subset of features。特征選擇可以幫你篩選有效特征,消除冗余信息,提高訓練效率,避免模型發生過擬合。
常用的特征選擇方法如下圖所示:
我一直覺得特征選擇是那種爛大街的知識。可問題是,這些方法都要用嗎?哪個好用?哪個效率最高?t.zsxq.com/IMfe2vB
3.4.4 特征工程總結
這樣整個特征工程部分就講完了。我最后想提醒大家,在數據科學競賽中,特征工程是一個需要不斷迭代測試的過程,也就是說,數據探索、數據預處理、特征工程要反復多次進行。所以,一定要把75%以上的時間放在特征工程的工作上。
3.5 模型選擇
我知道每個機器學習小白在做比賽前都把周志華的西瓜書和李航的《統計機器學習》翻了一遍又一遍。那我想問大家一個問題:書上講的算法模型,比如LR,GLM,SVM,KNN,NN,Tree,RF,Adaboost,在機器學習比賽中,到底用什么,哪個好用,哪個效率最高?
答:都不用!!!!!!!!
我想這個答案可能有點出乎大家的意料吧。畢竟大家學了大半學期的機器學習,都是在講這些玩意兒的原理。你是不是忽然覺得有些迷茫了呢?自己學了大半學期的書本竟然像垃圾一樣沒用。
然后我想告訴大家,數據科學競賽的模型大殺器是:基于決策樹的集成學習模型,例如LightGBM、XGBoost、CatBoost等。
從好用程度上來看:LightGBM > XGBoost > CatBoost。你甚至可以只用LightGBM來學習你的訓練數據。
下面我想解釋兩個問題:
一,為什么梯度提升樹打數據挖掘競賽優勢明顯?
看一個機器學習模型的開源工具好不好用,主要是看訓練效率和學習能力的trade-off。像LightGBM這樣的模型,訓練速度快,效率高,還支持并行和GPU計算;同時能夠處理大規模的數據,算法的學習能力更強,預測精確度高。
二、為什么深度學習模型打數據挖掘競賽優勢不大?
在此引用吳恩達老師在Coursera公開課中的一張圖。
該圖橫軸表示的是訓練數據的條數,縱軸顯示的是多種模型的學習效果。從這個圖可以看出,當你的數據規模比較小時,深度學習模型的效果甚至還不如普通的機器學習模型。所謂的數據規模比較小,我給一個判斷標準:2000萬訓練樣本。也就是說,沒有兩千萬的訓練樣本,深度學習模型根本無法施展它的威力。所以在傳統的機器學習比賽中,我們還是用lightGBM這種集成樹,簡單粗暴卻又威力無窮。
3.6 模型優化
模型優化主要分為三塊,在此以一個思維導圖呈現:
3.6.1 評估方法
周志華老師的西瓜書中討論了三種模型優化的方法,分別是留出法,自助法和交叉驗證法。在我看來這也屬于爛大街的知識。還是老問題,在打比賽時,我們應該如何使用這些方法,有哪些關鍵性的技巧?這里有幾條經驗跟大家分享。
K折交叉驗證法來點干貨:
比賽中最常用的模型評估方法是留出法和K折交叉驗證法。
t.zsxq.com/IMfe2vB
3.6.2 性能度量
在比賽中常見的指標(性能度量)包括AUC、Logloss、K-S、F1、Kappa系數等,這些指標都是綜合考量模型對正類和負類的預測能力,更具有說服力。
來點干貨:
線下測試時,應多使用幾種指標,單刷賽題給定的指標容易發生過擬合
如果幾個指標同時上漲,則可以證明你的特征&模型取得了實質性的改進
針對賽題使用的性能度量指標,推導其數學原理,思考特殊的優化策略
3.6.3 參數調整
主要方法:
網格搜索(Grid Search)
貝葉斯優化(Bayesian Optimization)
啟發式算法(Heuristic Algorithms,如GA、模擬退火,PSO)
工具包:Hyperopt等
關于調參我實在不想講太多東西,雖然網上這一塊可能扯的很多。但一般扯的越多的東西,一般都是扯淡。事實上,用一用網格搜索就足夠了。
來點干貨:t.zsxq.com/IMfe2vB
3.7 模型融合
所謂的模型融合,主要是指對不同子模型的預測結果的融合。江湖上有人說,“Feature決定了模型效果的上限,而ensemble就是讓你更接近這個上限”。
模型融合的方法網上有很多,在此我簡單羅列一下。
方法:
簡單加權平均:0.5*result_1+0.5*result_2
Bagging:對訓練集隨機采樣,訓練不同的base model,然后投票;可以減少方差,提升模型的穩定性(隨機森林就是這個原理)
Boosting:弱分類器提升為強分類器,并做模型的加權融合;可以減少學習誤差,但容易過擬合
Blending:拆分訓練集,使用不重疊或者部分重疊的數據訓練不同的base model,然后分別預測test數據,并加權融合(這是個好辦法)
Stacking:網上講的很多,但極易造成過擬合,尤其是數據量小時過擬合嚴重,不建議使用
其實網上的資料總會給你各種誤導,所以我想直接講干貨,告訴你如何更高效地用這些方法。
t.zsxq.com/IMfe2vB
3.8 迭代策略
t.zsxq.com/IMfe2vB
每日結果提交記錄表3.9 其他
還有一些內容是我想強調的,這些東西依然是戰略層面的。不得不說,它們對你很重要。
第一,做比賽的第一步是完成一個從0到1的原型設計。這是一種原型思維。也就是說,你要先做出一版能提交的結果,并提交成功。走完這一步,你才算剛剛上路。做任何事,完成從0到1的過程都是最重要的。
第二,一定保證自己的代碼是正確的,所謂正確指的是,正確地表達了你的idea而不僅僅是沒有語法邏輯bug。這一點也是小白常常犯的錯誤。
第三,寫一個較為自動化的、高效率的代碼框架。在數據預處理的部分,一定要少用暴力的for循環。一個入門級的baseline在這里:github.com/yzkang/My-Da,大家可以直接基于此代碼做特征工程即可。
第四,關于時間和精力的分配。做比賽是一件很辛苦的事情,每天壓力很大,常常晝夜顛倒,沒日沒夜地寫代碼。所以,一定要善于抓住主要矛盾。數據探索+特征工程的部分要分配75%的時間和精力。模型優化及調參占15%,模型融合占10%。另外,珍惜你的每一次提交機會。
第五,在閑暇時間,及時更新你的武器庫,多閱讀開源經驗分享,多跟大佬們請教和學習。當然,大佬們都很忙,付費買時間是最佳的方式。
四、總結
最后我想談一談自己這幾年做比賽、做項目、做論文、做團隊的一點收獲,希望大家批評指正。
首先,我認為不管是在學校做事情還是在公司做事情,結果導向、以終為始是十分重要的思維方式。牢記鄧公所講的黑貓白貓論,通過不斷地磨練讓自己成為一只好貓。當然,這種思維方式可能不太適合體制內的工作人員。
其次,編程的目的不是秀自己的智商,而是蓋一棟房子,解決一個問題,實現一個目標。所以不重復造輪子是很重要的,我一直堅持的一個觀點是,能抄別人的代碼堅決不自己寫,不到萬不得已堅決不自己寫。我們的手機,每個零件都有專門的廠家進行加工,編程做比賽也是一個道理。如果華為不購買別人家的芯片,一百年也造不出一個手機。通過借鑒吸收別人的經驗成果,安全避坑,高效率地完成自己的目標,才是快速創造價值的真諦。
第三,很多事情都是實踐出真知。就拿編程來講,你把編程語言的課本翻爛也學不會編程。機器學習的理論學的再好,你依然不會解決實際問題。很多工科性質的知識,你看過但沒有用過,跟沒看過一樣。如果你是工科生,一定要注意多動手,多實踐。
第四,有競爭的地方就有江湖。在江湖上混,打鐵還需自身硬。希望你知道,優秀的人只會和優秀的人合作,想升級你做事的圈子,先把自己搞成相對優秀的人。世界上絕大多數的合作都是強強聯合。
第五,靠天賦、努力還是運氣?我認為做比賽最需要的是強烈的興趣和自我驅動力,和智商的高低其實沒有太大關系。一個比賽,你想做到Top50,我猜用這份資料講述的經驗應該足夠了。你想做到Top10,需要堅持不懈的努力。你想做到Top5,多多少少還是需要一點運氣的,畢竟在一個比賽的最后幾天,提交機會相對越來越少,怎么把握這些提交機會,還是需要你與生俱來的判斷力。
最后,送給大家一句話吧:勝利后的復盤可能非常精彩,但實現的過程則枯燥而艱難。
祝大家都能在數據科學競賽中取得好成績!
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 獲取本站知識星球優惠券,復制鏈接直接打開: https://t.zsxq.com/qFiUFMV 本站qq群704220115。加入微信群請掃碼:總結
以上是生活随笔為你收集整理的数据科学竞赛经验分享:你从未见过的究极进化秘笈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 已发送邮件如何撤回
- 下一篇: 实现对手机联系人列表进行读写操作,并用R