一文帶你讀懂機器學習和數據科學的決策樹

一文帶你讀懂機器學習和數據科學的決策樹
▲一文帶你讀懂機器學習和數據科學的決策樹。(圖/翻攝自雷鋒網)

 【原文:《一文帶你讀懂機器學習和數據科學的決策樹》,作者:雷鋒字幕組,智慧機器人網編輯整理】

文、圖/雷鋒網

決策樹是一類非常強大的機器學習模型,在高度可解釋的同時又在許多任務中有非常良好的表現。 決策樹在ML模型的特殊之處在於它清晰的信息表示結構。 決策樹通過訓練學到的「知識」直接形成層次結構。 知識結構以這樣的方式保存和顯示,即使非專家也可以容易地理解。

一文帶你讀懂機器學習和數據科學的決策樹

生活中的決策樹

你以前可能用過決策樹來決定你的生活。 例如,決定本周末你應該做什麼活動。 這可能取決於你是否願意和朋友一起出去或獨自度過周末; 在這兩種情況下,你的決定還取決於天氣。 如果天氣晴朗,你可以和朋友一起踢足球。 如果結束下雨了,你會去看電影。 如果你的朋友根本不露面,那麼無論天氣如何,你會選擇玩電子遊戲!

一文帶你讀懂機器學習和數據科學的決策樹

這是決策樹應用在現實生活中的例子。 我們已經構建了一顆樹來模擬一組順序的,層次化的決策,最終導致一些結果。 請注意,為了保持樹的小巧,我們還選擇了相當「高級」的決策。 例如,如果我們為天氣設置了許多可能的選項,例如25度晴天,25度下雨,26度晴天,26度下雨,27度晴天…… 等等,我們的樹會很大! 確切的溫度確實有點相關,我們只想知道是否可以外出。

機器學習中決策樹的概念是相同的。 我們想要構建一個具有一組層次的決策樹,並給出最終結果,比如說分類或回歸預測。 將選擇決策使得樹盡可能小,同時旨在做到高的分類和回歸準確性。

機器學習中的決策樹

通過兩個步驟來創建決策樹模型:歸納和剪枝。 歸納是我們實際構建樹的方法,即根據我們的數據設置所有分層決策邊界。 由於訓練決策樹的性質,它們可能容易出現嚴重的過擬合。 修剪是從決策樹中刪除不必要的結構,有效地降低了對抗過擬合的複雜性,並使其更容易解釋。

引言

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

  1. 從訓練數據集開始,該數據集應具有一些特徵變量,分類或回歸輸出。
  2. 確定數據集中「最佳特徵」以分割數據; 更多關於我們如何定義「最佳功能」的方法
  3. 將數據拆分為包含最佳特徵的可能值子集。 這種分割基本上定義了樹上的節點,即每個節點是基於我們數據中某個特徵的分割點。
  4. 通過使用從步驟3創建的數據子集遞歸地生成新的樹節點。我們保持分割直到達到一個點,在該點我們通過一些方法,優化了最大精度,同時最小化了分裂/節點的數量。

第1步很簡單,只需要收集你的數據集!

對於步驟2,通常使用貪婪算法來選擇要使用的特徵和特定的分割方法,來最小化成本函數。 如果我們思考它一秒鐘,那麼在構建決策樹時的拆分相當於劃分特徵空間。 我們將迭代地嘗試不同的分割點,然後在最後選擇成本最低的分割點。 當然,我們可以做一些聰明的事情,比如只在我們的數據集範圍內進行拆分。 這將使我們免於浪費計算來測試那些質量比較差的分裂點。

對於回歸樹,我們可以使用簡單的平方差作為我們的成本函數:

一文帶你讀懂機器學習和數據科學的決策樹

Y是我們的基本事實,Y-hat是我們預測的值; 我們對數據集中的所有樣本求和以獲得總誤差。 對於分類,我們使用基尼指數:

一文帶你讀懂機器學習和數據科學的決策樹

其中pk是特定預測節點中分類k的訓練實例的比例。 理想情況下,節點的錯誤值應為零,這意味著每個拆分在100%的時間內輸出單個分類。 這正是我們想要的,因為我們知道,一旦我們到達那個特定的決策節點,無論我們是在決策邊界的一邊還是另一邊,我們的輸出究竟是什麼。

在我們的數據集中具有單個分類的概念被稱為信息增益。 看看下面的例子。

一文帶你讀懂機器學習和數據科學的決策樹

如果我們選擇一個分區,其中每個輸出根據輸入數據混合了類別,那麼我們實際上根本沒有獲得任何信息; 我們不知道特定節點即特徵是否對我們分類數據有任何影響! 另一方面,如果我們的分割對每個輸出類別的百分比都很高,那麼我們已經獲得了在特定特徵變量上以特殊方式分割的信息來給我們一個特定的輸出!

現在我們可以繼續分割, 分割和分割 ,直到我們的樹有數千個分支……但這不是一個好主意! 我們的決策樹將是巨大的,緩慢的,並且會過度擬合我們的訓練數據集。 因此,我們將設置一些預定義的停止標準來停止樹的構造。

