隨機森林樹 Random Forest

多數決方式

實作步驟與程式碼範例

假設你有 T 棵樹,對 m 個樣本進行了預測,結果儲存在一個矩陣中:

import numpy as np

def random_forest_vote(all_tree_preds):
    # all_tree_preds 形狀為 (樹的數量, 樣本數量)
    num_samples = all_tree_preds.shape[1]
    final_predictions = []
    
    for i in range(num_samples):
        # 1. 取得所有樹對第 i 個樣本的預測值
        sample_votes = all_tree_preds[:, i]
        
        # 2. 統計各類別出現次數,並選出最高者 (多數決)
        # np.bincount 統計次數,np.argmax 找出最大值的索引
        most_frequent = np.argmax(np.bincount(sample_votes))
        final_predictions.append(most_frequent)
        
    return np.array(final_predictions)

核心要點

  1. 結果彙整:將每一棵樹的預測結果整合成矩陣,方便按樣本進行遍歷。
  2. 多數決運算:在術科環境中,np.bincount 是處理整數類別投票最常用的工具。
  3. 維度一致:最終輸出的長度必須等於樣本數 m

平均法方式

假設 all_tree_preds 是一個矩陣,形狀為 (樹的數量, 樣本數量)

import numpy as np

def random_forest_average(all_tree_preds):
    """
    實作回歸問題的平均法整合
    """
    # 沿著 axis=0(樹的方向)計算平均值
    # 這會針對每個樣本,將所有樹的預測值相加後除以樹的數量
    final_predictions = np.mean(all_tree_preds, axis=0)
    
    return final_predictions

核心解析

  1. 計算平均:使用 np.mean() 是最標準的做法。
  2. 維度控制:透過指定 axis=0,NumPy 會將每一列(同一樣本的所有樹預測)進行平均。
  3. 輸出形狀:最終回傳的 final_predictions 是一個長度為 m(樣本數)的向量,確保每個樣本都有一個唯一的預測值。
Powered by Forestry.md