RandomForestRegressor#

class sklearn.ensemble.RandomForestRegressor(n_estimators=100, *, criterion='squared_error', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=1.0, max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, ccp_alpha=0.0, max_samples=None, monotonic_cst=None)[source]#

隨機森林迴歸器。

隨機森林是一個元估計器,它在數據集的各種子樣本上擬合多個決策樹迴歸器,並使用平均來提高預測準確性和控制過度擬合。森林中的樹使用最佳分割策略,即等同於將 splitter="best" 傳遞給底層的 DecisionTreeRegressor。如果 bootstrap=True (預設值),則使用 max_samples 參數控制子樣本大小,否則使用整個數據集來建立每棵樹。

有關基於樹的集成模型之間的比較,請參閱範例 比較隨機森林和直方圖梯度提升模型

請參閱 使用者指南 中了解更多資訊。

參數:
n_estimatorsint,預設值為 100

森林中樹的數量。

在版本 0.22 中變更:n_estimators 的預設值在 0.22 中從 10 變更為 100。

criterion{“squared_error”, “absolute_error”, “friedman_mse”, “poisson”},預設值為 “squared_error”

衡量分割品質的函數。支援的標準為:「squared_error」,用於均方誤差,它等於作為特徵選擇標準的變異數減少,並使用每個終端節點的均值來最小化 L2 損失;「friedman_mse」,使用均方誤差和弗里德曼的改進分數來進行潛在的分割;「absolute_error」,用於平均絕對誤差,使用每個終端節點的中位數來最小化 L1 損失;以及「poisson」,它使用 Poisson 偏差的減少來尋找分割。使用「absolute_error」進行訓練顯著慢於使用「squared_error」。

在版本 0.18 中新增:平均絕對誤差 (MAE) 標準。

在版本 1.0 中新增:Poisson 標準。

max_depthint,預設值為 None

樹的最大深度。如果為 None,則會展開節點,直到所有葉節點都是純的,或者直到所有葉節點包含的樣本少於 min_samples_split。

min_samples_splitint 或 float,預設值為 2

分割內部節點所需的最小樣本數

  • 如果為 int,則將 min_samples_split 視為最小數量。

  • 如果為 float,則 min_samples_split 是一個分數,且 ceil(min_samples_split * n_samples) 是每次分割的最小樣本數。

在版本 0.18 中變更:新增了用於分數的 float 值。

min_samples_leafint 或 float,預設值為 1

葉節點所需的最小樣本數。只有在每個左右分支中都留下至少 min_samples_leaf 個訓練樣本的情況下,才會考慮任何深度的分割點。這可能會產生平滑模型的效果,尤其是在迴歸中。

  • 如果為 int,則將 min_samples_leaf 視為最小數量。

  • 如果為 float,則 min_samples_leaf 是一個分數,且 ceil(min_samples_leaf * n_samples) 是每個節點的最小樣本數。

在版本 0.18 中變更:新增了用於分數的 float 值。

min_weight_fraction_leaffloat,預設值為 0.0

葉節點所需的權重總和的最小加權分數(所有輸入樣本的權重)。當未提供 sample_weight 時,樣本具有相等的權重。

max_features{“sqrt”, “log2”, None}, int 或 float,預設值為 1.0

在尋找最佳分割時要考慮的特徵數量

  • 如果為 int,則在每次分割時考慮 max_features 個特徵。

  • 如果為浮點數,則 max_features 為一個分數,且在每次分割時會考慮 max(1, int(max_features * n_features_in_)) 個特徵。

  • 如果為 “sqrt”,則 max_features=sqrt(n_features)

  • 如果為 “log2”,則 max_features=log2(n_features)

  • 如果為 None 或 1.0,則 max_features=n_features

注意

預設值 1.0 等同於 Bagging 樹,而設定較小的值(例如 0.3)可以實現更高的隨機性。

在 1.1 版中變更: max_features 的預設值從 "auto" 變更為 1.0。

注意:搜尋分割不會停止,直到找到至少一個有效的節點樣本分割,即使這需要實際上檢查超過 max_features 個特徵。

max_leaf_nodesint,預設值=None

以最佳優先的方式,生長具有 max_leaf_nodes 個葉節點的樹。最佳節點定義為雜質的相對減少量。如果為 None,則葉節點的數量沒有限制。

min_impurity_decreasefloat,預設值=0.0

如果分割導致雜質減少量大於或等於此值,則會分割節點。

加權雜質減少的方程式如下:

N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)

