运用神经网络方法找寻集成学习中的最优权重
眾所周知,如今在眾多數(shù)據(jù)科學競賽中的獲獎方案中,使用集成學習算法已然成為了家常便飯。集成學習獨有的依據(jù)一系列假設對大量機器學習算法進行訓練的能力,不僅增加了模型的穩(wěn)定性,同時也使得模型的精確程度得到了較高的提升。在此之前,如果你對集成學習還是沒有什么印象的話,之前推送的文章《關于集成學習基礎的簡單描述》或許會對你有所幫助。
話說回來,在構建集成模型時,如何找到最佳的權重往往是人們面臨的常見挑戰(zhàn)之一。說實話,并沒有多少人會去真正直面這樣的挑戰(zhàn),那些勇氣不足的數(shù)據(jù)工作者們經(jīng)常會說服自己去使用簡單的套袋方法,也就是賦予所有學習算法相同的權重,并將平均預測值作為模型的最終結果。
這么做的效果通常來說也很不錯,因為等權平均的方法同樣能夠減少單個模型所帶來的方差。然而,我們都知道,分配相等的權重往往并不是獲得最佳模型組合的最好方法,那么問題就來了,我們到底該怎么做?在本文中,我們將基于R語言中的神經(jīng)網(wǎng)絡相關功能,為您找到在集成模型中確定最佳權重的可行方法。
先來考慮一個簡單的問題
現(xiàn)在我們假設你已經(jīng)基于一個給定的(假想的)數(shù)據(jù)集構建了三個模型,每一個模型都具有預測目標事件發(fā)生概率的能力。在下圖中:Model 1, Model 2和Model 3分別表示我們構建的三個預測模型,它們各有所長,但“團隊合作”將會更好地優(yōu)化它們的預測表現(xiàn)。
我們之前的假設是賦予每個模型33.33%的權重,并由此構建一個集成模型。而在這里,我們面臨的挑戰(zhàn)將是最優(yōu)化模型的權重w1,w2和w3,從而建立一個更加高效強大的集成模型。
解決這一問題的傳統(tǒng)途徑是什么?
假設P1,P2和P3為三個模型的三個輸出。我們需要以最優(yōu)化目標函數(shù)的形式來得到最優(yōu)化的W1,W2和W3。讓我們試著用數(shù)理的方法來表示約束和目標函數(shù):
約束:
w1 + w2 + w3 = 1
p = w1 * p1 + w2 * p2 + w3 * p3
目標函數(shù)(極大似然函數(shù)):
Maximize ([?(p) ^ (y) * (1-p) ^ (1-y)?]對于所有觀測樣本的乘積)?
其中, y:觀測的目標反應 p:通過集成模型得到的預測概率 p1,p2,p3 : 單個模型得到的預測概率 w1,w2,w3 : 各個模型所對應的權重上述的是一個經(jīng)典的純優(yōu)化方法。然而,當我們需要對大量模型進行套袋,并且每次都用數(shù)學公式來對它進行表達與運算時,往往會導致巨大的工作壓力和時間上的消耗。因此,我們需要一個更聰明的方法。
接下來,我們將嘗試著改變一下確定這些權重的方式,運用神經(jīng)網(wǎng)絡方法而非那些繁瑣的數(shù)學公式。
如何運用神經(jīng)網(wǎng)絡來實現(xiàn)權重的最優(yōu)化?
我明白,要完全弄懂神經(jīng)網(wǎng)絡的實施原理有時會很復雜。因此,為了解決本文中迫在眉睫的問題,我們不會去深入鉆研深層神經(jīng)網(wǎng)絡的那些復雜概念。
從最基本的方面來說,神經(jīng)網(wǎng)絡方法就是在尋找相鄰點之間的權重(輸入變量到隱藏節(jié)點和隱藏節(jié)點到輸出節(jié)點)。而此時,我們的目標則是要找到從輸入節(jié)點直接到輸出節(jié)點的正確權重組合,這似乎和神經(jīng)網(wǎng)絡的初衷不太一樣。
我們用一個簡單但是實用的方法來解決這個問題:我們將神經(jīng)網(wǎng)絡中隱藏節(jié)點的個數(shù)限制為1,這將使得隱藏節(jié)點到輸出節(jié)點的權重被自動調(diào)整為1。這也意味著,神經(jīng)網(wǎng)絡中的隱藏節(jié)點和輸出節(jié)點不再是不同的,如下圖所示:
就這樣,我們找到了一個方法——借助計算機編程,需要我們進行大量人工計算的數(shù)學方程將由計算機自動完成,相關的R代碼如下:
#x is a matrix of multiple predictions coming from different learners #y is a vector of all output flags #x_test is a matrix of multiple predictions on an unseen sample x <- as.matrix(prediction_table) y <- as.numeric(output_flags) nn <- dbn.dnn.train(x,y,hidden = c(1), activationfun = "sigm",learningrate = 0.2,momentum = 0.8) nn_predict <- n.predict(nn,x) nn_predict_test <- n.predict(nn,x_test)結束語
筆者曾經(jīng)將上述最優(yōu)權重確定的邏輯運用到Kaggle數(shù)據(jù)建模競賽中的很多問題里,并且得到了一系列令人欣喜的好結果,下列是在近期競賽中的該方法獲得的成績:簡易邏輯模型的評分為100,最佳機器學習模型的評分為107,簡易套袋技術最終獲得了110的評分,而利用神經(jīng)網(wǎng)絡優(yōu)化模型權重則得到了113的高分。
在這篇文章中,筆者解釋了在集合模型中找到最佳的權重的方法,傳統(tǒng)的方法很經(jīng)典,但更受推薦的無疑還是神經(jīng)網(wǎng)絡,希望這對你有所幫助。
原文作者:?TAVISH SRIVASTAVA
總結
以上是生活随笔為你收集整理的运用神经网络方法找寻集成学习中的最优权重的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 训练深度神经网络的时候需要注意的一些小技
- 下一篇: 随机森林入门攻略