跳至主要內容
Fredrick's Lab

Ensemble Learning 集成學習(上)

medium

Ensemble Learning 集成學習(上)

最近工作上有碰到「簡易版 feature用 gradient boosting」的成效 train的比「詳細版 feature用深度學習」的成效還好的情況,於是就把李宏毅老師2015年講 ensemble的課程拿出來看,想好好理解一下集成學習在做什麼,順邊把筆記記錄起來。

因為這次影片的內容較多,所以我把ensemble分成上下篇來紀錄,若是想看boosting筆記的人,可以直接看下篇,這篇會先介紹 bagging。

此篇筆記來自此課程:https://www.youtube.com/watch?v=tH9FH1DH5n0

Framework of Ensemble

  • 我們有一些分類器
  • f1(x), f2(x), f3(x),…
  • 每個分類器擅長做的事情不同,各司其職
  • 將分類器合起來

Ensemble: Bagging

  • 先sampling training data,讓各個模型看到的data是不一樣的。
  • 接著開始訓練出4個複雜的模型(能夠fitting training data)。
  • 然後用一組testing data丟到各模型中,再去取average或voting。
  • 結果通常會比較不容易overfitting,variance較小,所以做bagging的情況,是擔心模型容易overfit,而不是連training data都fit不了。

什麼樣的模型容易overfit?

  • NN其實比較容易遇到無法在training data上fitting。
  • Decision Tree,只要樹長得夠深,很容易在training data上面拿到100分的accuracy,但只是overfitting而已,而Random Forest就是 Decision Tree做Bagging的版本。
  • 秒解釋Decision Tree:假設有x1, x2兩個feature,可以先在x1=0.5的地方切一刀,接著再去x2=0.3, 0.7的地方切一刀,就會出現紅色 (class2)跟藍色 (class1)的區域。

  • 這邊舉了一個例子讓大家理解decision tree容易在training data上fitting,初音task:區分class1, 0。
  • 可以在左下圖看到,紅色的區域我們將像素標示為1,紫色標示為0。
  • 在右下圖可以看到train完的結果,當decision tree的深度越深,model就越能夠區分出1和0的像素。

Random Forest

Decision Tree

  • 隨著decision tree的深度越深,就越能夠描繪出初音的樣子。
  • decision tree一定可以做到error rate是0,因為樹可以長到每一筆data就是一片葉子。

Random Forest

  • 傳統的resampling的bagging訓練出來的tree還是會差不多。
  • 所以在每次sampling的時候,還會隨機地限制某些feature不能夠被使用,這樣訓練出來的每顆tree,即使sampling的dataset很像,訓練出來的tree也就會不一樣。
  • 因此random forest就是decision tree bagging的版本。

Out-of-bag validation for bagging

  • 因為在training的時候,每個模型看到的training data不同,假設我們有4個模型: f1, f2, f3, f4,並且有4組training data:x1, x2, x3, x4,而f1, f2在training的時候,只有看過x2, x3, x4,因此在validation 的時候,我們就可以用f1, f2去validate x1,以此類推到其他的模型,就不需用特別去切出validation set。

小結

我看影片到這邊得到最重要的概念,其實就是要先有一些可以很fit training data的model,然後為了解決overfitting的問題,透過bagging的方式來集成這些model,讓集成的model不那麼overfit。


如果喜歡我的筆記,歡迎給個clap或留下留言!