其中 N 是樣本總數,N_t 是目前節點的樣本數,N_t_L 是左子節點的樣本數,而 N_t_R 是右子節點的樣本數。

如果傳遞 sample_weight,則 NN_tN_t_RN_t_L 皆指加權總和。

新增於 0.19 版。

bootstrapbool,預設值=True

是否在建構樹時使用自助採樣 (bootstrap samples)。如果為 False,則使用整個資料集來建構每棵樹。

oob_scorebool 或可呼叫物件,預設值=False

是否使用袋外樣本 (out-of-bag samples) 來估計泛化分數。預設情況下,使用 r2_score。提供具有 metric(y_true, y_pred) 簽名的可呼叫物件,以使用自訂指標。僅在 bootstrap=True 時可用。

n_jobsint,預設值=None

要平行執行的工作數量。fitpredictdecision_pathapply 皆在樹上平行化。None 表示 1,除非在 joblib.parallel_backend 內容中。-1 表示使用所有處理器。如需詳細資訊,請參閱詞彙表

random_stateint、RandomState 實例或 None,預設值=None

控制建構樹時所用樣本的自助採樣 (如果 bootstrap=True),以及在尋找每個節點最佳分割時要考慮的特徵取樣 (如果 max_features < n_features)。如需詳細資訊,請參閱詞彙表

verboseint,預設值=0

控制擬合和預測時的詳細程度。

warm_startbool,預設值=False

當設定為 True 時,重複使用先前呼叫的擬合結果,並將更多估計器加入集成中;否則,只擬合一個全新的森林。如需詳細資訊,請參閱詞彙表擬合額外樹

ccp_alpha非負數浮點數,預設值=0.0

用於最小成本複雜度剪枝的複雜度參數。將選擇成本複雜度小於 ccp_alpha 的最大成本複雜度的子樹。預設情況下,不執行剪枝。如需詳細資訊,請參閱最小成本複雜度剪枝。如需此類剪枝的範例,請參閱使用成本複雜度剪枝的決策樹後剪枝

新增於 0.22 版。

max_samplesint 或 float,預設值=None

如果 bootstrap 為 True,則從 X 中抽取用於訓練每個基本估計器的樣本數。

  • 如果為 None (預設值),則抽取 X.shape[0] 個樣本。

  • 如果為 int,則抽取 max_samples 個樣本。

  • 如果為 float,則抽取 max(round(n_samples * max_samples), 1) 個樣本。因此,max_samples 應在間隔 (0.0, 1.0] 內。

新增於 0.22 版。

monotonic_cst形狀為 (n_features) 的類陣列整數,預設值=None
表示要對每個特徵強制執行的單調性約束。
  • 1:單調遞增

  • 0:無約束

  • -1:單調遞減

如果 monotonic_cst 為 None,則不套用任何約束。

多輸出迴歸(即當 n_outputs_ > 1 時),
  • 在具有遺失值資料上訓練的迴歸,

  • 不支援單調性約束。

請在使用者指南中閱讀更多資訊。

新增於 1.4 版。

屬性:
estimator_DecisionTreeRegressor

用於建立擬合子估計器集合的子估計器範本。

新增於 1.2 版: base_estimator_ 已重新命名為 estimator_

estimators_DecisionTreeRegressor 的列表

擬合子估計器的集合。

feature_importances_形狀為 (n_features,) 的 ndarray

基於雜質的特徵重要性。

n_features_in_int

擬合期間看到的特徵數量。

新增於 0.24 版。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

擬合期間看到的特徵名稱。僅當 X 具有全部為字串的特徵名稱時才定義。

新增於 1.0 版。

n_outputs_int

當執行 fit 時的輸出數量。

oob_score_float

使用袋外估計獲得的訓練資料集分數。此屬性僅在 oob_score 為 True 時存在。

oob_prediction_形狀為 (n_samples,) 或 (n_samples, n_outputs) 的 ndarray

使用訓練集上的袋外估計計算的預測。此屬性僅在 oob_score 為 True 時存在。

estimators_samples_陣列列表

每個基本估計器的抽取樣本子集。

另請參閱

sklearn.tree.DecisionTreeRegressor

決策樹迴歸器。

sklearn.ensemble.ExtraTreesRegressor

極端隨機樹迴歸器的集成。

sklearn.ensemble.HistGradientBoostingRegressor

基於直方圖的梯度提升迴歸樹,對於大型資料集非常快速 (n_samples >= 10_000)。

註解

