如同所有監督式機器學習模型,決策樹經過訓練,能達到最佳成效 解釋一組訓練範例決策樹的最佳訓練方式是 發生 NP 困難問題因此訓練通常是透過經驗法則進行 易於建立的學習演算法,雖然能產生最佳效果,但 決策樹狀圖
大多數用來訓練決策樹的演算法都具有貪婪的分割與 演算法一開始會建立單一節點 (根) 以遞迴方式不斷擴大決策樹。
系統會評估每個節點的所有可能條件並評分, 演算法會選取「最佳」也就是 分數現階段,只要確定分數指標與 及條件會選出最適用的指標。
例如,假設在 Palmer 企鵝 資料集 (用於本課程稍後的程式碼範例)、多數 Adelie 和 Chinstrap 企鵝的帳單長度超過 16 公釐,而長東 企鵝的帳單金額比較少因此,條件 bill_length_mm ≥ 16 能以近乎完美的預測結果 八德企鵝,但無法區分 與 Adelies 和 Chinstraps 的合作關係演算法可能會選擇這個條件。
圖 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」已找到。兩個孩子 節點
我們還提供其他方法來擴充決策樹。常見的替代方案是 最佳化全域節點,而非採用分離和克服策略。
growing_strategy="BEST_FIRST_GLOBAL"
參數不斷成長。
詳情請參閱
說明文件,取得更多詳細資訊。
視輸入特徵的數量和類型而定 預測特定節點的潛在條件可能相當龐大,一般為無限。 舉例來說,假設某個門檻條件 $\mathrm{feature}_i \geq t$, 結合所有 可能 門檻值 - $t \in \mathbb{R}$ 無上限。
負責尋找最佳條件的常式稱為 Splitter。因為需要測試多種可能條件 是訓練決策樹狀圖的瓶頸。
分割器能否盡量提高分數,取決於工作。例如:
分割演算法有很多,每個演算法分別支援不同的:
- 地圖項目類型;例如數值、類別、文字
- 要完成的工作例如二元分類、多元類別 分類、迴歸
- 條件類型;例如門檻條件、插入條件 斜體條件
- 正則化條件;例如完全或約略的分割器 門檻條件
此外,也有相等的分割器變化版本,有不同的優缺點 像是記憶體用量、CPU 用量、運算分佈等