決策樹分類器#

class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', 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, class_weight=None, ccp_alpha=0.0, monotonic_cst=None)[原始碼]#

決策樹分類器。

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

參數:
criterion{“gini”, “entropy”, “log_loss”}, default=”gini”

用於衡量分割品質的函數。支援的準則包括用於吉尼不純度的 “gini”,以及用於夏農資訊增益的 “log_loss” 和 “entropy”,請參閱數學公式

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

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

max_depthint, default=None

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

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 版本中新增。

class_weight字典、字典列表或 “balanced”,預設值為 None

與類別相關聯的權重,格式為 {class_label: weight}。如果為 None,則假設所有類別的權重皆為 1。對於多輸出問題,可以按照 y 的列順序提供字典列表。

請注意,對於多輸出(包括多標籤),應在每個列自己的字典中定義每個類別的權重。例如,對於四類多標籤分類,權重應為 [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}],而不是 [{1:1}, {2:5}, {3:1}, {4:1}]。

“balanced” 模式使用 y 的值來自動調整權重,權重與輸入資料中類別頻率成反比,計算方式為 n_samples / (n_classes * np.bincount(y))

對於多輸出,y 的每一列的權重將會相乘。

請注意,如果指定了 sample_weight,這些權重將會與 sample_weight(透過 fit 方法傳遞)相乘。

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

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

在 0.22 版本中新增。

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

  • 0:無約束

  • -1:單調遞減

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

單調性約束不支援下列情況:
  • 多類別分類(即當 n_classes > 2 時),

  • 多輸出分類(即當 n_outputs_ > 1 時),

  • 在具有遺失值的資料上訓練的分類。

約束條件適用於正類別的機率。

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

在 1.4 版本中新增。

屬性:
classes_形狀為 (n_classes,) 的 ndarray 或 ndarray 的列表

類別標籤(單輸出問題)或類別標籤陣列的列表(多輸出問題)。

feature_importances_形狀為 (n_features,) 的 ndarray

傳回特徵重要性。

max_features_整數

max_features 的推斷值。

n_classes_整數或整數列表

類別數(針對單輸出問題),或包含每個輸出的類別數的列表(針對多輸出問題)。

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),有關這些屬性的基本用法,請參閱了解決策樹結構

另請參閱

決策樹迴歸器 (DecisionTreeRegressor)

決策樹迴歸器。

註解

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

predict 方法使用 numpy.argmax 函數來處理 predict_proba 的輸出。這表示在預測機率最高的值相等的情況下,分類器將預測 classes_ 中索引最低的相等類別。

參考文獻

[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_iris
>>> from sklearn.model_selection import cross_val_score
>>> from sklearn.tree import DecisionTreeClassifier
>>> clf = DecisionTreeClassifier(random_state=0)
>>> iris = load_iris()
>>> cross_val_score(clf, iris.data, iris.target, cv=10)
...                             
...
array([ 1.     ,  0.93...,  0.86...,  0.93...,  0.93...,
        0.93...,  0.93...,  1.     ,  0.93...,  1.      ])
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_#

傳回特徵重要性。

特徵的重要性計算為該特徵所帶來的(正規化)準則總減少量。也稱為吉尼重要性。

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

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

依特徵正規化的準則總減少量(吉尼重要性)。

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) 的類陣列

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

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

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

check_input布林值,預設值為 True

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

傳回值:
selfDecisionTreeClassifier

已擬合的估算器。

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) 的類陣列

預測的類別或預測值。

predict_log_proba(X)[原始碼]#

預測輸入樣本 X 的類別對數機率。

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

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

傳回值:
proba形狀為 (n_samples, n_classes) 的 ndarray,或如果 n_outputs > 1,則為 n_outputs 個陣列的列表

輸入樣本的類別對數機率。類別的順序對應於屬性 classes_ 中的順序。

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

預測輸入樣本 X 的類別機率。

預測的類別機率是葉節點中相同類別的樣本比例。

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

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

check_input布林值,預設值為 True

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

傳回值:
proba形狀為 (n_samples, n_classes) 的 ndarray,或如果 n_outputs > 1,則為 n_outputs 個陣列的列表

輸入樣本的類別機率。類別的順序對應於屬性 classes_ 中的順序。

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

返回給定測試數據和標籤的平均準確度。

在多標籤分類中,這是子集準確度,這是一個嚴苛的指標,因為您需要每個樣本的每個標籤集都得到正確預測。

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

測試樣本。

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

X 的真實標籤。

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

樣本權重。

傳回值:
score浮點數

self.predict(X) 相對於 y 的平均準確度。

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

請求傳遞給 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> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**params字典

估計器參數。

傳回值:
self估計器實例

估計器實例。

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

請求傳遞至 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物件

已更新的物件。