控制樹狀結構大小的參數(例如 max_depthmin_samples_leaf 等)的預設值會導致樹狀結構完全成長且未修剪,在某些數據集上可能會非常大。為了減少記憶體消耗,應通過設定這些參數值來控制樹狀結構的複雜性和大小。

在每次分割時,特徵總是會隨機排列。因此,即使使用相同的訓練數據、max_features=n_featuresbootstrap=False,找到的最佳分割也可能有所不同,如果評估標準的改進對於在搜索最佳分割期間枚舉的幾個分割是相同的。為了在擬合過程中獲得確定性的行為,必須固定 random_state

預設值 max_features=1.0 使用 n_features 而不是 n_features / 3。後者最初在 [1] 中提出,而前者最近在 [2] 中通過經驗證明是合理的。

參考文獻

[1]
  1. Breiman, “Random Forests”, Machine Learning, 45(1), 5-32, 2001.

[2]

P. Geurts, D. Ernst., and L. Wehenkel, “Extremely randomized trees”, Machine Learning, 63(1), 3-42, 2006.

範例

>>> from sklearn.ensemble import RandomForestRegressor
>>> from sklearn.datasets import make_regression
>>> X, y = make_regression(n_features=4, n_informative=2,
...                        random_state=0, shuffle=False)
>>> regr = RandomForestRegressor(max_depth=2, random_state=0)
>>> regr.fit(X, y)
RandomForestRegressor(...)
>>> print(regr.predict([[0, 0, 0, 0]]))
[-8.32987858]
apply(X)[原始碼]#

將森林中的樹應用於 X,返回葉節點索引。

參數:
X形狀為 (n_samples, n_features) 的類數組或稀疏矩陣

輸入樣本。在內部,其 dtype 將會被轉換為 dtype=np.float32。如果提供了稀疏矩陣,它將被轉換為稀疏 csr_matrix

返回:
X_leaves形狀為 (n_samples, n_estimators) 的 ndarray

對於 X 中的每個數據點 x 以及森林中的每棵樹,返回 x 最終所在的葉節點的索引。

decision_path(X)[原始碼]#

返回森林中的決策路徑。

在 0.18 版本中新增。

參數:
X形狀為 (n_samples, n_features) 的類數組或稀疏矩陣

輸入樣本。在內部,其 dtype 將會被轉換為 dtype=np.float32。如果提供了稀疏矩陣,它將被轉換為稀疏 csr_matrix

返回:
indicator形狀為 (n_samples, n_nodes) 的稀疏矩陣

返回節點指示矩陣,其中非零元素表示樣本經過這些節點。該矩陣的格式為 CSR 格式。

n_nodes_ptr形狀為 (n_estimators + 1,) 的 ndarray

來自 indicator[n_nodes_ptr[i]:n_nodes_ptr[i+1]] 的列給出了第 i 個估計器的指示值。

property estimators_samples_#

每個基本估計器的抽取樣本子集。

返回一個動態生成的索引列表,用於識別用於擬合集成中每個成員的樣本,即袋內樣本。

注意:該列表會在每次調用屬性時重新建立,以通過不存儲抽樣數據來減少物件記憶體佔用量。因此,獲取該屬性可能會比預期的慢。

property feature_importances_#

基於雜質的特徵重要性。

越高,特徵越重要。特徵的重要性被計算為該特徵帶來的評估標準的(正規化)總減少量。它也被稱為 Gini 重要性。

警告:基於雜質的特徵重要性對於高基數特徵(許多唯一值)可能會產生誤導。請參閱 sklearn.inspection.permutation_importance 作為替代方案。

返回:
feature_importances_形狀為 (n_features,) 的 ndarray

此陣列的值總和為 1,除非所有樹都是僅由根節點組成的單節點樹,在這種情況下,它將是一個零陣列。

fit(X, y, sample_weight=None)[原始碼]#

從訓練集 (X, y) 建立樹的森林。

參數:
X形狀為 (n_samples, n_features) 的類數組或稀疏矩陣

訓練輸入樣本。在內部,其 dtype 將會被轉換為 dtype=np.float32。如果提供了稀疏矩陣,它將被轉換為稀疏 csc_matrix

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類數組

目標值(分類中的類別標籤,回歸中的實數)。

sample_weight形狀為 (n_samples,) 的類數組,預設值為 None

樣本權重。如果為 None,則樣本權重相等。在每個節點中搜索分割時,將忽略那些會創建淨零或負權重的子節點的分割。在分類的情況下,如果分割會導致任何一個子節點中任何單個類別帶有負權重,也會忽略這些分割。

返回:
self物件

