決策樹迴歸器#

class sklearn.tree.DecisionTreeRegressor(*, criterion='squared_error', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, ccp_alpha=0.0, monotonic_cst=None)[原始碼]#

一個決策樹迴歸器。

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

參數:
criterion{“squared_error”, “friedman_mse”, “absolute_error”, “poisson”}, default=”squared_error”

用於衡量分割品質的函數。支援的標準包括:對於均方誤差的 “squared_error”,它等於作為特徵選擇標準的變異數縮減,並使用每個終端節點的平均值來最小化 L2 損失;“friedman_mse” 使用均方誤差和 Friedman 的潛在分割改進分數;對於平均絕對誤差的 “absolute_error”,它使用每個終端節點的中位數來最小化 L1 損失;以及使用泊松偏差的半均值縮減來尋找分割的 “poisson”。

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

在 0.24 版本中新增: 泊松偏差標準。

splitter{“best”, “random”}, default=”best”

用於選擇每個節點分割的策略。支援的策略包括 “best” 來選擇最佳分割,以及 “random” 來選擇最佳隨機分割。

max_depthint, default=None

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

有關 max_depth 如何影響模型的範例,請參閱決策樹迴歸

min_samples_splitint 或 float, default=2

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

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

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

在 0.18 版本中變更: 新增分數的浮點數值。

min_samples_leafint 或 float, default=1

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

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

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

在 0.18 版本中變更: 新增分數的浮點數值。

min_weight_fraction_leaffloat, default=0.0

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

max_featuresint, float 或 {“sqrt”, “log2”}, default=None

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

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

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

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

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

  • 如果為 None,則 max_features=n_features

注意:在找到節點樣本的至少一個有效分割之前,不會停止搜尋分割,即使它需要有效地檢查超過 max_features 個特徵。

random_stateint, RandomState 實例或 None, default=None

控制估計器的隨機性。即使將 splitter 設為 "best",也會在每次分割時隨機排列特徵。當 max_features < n_features 時,演算法會在每次分割時隨機選擇 max_features,然後在其中尋找最佳分割。但是,即使 max_features=n_features,最佳找到的分割也可能在不同的執行之間有所不同。如果幾個分割的標準改進相同,並且必須隨機選擇一個分割,則會出現這種情況。為了在擬合期間獲得確定性行為,必須將 random_state 固定為整數。有關詳細資訊,請參閱詞彙表

max_leaf_nodesint, default=None

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

min_impurity_decreasefloat, default=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 新增。

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

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

版本 0.22 新增。

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

  • 0:無約束

  • -1:單調遞減

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

以下情況不支援單調性約束:
  • 多輸出迴歸(即當 n_outputs_ > 1 時),

  • 使用含有遺失值的資料訓練的迴歸。

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

版本 1.4 新增。

屬性:
feature_importances_形狀為 (n_features,) 的 ndarray

回傳特徵重要性。

max_features_整數

推斷出的 max_features 值。

n_features_in_整數

fit 期間看到的特徵數量。

版本 0.24 新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

版本 1.0 新增。

n_outputs_整數

執行 fit 時的輸出數量。

tree_Tree 實例

底層的 Tree 物件。有關 Tree 物件的屬性,請參閱 help(sklearn.tree._tree.Tree),而有關這些屬性的基本用法,請參閱 了解決策樹結構

另請參閱

決策樹分類器

決策樹分類器。

注意事項

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

參考資料

[2]

L. Breiman, J. Friedman, R. Olshen, 和 C. Stone,“Classification and Regression Trees”,Wadsworth,Belmont, CA,1984。

[3]

T. Hastie, R. Tibshirani 和 J. Friedman。“Elements of Statistical Learning”,Springer,2009。

[4]

L. Breiman, 和 A. Cutler,“Random Forests”,https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

範例

>>> from sklearn.datasets import load_diabetes
>>> from sklearn.model_selection import cross_val_score
>>> from sklearn.tree import DecisionTreeRegressor
>>> X, y = load_diabetes(return_X_y=True)
>>> regressor = DecisionTreeRegressor(random_state=0)
>>> cross_val_score(regressor, X, y, cv=10)
...                    
...
array([-0.39..., -0.46...,  0.02...,  0.06..., -0.50...,
       0.16...,  0.11..., -0.73..., -0.30..., -0.00...])
apply(X, check_input=True)[來源]#