最常見的停止方法是對分配給每個葉節點的訓練示例的數量使用最小計數。 如果計數小於某個最小值,則不接受拆分,並將該節點作為最終葉節點。 如果我們所有的葉子節點都成為最終節點,則停止訓練。 較小的最小計數將為你提供更精細的分割和更多信息,但也容易過擬合你的訓練數據。 太小的分鐘計數,你可能會停止提前。 因此,最小值通常基於數據集設置,具體取決於每個類中預計有多少個示例。

剪枝

由於訓練決策樹的性質,它們可能容易出現嚴重的過擬合。 為每個節點設置最小實例數的正確值可能具有挑戰性。 大多數情況下,我們可能只是使最小值非常小,這將導致存在許多分裂和非常大的複雜樹。 關鍵是這些分裂中的大多數將最終變得多餘,並且不會提高模型的準確性。

剪枝是一種去除這種分裂冗餘的技術,即修剪樹中不必要的分裂。 從高級別開始, 剪枝將樹的一部分從嚴格決策邊界壓縮為更平滑和更通用的樹,從而有效地降低樹的複雜性。 決策樹的複雜性定義為樹中的分裂數。

一種簡單而高效的修剪方法是遍歷樹中的每個節點,並評估將其移除到成本函數上的效果。 如果它變化不大,那就修剪掉!

Scikit Learn實例

很容易在Scikit Learn中使用內置的分類和回歸決策樹的類! 首先加載數據集並初始化我們的決策樹以進行分類。

一文帶你讀懂機器學習和數據科學的決策樹

Scikit Learn還允許我們使用graphviz庫可視化我們的樹。 它提供了一些選項,有助於可視化決策節點和分割模型來簡化學習,這對理解它的工作方式非常有用! 下面我們將根據功能名稱為節點著色,並顯示每個節點的類和功能信息。

一文帶你讀懂機器學習和數據科學的決策樹

一文帶你讀懂機器學習和數據科學的決策樹

你可以在Scikit Learn中為決策樹模型設置幾個參數。 以下是一些有趣的嘗試以獲得更好的結果:

  • max_depth:我們將停止拆分節點的樹的最大深度。 這類似於控制深度神經網路中的最大層數。 較低的值會使你的模型更快但不準確; 更高的值可以給你準確性,但風險是過擬合,並且可能會很慢。
  • min_samples_split:拆分節點所需的最小樣本數。 我們討論了決策樹的這一方面,以及如何將其設置為更高的值將有助於減輕過擬合。
  • max_features:查找最佳分割點時要考慮的特徵數。 更高則意味著可能更好的結果,不過訓練則需要更長的時間。
  • min_impurity_split:樹木擴張早期停止的閾值。 如果節點的不純度高於閾值,則節點將分裂。 這可用於權衡對抗過擬合(高值,小樹)與高精度(低值,大樹)。
  • presort:是否預先分配數據以加快擬合數據中最佳分割的發現。 如果我們事先對每個特徵的數據進行排序,我們的訓練算法將更容易找到分離的合適值。

實際應用決策樹的技巧

以下是一些決策樹的優缺點,它們可以幫助你確定它是否適合你的問題,以及一些如何有效應用它們的提示:

優點:

  • 易於理解和解釋。 在每個節點,我們都能夠確切地看到我們的模型做出了什麼決定。 在實踐中,我們將能夠完全理解我們的準確度和誤差來自何處,模型可以很好地處理哪種類型的數據,以及輸出如何受到特徵值的影響。 Scikit learn的可視化工具是可視化和理解決策樹的絕佳選擇。
  • 需要很少的數據準備。 許多ML模型可能需要大量數據預處理,例如標準化,並且可能需要複雜的正則化方法。 另一方面,在調整了一些參數後,決策樹可以很好地開箱即用。
  • 使用樹進行推理的成本只有用於訓練樹的數據點的數量的對數。 這是一個巨大的優勢,因為它意味著擁有更多數據不一定會對我們的推理速度產生巨大影響。

缺點:

  • 由於訓練的性質,過擬合在決策樹中很常見。 通常建議執行某種類型的降維,例如PCA,使得樹不必在如此多的特徵上被拆分
  • 出於與過擬合的情況類似,決策樹也容易變得偏向於在數據集中占多數的類別。 不過進行某種類的平衡(例如類權重,采樣或專門的損失函數)總是一個好主意。

如果您想了解更多關於使用Scikit Learn進行機器學習的知識,建議你使用Hands-On Machine Learning with Scikit-Learn and TensorFlow這本書進行動手學習,尤其是動手編碼和練習!

準備學習?

在Twitter上關注我,我發布所有關於最新和最好的AI,技術和科學的內容!

https://ai.yanxishe.com/page/TextTranslation/1323

從語言學角度看詞嵌入模型

深度網路揭秘之深度網路背後的數學

社會擴展性:加密貨幣中的最重要概念?25個能放到數據湖中的語音研究數據集讓你的電腦擁有「視力」,用卷積神經網路就可以!

熱門標籤

留言

延伸閱讀