機器學習與資料科學決策樹指南

2021-09-19 20:21:58 字數 3466 閱讀 6017

還在為如何抉擇而感到糾結嗎?快採用決策樹(decision tree)演算法幫你做出決定吧。決策樹是一類非常強大的機器學習模型,具有高度可解釋的同時,在許多任務中也有很高的精度。決策樹在機器學習模型領域的特殊之處在於其資訊表示的很清楚,而不像一些機器學習方法是個黑匣子,這是因為決策樹通過訓練學到的「知識」直接形成層次結構,該結構以這樣的方式儲存和顯示學到的知識,即使是非專業人士也可以容易地弄明白。

在現實生活中,我們常常用過類似於決策樹的方式來決定自己的生活。例如,決定週末安排什麼樣的活動。採取怎樣的活動可能取決於一些因素,比如是否願意和朋友一起出去或獨自度過週末、週末的天氣如何等。假設就這兩個因素影響你做出決定的話,如果天氣晴朗,並且你的朋友可以一起參與,那麼你可能想踢足球。如果是下雨天,可能會一起去看電影。如果朋友有事無法參加,那麼無論天氣如何,可能會去看會書、玩會電子遊戲。

這就是現實中的乙個明顯的決策樹例子,上述已經構建了乙個樹來模擬一組順序的、層次化的決策,最終得到乙個結果。這裡,為了保持樹的小巧,還選擇了相當「高階」的決策。例如,如果為天氣設定了許多可能的選項,例如晴天(25度)、下雨(25度)、晴天(26度)、下雨(26度)、晴天(27度)...... 等等,這樣會使得樹尺寸會很大,這種精確的溫度對於最後做出的決策沒有太相關的關係,因為只是想知道是外界是否下雨,根據下雨的情況決定是否外出,而溫度的高低對其影響很小。當然,極寒極熱天氣還是在家比較舒服。

機器學習中的決策樹的概念和上面的思想是相同的,需要構建乙個具有一組分層決策的樹,最終給出決策結果,即分類或回歸**。盡可能使得決策樹尺寸較小,同時要實現高分類/回歸準確性。決策樹模型的構建一般分為兩個步驟:歸納(induction)和修剪(pruning)。歸納是實際構建樹的步驟,即根據我們的資料設定所有的分層決策邊界。但由於訓練決策樹的性質,樹模型可能容易出現嚴重的過擬合現象。這個時候就需要採用修剪處理,修剪就是從決策樹中刪除不必要的分支結構的過程,有效地降低了對抗過擬合的複雜性,並使其更容易解釋。

從高層次來看,決策樹歸納需要經過4個主要步驟:

第1步很簡單,只需好好分析資料集。對於步驟2,通常使用貪婪演算法來選擇要使用的特徵和特定分割,以最小化代價函式。構建決策樹時執行的拆分相當於劃分特徵空間。我們將迭代地嘗試不同的分割點,最後選擇成本最低的分割點。也可以只在資料集中的值範圍內進行拆分,這將使得我們免於浪費計算來測試那些表現差的**點。

對於回歸樹,可以使用簡單的平方誤差作為模型的代價函式:

其中,y是期望輸出,y-hat是**值,對資料集中的所有樣本求和以獲得總誤差。對於分類,使用的是基尼指數函式(gini index function):

其中pk是特定**節點中第k類的訓練例項樣本的比例。理想情況下, 節點的錯誤值應為零,這意味著每個拆分輸出的類正是我們想要的,一旦到達那個特定的決策節點,無論處於決策邊界的這一邊還是另一邊,其輸出也確定好了。

在資料集中具有單個分類的概念被稱為資訊增益。以下是舉例:

如果選擇了某種劃分,其中每個輸出根據輸入資料混合類別,這種情況實際上根本沒有獲得任何資訊; 另一方面,如果採取的分割對於每個輸出的類的正確率都很高,那麼已經獲得 了在具體特徵變數上以特定方式分割的資訊。

之後是對樹模型進行**,直到樹有數千個分支,但這不是乙個好主意!這樣得到的決策樹將是巨大的、緩慢的,並且會過擬合訓練資料集。因此,需要設定一些預定義的停止標準來停止樹的構造。

最常見的停止方法是對分配給每個葉節點的訓練樣本的數量使用最小數量。如果計數小於某個最小值,則不接受拆分,並將該節點作為最終葉節點。如果所有的葉子節點都成為最終節點,則訓練停止。較小的最小數量將提供更精細的分割和資訊,但也容易過擬合訓練資料。因此,最小數量的取值通常基於資料集設定,具體取決於每個類中預計有多少個示例樣本。由於訓練決策樹的性質,可能容易會出現嚴重的過擬合現象。為每個節點設定最小例項數的正確值可能具有挑戰性。大多數情況下,可能只是希望做出合適的決定,而無需最優的決定。因此,無需使得最小值非常小獲得非常複雜的樹,且有很多**是多餘的,並沒有提高模型的準確性。

樹修剪是一種利用修剪樹中不必要的**的技術。從上層開始,修剪將樹的一部分從嚴格的決策邊界壓縮為更平滑、更通用的樹,從而有效地降低樹的複雜性。決策樹的複雜性定義為樹中的**數。

一種簡單而高效的修剪方法是遍歷樹中的每個節點,並評估將其移除後其代價函式上的效果。如果移除後,代價函式變化不大,那就修剪掉該節點。

使用scikit lear中內建的函式來實現分類和回歸的決策樹是非常容易的。首先載入資料集並初始化決策樹以進行分類。

from sklearn.datasets import load_iris

from sklearn import tree

# load in our dataset

iris_data = load_iris()

# initialize our decision tree object

classification_tree = tree.decisiontreeclassifier()

# train our decision tree (tree induction + pruning)

classification_tree = classification_tree.fit(iris_data.data, iris_data.target)

scikit.還允許使用graphviz庫視覺化構建的樹,它附帶了一些選項,這些選項將有助於視覺化決策節點,並將模型學到的內容進行分割,下面根據特徵名稱對節點進行著色,並顯示每個節點的類和特徵資訊:

也可以在scikit learn中為決策樹模型設定幾個引數。以下是一些有趣的嘗試以獲得更好的結果:

機器學習與資料科學決策樹指南

還在為如何抉擇而感到糾結嗎?快採用決策樹 decision tree 演算法幫你做出決定吧。決策樹是一類非常強大的機器學習模型,具有高度可解釋的同時,在許多任務中也有很高的精度。決策樹在機器學習模型領域的特殊之處在於其資訊表示的很清楚,而不像一些機器學習方法是個黑匣子,這是因為決策樹通過訓練學到的 ...

機器學習決策樹 機器學習與資料科學決策樹指南

還在為如何抉擇而感到糾結嗎?快採用決策樹 decision tree 演算法幫你做出決定吧。決策樹是一類非常強大的機器學習模型,具有高度可解釋的同時,在許多任務中也有很高的精度。決策樹在機器學習模型領域的特殊之處在於其資訊表示的很清楚,而不像一些機器學習方法是個黑匣子,這是因為決策樹通過訓練學到的 ...

機器學習 決策樹

一 基本概念 決策樹 decision tree 是一種基本的分類與回歸方法。決策樹模型呈樹形結構,在分類問題中,表示屬於特徵對例項進行分類的過程,它可以認為是if then規則的集合,也可以認為是電議在特徵空間與類空空上的條件概率分布,其主要優點是模型具有可讀性,分類速度快。決策樹的學習通常包括3...