機器學習_學習筆記系列(37):隨機森林回歸(Random Forest Regressor)

--

上一回我們介紹Random Forest演算法來解決分類上的問題,接下來我們要來講其如何解決回歸上的問題。

Random Forest Regressor

其實概念上來說,其實也是太同小異啦,就是用Bagging方法,隨機抽取資料後再訓練一個regression tree,最後再把這些base learner結合起來。

關於詳細的步驟,我們先假設我們有N筆資料,其輸入資料為x輸出資料為y。然後我們所設定的迴圈數有M個,也就是說最後我們會得到M個Regression Tree Models。

接著我們從這N筆資料裡面隨機抽樣N筆,抽取的資料是可以重複的。然後我們就用這些抽出來的資料訓練出一個Regression Tree。結束後就進入下一個迴圈,然後用相同的方式訓練出另一個Regression Tree,直到迴圈執行完M次為止。

而在最後我們得到M個Regression Tree Models後,我們就將這些資料在這M個models的預測結果取平均,最後得出來的就是我們Random Forest Regressor所預測的數值。

接下來我們實際以Python來實現我們的Random Forest Regressor。在這裡我們刻意設計我們的數據點,為二次函數加上sin函數。順帶一提在先前Decision Tree Regressor的章節我們提到過,像是這種加上sin或cos的趨勢,如果用一般的Polynomial Regression訓練出來的model會效能非常差,因為他大概只能抓到二次函數的趨勢,而Decision Tree Regressor可以很好的擬合到sin和cos的周期性變化。

所以我們先來看一下Decision Tree Regressor其樹層樹等於3的表現

我們可以看到雖然Decision Tree Regressor有抓到sin的趨勢,但是受限於樹的層數限制,有些地方擬合的並不是很好,所以其錯誤率算是蠻高的。

接下來我們看看 Random Forest的表現

我們可以看到我們總共產生了12個regression tree models,而我們也可以大致上看到,這些12條線平均的位置,比起單一個Decision Tree Regressor,更接近我們的趨勢。

我們可以看到不管在訓練集還是測試集的表現,Random Forest的錯誤率都整整比Decision Tree低兩倍。所以在這裡我們就可以看到Ensemble Learning的強大之處。

Python Sample Code:

Github:

Reference:

[1] Breiman, L. (2001). Random forests. Machine learning, 45(1), 5–32.

--

--

劉智皓 (Chih-Hao Liu)

豬屎屋AI Engineer,熱愛AI研究、LLM/SD模型、RAG應用、CUDA/HIP加速運算、訓練推論加速,同時也是5G技術愛好者,研讀過3GPP/ETSI/O-RAN Spec和O-RAN/ONAP/OAI開源軟體。