決策樹分類器#
- 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
,則N
、N_t
、N_t_R
和N_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)
,有關這些屬性的基本用法,請參閱了解決策樹結構。
另請參閱
註解
控制樹木大小的參數(例如
max_depth
、min_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_path
Bunch
類似字典的物件,具有以下屬性。
- ccp_alphasndarray
剪枝期間子樹的有效 alpha 值。
- impuritiesndarray
子樹葉節點的雜質總和,對應於
ccp_alphas
中的 alpha 值。
- ccp_path
- 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_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看使用者指南,了解路由機制的運作方式。
- 傳回值:
- routingMetadataRequest
封裝路由資訊的
MetadataRequest
。
- 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
fit
中sample_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
用於
score
中sample_weight
參數的中繼資料路由。
- 傳回值:
- self物件
已更新的物件。