回傳每個樣本預測為的葉節點索引。

版本 0.17 新增。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

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

check_input布林值,預設值為 True

允許繞過多個輸入檢查。除非您知道自己在做什麼,否則請勿使用此參數。

回傳值:
X_leaves形狀為 (n_samples,) 的類陣列

對於 X 中的每個資料點 x,回傳 x 最終所在的葉節點索引。葉節點編號在 [0; self.tree_.node_count) 範圍內,編號可能會有間隔。

cost_complexity_pruning_path(X, y, sample_weight=None)[來源]#

計算最小成本複雜度剪枝期間的剪枝路徑。

有關剪枝過程的詳細資訊,請參閱 最小成本複雜度剪枝

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

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

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列

目標值(類別標籤),以整數或字串表示。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。如果為 None,則樣本權重相等。在搜尋每個節點中的分割時,將忽略會建立淨權重為零或負數的子節點的分割。如果分割會導致任何單一類別在任一子節點中具有負權重,也會忽略該分割。

回傳值:
ccp_pathBunch

類字典物件,具有下列屬性。

ccp_alphasndarray

剪枝期間子樹的有效 alpha 值。

impuritiesndarray

對應於 ccp_alphas 中 alpha 值的子樹葉節點雜質總和。

decision_path(X, check_input=True)[原始碼]#

回傳樹中的決策路徑。

於 0.18 版本新增。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

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

check_input布林值,預設值為 True

允許繞過多個輸入檢查。除非您知道自己在做什麼,否則請勿使用此參數。

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

回傳一個節點指示器 CSR 矩陣,其中非零元素表示樣本經過的節點。

property feature_importances_#

回傳特徵重要性。

特徵的重要性計算為該特徵帶來的標準化準則總減少量。它也被稱為 Gini 重要性。

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

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

依特徵標準化的準則總減少量 (Gini 重要性)。

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

從訓練集 (X, y) 建構一個決策樹迴歸器。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

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

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列

目標值(實數)。為了獲得最大效率,請使用 dtype=np.float64order='C'

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。如果為 None,則樣本權重相等。在每個節點中搜尋分割時,將忽略創建淨零或負權重子節點的分割。

check_input布林值,預設值為 True

允許繞過多個輸入檢查。除非您知道自己在做什麼,否則請勿使用此參數。

回傳值:
selfDecisionTreeRegressor

擬合的估算器。

get_depth()[原始碼]#

回傳決策樹的深度。

樹的深度是根和任何葉子之間的最大距離。

回傳值:
self.tree_.max_depthint

樹的最大深度。

get_metadata_routing()[原始碼]#

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

請查看使用手冊 了解路由機制如何運作。

回傳值:
routingMetadataRequest

一個封裝路由資訊的 MetadataRequest

get_n_leaves()[原始碼]#

回傳決策樹的葉子數量。

回傳值:
self.tree_.n_leavesint

葉子數量。

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

取得此估算器的參數。

參數:
deepbool,預設為 True

如果為 True,將回傳此估算器和包含的子物件(即估算器)的參數。

回傳值:
paramsdict

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

predict(X, check_input=True)[原始碼]#

預測 X 的類別或迴歸值。

對於分類模型,會回傳 X 中每個樣本的預測類別。對於迴歸模型,則會回傳基於 X 的預測值。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}

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

check_input布林值,預設值為 True

允許繞過多個輸入檢查。除非您知道自己在做什麼,否則請勿使用此參數。

回傳值:
y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列

預測的類別或預測值。

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 的期望值,而不考慮輸入特徵的常數模型,其 \(R^2\) 分數將為 0.0。

參數:
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

樣本權重。

回傳值:
scorefloat

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$') DecisionTreeRegressor[原始碼]#

請求傳遞到 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 參數的中繼資料路由。

回傳值:
selfobject

更新後的物件。

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

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

回傳值:
self估計器實例

估計器實例。

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

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

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

每個參數的選項為:

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

  • False:不請求中繼資料,且 meta-estimator 不會將其傳遞至 score

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

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

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

於 1.3 版本新增。

注意

只有當此估計器被用作元估計器的子估計器時,此方法才相關,例如在 Pipeline 內使用。否則它沒有效果。

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

用於 score 中的 sample_weight 參數的中繼資料路由。

回傳值:
selfobject

更新後的物件。