基本概念
隨機森林迴歸器是一種集成學習方法,
通過建立多個決策樹並取平均值
來提高預測準確性並控制過擬合。
它的核心思想是”群體智慧”,
多棵樹共同決策比單一決策樹更準確。
主要參數解釋
核心參數
- n_estimators (預設=100): 森林中樹的數量。
增加此值可以提高模型性能,但也會增加計算時間。 - max_depth (預設=None): 樹的最大深度。
如果為None,則節點會一直擴展
直到所有葉子都是純的或
包含少於min_samples_split的樣本。 - min_samples_split (預設=2):
分割內部節點所需的最小樣本數。- 整數:最小樣本數
- 浮點數:樣本比例
- min_samples_leaf (預設=1): 葉子節點所需的最小樣本數,有助於平滑模型。
- max_features (預設=1.0): 尋找最佳分割時考慮的特徵數:
- “sqrt”:特徵總數的平方根
- “log2″:特徵總數的對數
- 1.0或None:使用所有特徵
- 小數:使用該比例的特徵
抽樣相關參數
- bootstrap (預設=True):
是否使用bootstrap抽樣。
True表示每棵樹都從訓練數據有放回抽樣,
False則使用全部數據。 - max_samples (預設=None):
若bootstrap=True,
從X抽取來訓練每個基本估計器的樣本數。 - oob_score (預設=False):
是否使用袋外樣本估計泛化分數(即驗證精度)。
只在bootstrap=True時有效。
隨機性與並行處理
- random_state (預設=None): 控制隨機性的種子,
影響樣本的bootstrapping和特徵選擇的隨機性。 - n_jobs (預設=None): 並行運行的作業數。-1表示使用所有處理器。
如何運作
- 隨機抽樣:若bootstrap=True,
從訓練集隨機抽取N個樣本(有放回)建立n_estimators棵決策樹。 - 特徵隨機選擇:對每次分割,從全部特徵中隨機選擇max_features個特徵。
- 樹獨立生長:每棵樹獨立生長,沒有剪枝(除非指定參數)。
- 平均預測:預測時,所有樹的預測結果取平均值作為最終輸出。
重要屬性
- feature_importances_:基於不純度的特徵重要性。
- estimators_:擬合後的子估計器(樹)集合。
- oob_score_:袋外估計獲得的訓練數據分數。
使用時機
- 處理高維數據(多特徵)
- 需要估計特徵重要性
- 需要較好控制過擬合
- 處理大量數據
- 處理包含異常值的數據
調參技巧
- n_estimators:一般越大越好,但要考慮計算時間
- max_depth:控制過擬合的主要參數,建議調整範圍
- max_features:影響樹的多樣性,回歸問題常用默認值或1/3
- min_samples_leaf:較大值有助于防止過擬合
注意事項
- 默認參數可能生成很大的樹,消耗大量內存
- 特徵總是在每次分割時隨機排列
- 雖然強大,但解釋性不如單一決策樹
- 對於超大數據集,
可考慮HistGradientBoostingRegressor作為替代
代碼示例
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
# 建立模型
regr = RandomForestRegressor(
n_estimators=100, # 樹的數量
max_depth=10, # 樹的最大深度
min_samples_split=5, # 分割節點所需的最小樣本數
random_state=42 # 隨機種子
)
# 擬合模型
regr.fit(X_train, y_train)
# 預測
y_pred = regr.predict(X_test)
from sklearn import linear_model,metrics
rf_r2 = metrics.r2_score(ytest, y_pred)
print(f"随机森林 R²: {rf_r2:.4f}")
隨機森林是機器學習中
最實用、最穩健的算法之一,
通常是回歸問題的首選模型之一。
推薦hahow線上學習python: https://igrape.net/30afN