已擬合的估計器。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看 使用者指南,了解路由機制如何運作。

返回:
routingMetadataRequest

一個 MetadataRequest,封裝路由資訊。

get_params(deep=True)[原始碼]#

取得此估計器的參數。

參數:
deepbool,預設值為 True

如果為 True,將會返回此估計器和所包含的子物件(為估計器)的參數。

返回:
params字典

參數名稱對應到其值的字典。

predict(X)[原始碼]#

預測 X 的回歸目標。

輸入樣本的預測回歸目標被計算為森林中樹的平均預測回歸目標。

參數:
X形狀為 (n_samples, n_features) 的類數組或稀疏矩陣

輸入樣本。在內部,其 dtype 將會被轉換為 dtype=np.float32。如果提供了稀疏矩陣,它將被轉換為稀疏 csr_matrix

返回:
y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的 ndarray

預測值。

score(X, y, sample_weight=None)[原始碼]#

返回預測的決定係數。

決定係數 \(R^2\) 定義為 \((1 - \frac{u}{v})\),其中 \(u\) 是殘差平方和 ((y_true - y_pred)** 2).sum(),而 \(v\) 是總平方和 ((y_true - y_true.mean()) ** 2).sum()。最佳可能分數為 1.0,且可能是負數(因為模型可能會任意變差)。一個始終預測 y 的期望值而忽略輸入特徵的恆定模型,將會得到 0.0 的 \(R^2\) 分數。

參數:
X形狀為 (n_samples, n_features) 的類數組

測試樣本。對於某些估計器,這可能是一個預先計算的核矩陣或一個形狀為 (n_samples, n_samples_fitted) 的通用物件列表,其中 n_samples_fitted 是在估計器的擬合中使用的樣本數量。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類數組

X 的真實值。

sample_weight形狀為 (n_samples,) 的類數組,預設值為 None

樣本權重。

返回:
score浮點數

self.predict(X) 相對於 y\(R^2\)

註解

在回歸器上調用 score 時使用的 \(R^2\) 分數,從 0.23 版本開始使用 multioutput='uniform_average',以與 r2_score 的預設值保持一致。這會影響所有多輸出回歸器的 score 方法(除了 MultiOutputRegressor 之外)。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') RandomForestRegressor[原始碼]#

請求傳遞至 fit 方法的中繼資料。

請注意,只有在 enable_metadata_routing=True 時此方法才相關(請參閱 sklearn.set_config)。請參閱關於路由機制如何運作的 使用者指南

每個參數的選項如下:

  • True:請求中繼資料,並在提供時將其傳遞給 fit。如果未提供中繼資料,則會忽略請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞給 fit

  • None:不請求中繼資料,且如果使用者提供,元估計器會引發錯誤。

  • str:應將中繼資料以給定的別名而不是原始名稱傳遞給元估計器。

預設值(sklearn.utils.metadata_routing.UNCHANGED)保留現有請求。這允許您更改某些參數的請求,而不更改其他參數。

在 1.3 版本中新增。

注意

只有當此估計器被用作元估計器的子估計器時,此方法才相關,例如在 Pipeline 內使用。否則,它不會產生任何影響。

參數:
sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED

fitsample_weight 參數的中繼資料路由。

返回:
self物件

更新後的物件。

set_params(**params)[原始碼]#

設定此估計器的參數。

該方法適用於簡單的估計器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個組件。

參數:
**paramsdict

估計器參數。

返回:
self估計器實例

估計器實例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') RandomForestRegressor[原始碼]#

請求傳遞至 score 方法的中繼資料。

請注意,只有在 enable_metadata_routing=True 時此方法才相關(請參閱 sklearn.set_config)。請參閱關於路由機制如何運作的 使用者指南

每個參數的選項如下:

  • True:請求中繼資料,並在提供時將其傳遞給 score。如果未提供中繼資料,則會忽略請求。

  • False:不請求中繼資料,且元估計器不會將其傳遞給 score

  • None:不請求中繼資料,且如果使用者提供,元估計器會引發錯誤。

  • str:應將中繼資料以給定的別名而不是原始名稱傳遞給元估計器。

預設值(sklearn.utils.metadata_routing.UNCHANGED)保留現有請求。這允許您更改某些參數的請求,而不更改其他參數。

在 1.3 版本中新增。

注意

只有當此估計器被用作元估計器的子估計器時,此方法才相關,例如在 Pipeline 內使用。否則,它不會產生任何影響。

參數:
sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight 參數的中繼資料路由。

返回:
self物件

更新後的物件。