JamesLearningNote
Published in

JamesLearningNote

[資料分析&機器學習] 第3.5講 : 決策樹(Decision Tree)以及隨機森林(Random Forest)介紹

在前面的章節我們說明了如何使用Perceptron, Logistic Regression, SVM在平面中用一條線將資料分為兩類,並且Logistic Regression以及 SVM都可以知道這筆資料是A類還是B類的機率,更強大的SVM還可以透過將平面資料投影到空間中來做到非線性分類。前面提到這些知名的模型(Model)都有一個小缺點,想像一下你是一個披薩公司(像是必X客、達X樂)的資料科學家,你成功建立一個模型能預測披薩是美味的披薩還是難吃的披薩,假設使用在烤披薩的中間過程中的兩個量測數值:溫度以及濕度來建立的模型為:

模型的決策邊界: -100 + 6*溫度 + 3*濕度 = 0

-100 + 6*溫度 + 3*濕度 > 0 預測是一個美味的披薩

-100 + 6*溫度 + 3*濕度 < 0 預測是一個難吃的披薩

當你發現這個模型,你很興奮的跑去跟主管以及工作人員講解這個模型,卻發現沒人聽得懂你在幹嘛,還會覺得你根本不懂怎麼烤披薩的知識,不要來亂。(這常常是前線人員對於資料科學家的觀感,就是一群不懂專業知識的人來亂唬爛XD)

這只是一個最簡單的模型,實際上的模型會複雜超級多,像是:

-100 + 6*溫度² + 3*濕度³ + 20*溫度*濕度² + -70*溫度*濕度²*氣壓 +…..

這樣就更沒人可以理解你在幹嘛了

但!如果你今天改變你的說法跟你的老闆說,你發現在烘烤披薩的過程中,只要溫度維持在120–125度,濕度維持在5%-7%,就會是一個美味的披薩。你的老闆跟前線人員馬上能聽懂這句話的意思,而且會覺得你很專業,開始更重用資料分析在披薩公司,即使這樣的準確度可能沒有比上面提到的多項式模型還精準,但常常在真實環境中模型的“可解釋性(Interpretability)”是很重要的,而決策樹就是一個解釋性能力很強的模型。

先來看看決策樹的模型長相:

在訓練過程中決策樹會問出一系列的問題像是溫度是否>125 ,濕度是否<5%之類的是非問題。首先會從最後上方的樹根開始將資料的特徵將資料分割到不同邊(比方說依據溫度將資料切成三份),分割的原則是:這樣的分割要能得到最大的資訊增益(Information gain, 簡稱IG)。

由於我們希望獲得的資訊量要最大,因此經由分割後的資訊量要越小越好。

常見的資訊量有兩種:熵(Entropy) 以及 Gini不純度(Gini Impurity)

熵資訊量函式
Gini Impurity資訊量函式

看起來有點複雜,我們就實際舉個例子來說明吧!假設有80筆資料,有40是1類別、40筆是2類別。使用兩種不同的切割方法,第一種切割法(A)會變把資料變成各40筆,其中左邊那份包含30筆1類別資料、10筆2類別資料,右邊包含10筆1類別資料、30筆2類別資料。第二種切割法(B)會把資料切成60/20筆,其中左邊那份包含20筆1類別資料、40筆2類別資料,右邊那份包只含了20筆1類別的資料。

Gini 不純度

我們可以發現不管是熵或是Gini不純度,都比較偏好第二種切割方法(B)

接下來介紹一下如何使用決策樹來的分類Iris資料集!

老樣子!先在載入必要函式以及Iris資料集

將資料的70%拿出來train,剩下的30%用來檢測train的好壞

載入決策樹函式,criterion使用我們前面介紹的entropy,也可以使用gini impurity,max_depth在實務上很常用到,主要是可以防止樹長得過高造成overfit,由於這個範例很簡單不設max_depth也可以正確分類

寫個迴圈看一下預測結果,發現也全部預測正確了!另外也可以用score函數來計算正確率

視覺化決策樹的決策邊界

另外我們可以使用export_graphviz函式來將樹的實際長相視覺化

發現決策樹找到的規則是只要花瓣長度≤2.45,就能夠正確分類

由於兩個類別對於決策樹來說太簡單,看不出決策樹的威力,我們來試一下三個類別的情況,下圖馬上就能看出決策樹的威力。

隨機森林(Random Forest)

在近幾年隨機森林非常受到青睞,被運用在大量的機器學習應用中,它的效能、預測能力都很強,而且非常容易使用,另外隨機森林還能更去觀察每一個特徵的重要度。直覺來說,你可以把隨機森林當作是多個決策樹組合而成的,這個在機器學習領域稱為Ensemble中文可以叫整體或集成。相較於一般機器學習演算法是去培育一個天才模型的概念往往會有一些的限制,比如說這個天才模型可能在某些領域會有偏差或是不好的行為。整體機器學習(Ensemble learning)演算法則是結合多個弱學習器來建構一個強穩的模型,而這種模型比較不會有偏差或是發生高度適合(Overfit)。簡單來說機器學習演算法有兩種,一種是天才領導型的、一種是眾人投票型的,而隨機森林就是屬於眾人投票型的。

在實務上使用隨機森林的程式很簡單,如下圖所示,你所需要關心的參數主要只有n_estimators樹木的多寡(你要創造幾個決策樹來投票),通常越多越好,但運算時間也會拉長。n_jobs主要是隨機森林支援平行運算,你可以決定要用你電腦的幾個核心去算,來加速運算速度。其他參數新手可以先忽略

附註

要視覺化決策樹必須先安裝Graphviz,可參考Graphviz官網的介紹。如果是Mac 且有安裝Mac套件管理軟體HomeBrew的話,可以輸入下方的一行指令就安裝完畢 brew install graphviz

Grapviz

https://www2.graphviz.org/

Mac套件管理軟體

https://brew.sh/index_zh-tw.html

程式碼

感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。

[Python資料分析&機器學習]這系列文章是我在Hahow上面所開設課程的講義,如果你是新手想著看影片一步一步學習,可以參考這門課:https://hahow.in/cr/pydataml

如果你對什麼主題的文章有興趣的話,歡迎透過這個連結告訴我:https://yehjames.typeform.com/to/XIIVQC
有任何問題也歡迎在底下留言或是來信告訴我: yehjames23@gmail.com

參考閱讀

  1. [書]Python 機器學習

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store