成長中的決策樹

如同所有監督式機器學習模型,決策樹經過訓練,能達到最佳成效 解釋一組訓練範例決策樹的最佳訓練方式是 發生 NP 困難問題因此訓練通常是透過經驗法則進行 易於建立的學習演算法,雖然能產生最佳效果,但 決策樹狀圖

大多數用來訓練決策樹的演算法都具有貪婪的分割與 演算法一開始會建立單一節點 (根) 以遞迴方式不斷擴大決策樹。

系統會評估每個節點的所有可能條件並評分, 演算法會選取「最佳」也就是 分數現階段,只要確定分數指標與 及條件會選出最適用的指標。

例如,假設在 Palmer 企鵝 資料集 (用於本課程稍後的程式碼範例)、多數 Adelie 和 Chinstrap 企鵝的帳單長度超過 16 公釐,而長東 企鵝的帳單金額比較少因此,條件 bill_length_mm ≥ 16 能以近乎完美的預測結果 八德企鵝,但無法區分 與 Adelies 和 Chinstraps 的合作關係演算法可能會選擇這個條件。

一個條件導致兩個葉子。條件為「bill_length_mm >= 16」。
如果是的話,分葉為「Adelie 或 Chinstrap」。如果不是,葉片
就是「Gentoo」

圖 7.種植樹木的第一步。 ,瞭解如何調查及移除這項存取權。

 

接著,演算法會以遞迴方式重複執行兩個子項節點。 如果沒有符合條件,節點就會變成分葉。葉子 預測結果是範例中最具代表性的標籤值。

演算法如下:

def train_decision_tree(training_examples):
  root = create_root() # Create a decision tree with a single empty root.
  grow_tree(root, training_examples) # Grow the root node.
  return root

def grow_tree(node, examples):
  condition = find_best_condition(examples) # Find the best condition.

  if condition is None:
    # No satisfying conditions were found, therefore the grow of the branch stops.
    set_leaf_prediction(node, examples)
    return

  # Create two childrens for the node.
  positive_child, negative_child = split_node(node, condition)

  # List the training examples used by each children.
  negative_examples = [example for example in examples if not condition(example)]
  positive_examples = [example for example in examples if condition(example)]

  # Continue the growth of the children.
  grow_tree(negative_child, negative_examples)
  grow_tree(positive_child, positive_examples)

以下將逐步說明 如何將特定決策樹狀圖訓練 讓我們進一步瞭解詳情

步驟 1:建立根:

顯示問號的節點。

步驟 2:擴充節點 #1。條件「x1 ≥ 1」已找到。 您建立了兩個子節點:

根節點
   就會導致兩個未定義的節點

步驟 3:擴充節點 #2。找不到符合條件的條件。請將節點設為 變成葉子:

根層級
   兩個未定義的節點。

步驟 4:擴充節點 #3。條件「x2 ≥ 0.5」已找到。兩個孩子 節點

根節點
然後三葉子

我們還提供其他方法來擴充決策樹。常見的替代方案是 最佳化全域節點,而非採用分離和克服策略。

YDF 代碼
在 YDF 中,決策樹會以「貪婪的劃分與征服」而成長 上述的 ANR 演算法您也可以啟用全域性 隨著 growing_strategy="BEST_FIRST_GLOBAL" 參數不斷成長。 詳情請參閱 說明文件,取得更多詳細資訊。

視輸入特徵的數量和類型而定 預測特定節點的潛在條件可能相當龐大,一般為無限。 舉例來說,假設某個門檻條件 $\mathrm{feature}_i \geq t$, 結合所有 可能 門檻值 - $t \in \mathbb{R}$ 無上限。

負責尋找最佳條件的常式稱為 Splitter。因為需要測試多種可能條件 是訓練決策樹狀圖的瓶頸。

分割器能否盡量提高分數,取決於工作。例如:

  • 資訊獲利Gini (兩者皆是 通常用於分類
  • 均方誤差經常用於迴歸。

分割演算法有很多,每個演算法分別支援不同的:

  • 地圖項目類型;例如數值、類別、文字
  • 要完成的工作例如二元分類、多元類別 分類、迴歸
  • 條件類型;例如門檻條件、插入條件 斜體條件
  • 正則化條件;例如完全或約略的分割器 門檻條件

此外,也有相等的分割器變化版本,有不同的優缺點 像是記憶體用量、CPU 用量、運算分佈等

YDF 代碼
在 YDF 中,系統會從自動偵測到的分割器中自動選取分割器 (或 特徵類型、超參數和預估的 各分段的速度 (在訓練期間,YDF 會執行小型模型來預測 每個候選分割器的速度)。