整合學習之如何由弱變強
寫在前面
在所有的機器學習演算法中,整合學習算是最“勵志”的典型了,因為它是把一系列的很簡單的模型整合起來,最終組成強大的模型。
正文:
Part 0
弱學習器
學習器是一個機器學習領域的概念,可以理解為一個用來進行預測判斷的模型。那麼, 弱學習器就是一個比隨機猜測稍微好那麼一點的模型。
打個比方,如果讓一個模型做有4個選項的選擇題,正確率稍大於25%,比隨機猜測好但也好不了多少,那它就是一個弱學習器。
其中,值得注意的幾點是:
-
弱學習器的正確率要大於隨機猜測的正確率,如果兩者相等則稱之為無效學習器,如果前者小於後者稱之為壞學習器(俗稱的“豬隊友”)。
-
弱學習器的正確率只稍大於隨機猜測的正確率,這裡的“稍大於”只是一個定性的概念。
-
弱學習器的正確率不能太高,否則就算是強學習器了。
Part 1
Bagging
Bagging全稱Bootstrap aggregation,是在原訓練集Z的基礎上通過Bootstrap抽樣,產生B個新的訓練集,在每個新的訓練集上訓練一個模型,最後對這些模型進行平均得到最終模型。
其流程示意圖如下:
(1) Bootstrap sampling
(2) Single model fitting
這個過程比較簡單,只需要在各個新產生的資料集上擬合模型即可。這些擬合的模型結構是一樣的,有差別的僅僅是訓練資料不同導致的模型引數差異。
(3) Models aggregation
模型整合過程也非常簡單,將所有的模型預測結果進行平均即可。
(4) Bagging由弱變強的原因
我們在此舉個例子,來說明Bagging可以讓弱學習器整合強學習器的原因。還是一群很弱的學生做選擇題的例子,我們簡化一下。
Part 2
Boosting
Boosting是每次從基模型集合中選擇一個,對現有模型逐步做加法擴充套件,從而得到最終的強學習器的。
(1)模型形式
(2)模型求解
(3)流程示意圖
(4)Boosting由弱變強的原因
Boosting將弱學習器整合變強的原因非常直觀。從上面的流程圖可以看出,其實前向分步演算法的每次迭代過程,都是在擬合當前模型在訓練集上的殘差。每次將殘差減小一點點,最終會達到完美。
Boosting很像一個產品迭代的過程,雖然不能一下子做到完美,但堅持不懈的迭代優化,最終必定能驚豔到使用者的。
Part 3
Stacking
Stacking 顧名思義,是模型堆疊的意思,即在模型的基礎之上建立模型。
模型可以多次堆疊,但實際應用中考慮到計算量可能過大和過擬合問題,一般堆疊不超過3次。以下以2次堆疊為例,進行說明。
(1)模型形式
(2)流程示意圖
(3)模型求解
Stacking的過程,可以對各個模型進行分別求解。顯然,模型堆疊提升最終的模型容量,讓最終模型可以刻畫非常複雜的模式,但同時也增加了很多的計算量。
(4)Stacking由弱變強的原因
從stacking的流程圖可以看出,其結構和神經網路很相似,stacking每一層堆疊的模型相當於神經網路的啟用函式;
如果從特徵抽取的角度看神經網路,因為神經網路的上層會共享下層的網路結構和引數,因此神經網路的特徵相關性會更強一些,而stacking使用的特徵差異性更大。
因此,stacking的過程擴充了特徵空間的範圍,強化了最終模型的表達能力。
上面,我們回顧了整合學習的3種基本策略,現在做一個 簡短總結 。
Bagging、Boosting和Stacking都是整合策略,是通過將弱學習器按照某種方式整合起來,來最終提升模型預測能力。
1. Bagging通過模型平均,降低了預測方差,提升了模型的穩定性,從而提升模型能力。
Bagging的關鍵是各個模型之間要儘量獨立,並且不能引入壞的學習器。用樹模型做Bagging,就得到了隨機森林 。
2. Boosting通過前向分步的方式建模,每次在現有模型的基礎上進行擬合,從而提升模型能力。
Boosting的關鍵有兩點,一個是準確找到殘差,第二是要迭代夠快。 Boosting的過程,如果是在分類問題中使用指數損失函式,就得到AdaBoost;而如果用可導的損失函式,並用梯度來代替殘差,就得到GradientBoost。
3. Stacking則是通過對不同模型進行堆疊,通過提取多樣化的特徵,來提升模型能力。Stacking則更像一個DIY過程,可以根據需要自己組合。
Stacking的關鍵是模型之間差異要儘量的大(不要是同種型別的模型只是引數不同),這樣才能更好地提取特徵。
打個比方,可以把Bagging當成是委員會,通過集體決策來提升穩定性,降低風險;Boosting類似於產品迭代的過程,一步步的完善,越做越好;而Stacking則是像汽車生產一樣,各個部件有自己的流水線,最後統一簡單組裝。
天下沒有免費的午餐,雖然無論多弱的學習器整合學習都可以使之變強,但變強本身並非毫無代價,其難度和藝術統統都在“整合”的過程中。
看到這裡,不妨往生活中延伸一下:
1. 如果你是一個leader,你是更多的是在抱怨自己的下屬太弱雞,還是將他們集成了一個強大的團隊?
2. 從個人角度來看,你有沒有準確地找到自己當前的不足之處,讓今天的你有沒有比昨天的你進步一點點,經過若干次的迭代之後徹底變強?
3. 你想做一件事情的時候,比如做一個產品或開一家公司,有沒有很好地利用現有的產業成果,最大程度地提高效率?
-end-
還能看點啥?
戳戳戳!!!
3. 大資料營銷之使用者畫像
4. 機器學習中的維度災難
5. 推薦系統的商業價值