直方圖梯度提升分類器#
- 類別 sklearn.ensemble.HistGradientBoostingClassifier(loss='log_loss', *, learning_rate=0.1, max_iter=100, max_leaf_nodes=31, max_depth=None, min_samples_leaf=20, l2_regularization=0.0, max_features=1.0, max_bins=255, categorical_features='from_dtype', monotonic_cst=None, interaction_cst=None, warm_start=False, early_stopping='auto', scoring='loss', validation_fraction=0.1, n_iter_no_change=10, tol=1e-07, verbose=0, random_state=None, class_weight=None)[原始碼]#
基於直方圖的梯度提升分類樹。
對於大型資料集(n_samples >= 10000),此估算器比
GradientBoostingClassifier
快得多。此估算器原生支援遺失值 (NaN)。在訓練期間,樹狀結構產生器會在每個分割點學習具有遺失值的樣本應該根據潛在增益移至左側或右側子節點。預測時,具有遺失值的樣本會相應地指派給左側或右側子節點。如果在訓練期間未遇到給定特徵的遺失值,則具有遺失值的樣本會對應到具有最多樣本的子節點。
此實作的靈感來自於 LightGBM。
請在使用者指南中閱讀更多資訊。
在 0.21 版中新增。
- 參數:
- loss{‘log_loss’}, default=’log_loss’
在提升程序中使用的損失函數。
對於二元分類問題,'log_loss' 也稱為邏輯損失、二項式偏差或二元交叉熵。在內部,模型在每次提升迭代中擬合一個樹狀結構,並使用邏輯 sigmoid 函數 (expit) 作為反向連結函數來計算預測的類別正機率。
對於多類別分類問題,'log_loss' 也稱為多項式偏差或類別交叉熵。在內部,模型在每次提升迭代和每個類別中擬合一個樹狀結構,並使用 softmax 函數作為反向連結函數來計算預測的類別機率。
- learning_ratefloat,default=0.1
學習率,也稱為收縮。這用作葉值的一個乘法因數。對於無收縮,請使用
1
。- max_iterint,default=100
提升程序的最大迭代次數,即二元分類的最大樹狀結構數。對於多類別分類,每次迭代會建立
n_classes
個樹狀結構。- max_leaf_nodesint 或 None,default=31
每個樹狀結構的最大葉節點數。必須嚴格大於 1。如果為 None,則沒有最大限制。
- max_depthint 或 None,default=None
每個樹狀結構的最大深度。樹狀結構的深度是從根到最深葉的邊數。預設情況下,深度不受限制。
- min_samples_leafint,default=20
每個葉的最小樣本數。對於少於數百個樣本的小型資料集,建議降低此值,因為只會建立非常淺的樹狀結構。
- l2_regularizationfloat,default=0
懲罰具有小 Hessian 葉節點的 L2 正規化參數。對於無正規化 (預設),請使用
0
。- max_featuresfloat,default=1.0
在每個節點分割中隨機選擇的特徵比例。這是一種正規化形式,較小的值會使樹狀結構的學習效果較弱,並可能防止過度擬合。如果存在
interaction_cst
的互動限制,則只會將允許的特徵納入子取樣考量。在 1.4 版中新增。
- max_binsint,default=255
用於非遺失值的最大分箱數。在訓練之前,輸入陣列
X
的每個特徵都會分箱到整數值分箱中,這允許更快的訓練階段。具有少量唯一值的特徵可以使用少於max_bins
的分箱。除了max_bins
分箱之外,永遠會為遺失值保留一個額外的分箱。不得大於 255。- categorical_features類陣列 {bool, int, str},形狀為 (n_features) 或 (n_categorical_features,),default=None
表示類別特徵。
None:不會將任何特徵視為類別。
布林類陣列:布林遮罩,表示類別特徵。
整數類陣列:表示類別特徵的整數索引。
字串類陣列:類別特徵的名稱(假設訓練資料具有特徵名稱)。
"from_dtype"
:將資料框架中 dtype 為「類別」的欄視為類別特徵。輸入必須是一個公開__dataframe__
方法(例如 pandas 或 polars 資料框架)的物件,才能使用此功能。
對於每個類別特徵,最多必須有
max_bins
個唯一類別。編碼為數值 dtype 的類別特徵的負值會視為遺失值。所有類別值都會轉換為浮點數。這表示 1.0 和 1 的類別值會視為相同的類別。請在使用者指南中閱讀更多資訊。
在 0.24 版中新增。
在 1.2 版中變更: 新增對特徵名稱的支援。
在 1.4 版中變更: 新增
"from_dtype"
選項。- monotonic_cst類陣列的整數,形狀為 (n_features) 或 dict,預設為 None
使用以下整數值指定在每個特徵上強制執行的單調限制
1:單調遞增
0:無限制
-1:單調遞減
如果是一個具有字串鍵的字典,則依名稱將特徵映射到單調約束。如果是一個陣列,則依位置將特徵映射到約束。請參閱使用特徵名稱指定單調約束以查看使用範例。
這些約束僅適用於二元分類,並且作用於正類別的機率。請在使用者指南中閱讀更多資訊。
在 0.23 版本中新增。
在 1.2 版本中變更:接受以特徵名稱為鍵的約束字典。
- interaction_cst{“pairwise”, “no_interactions”} 或整數列表/元組/集合的序列,預設值=None
指定交互約束,即可以在子節點分割中彼此交互的特徵集合。
每個項目指定允許彼此交互的特徵索引集合。如果特徵數量超過這些約束中指定的數量,則將它們視為指定為一個額外的集合。
字串 “pairwise” 和 “no_interactions” 分別是僅允許成對交互或不允許交互的簡寫。
例如,總共有 5 個特徵,
interaction_cst=[{0, 1}]
等效於interaction_cst=[{0, 1}, {2, 3, 4}]
,並指定樹的每個分支將僅在特徵 0 和 1 上分割,或僅在特徵 2、3 和 4 上分割。在 1.2 版本中新增。
- warm_startbool,預設值=False
當設定為
True
時,重用先前呼叫 fit 的解,並向集成模型添加更多估計器。為了使結果有效,估計器應僅在相同的資料上重新訓練。請參閱術語表。- early_stopping‘auto’ 或 bool,預設值=’auto’
如果為 ‘auto’,則當樣本大小大於 10000 時,啟用提前停止。如果為 True,則啟用提前停止,否則禁用提前停止。
在 0.23 版本中新增。
- scoringstr 或可呼叫物件或 None,預設值=’loss’
用於提前停止的評分參數。它可以是一個單一字串(請參閱評分參數:定義模型評估規則)或一個可呼叫物件(請參閱可呼叫的評分器)。如果為 None,則使用估計器的預設評分器。如果
scoring='loss'
,則根據損失值檢查提前停止。僅在執行提前停止時使用。- validation_fractionint 或 float 或 None,預設值=0.1
保留為提前停止驗證資料的訓練資料比例(或絕對大小)。如果為 None,則在訓練資料上執行提前停止。僅在執行提前停止時使用。
- n_iter_no_changeint,預設值=10
用於決定何時「提前停止」。當最後
n_iter_no_change
個分數中沒有一個比倒數第n_iter_no_change - 1
個分數更好時,將停止擬合過程,直到達到某個容差。僅在執行提前停止時使用。- tolfloat,預設值=1e-7
比較分數時要使用的絕對容差。容差越高,我們越有可能提前停止:更高的容差意味著後續迭代更難被視為對參考分數的改進。
- verboseint,預設值=0
詳細程度。如果不為零,則列印有關擬合過程的一些資訊。
1
僅列印摘要資訊,2
列印每次迭代的資訊。- random_stateint、RandomState 實例或 None,預設值=None
偽隨機數產生器,用於控制 binning 過程中的子取樣,以及啟用提前停止時的訓練/驗證資料分割。傳遞一個整數以在多個函式呼叫中產生可重複的輸出。請參閱術語表。
- class_weightdict 或 ‘balanced’,預設值=None
與類別關聯的權重,格式為
{class_label: weight}
。如果未給定,則所有類別的權重都應為 1。“balanced” 模式使用 y 的值,自動調整權重,使其與輸入資料中類別頻率成反比,計算方式為n_samples / (n_classes * np.bincount(y))
。請注意,如果指定了sample_weight
,則這些權重將與 sample_weight(透過 fit 方法傳遞)相乘。在 1.2 版本中新增。
- 屬性:
- classes_陣列,形狀 = (n_classes,)
類別標籤。
- do_early_stopping_bool
指示訓練期間是否使用提前停止。
n_iter_
intboosting 過程的迭代次數。
- n_trees_per_iteration_int
每次迭代時建立的樹的數量。對於二元分類,此值等於 1,對於多類別分類,此值等於
n_classes
。- train_score_ndarray,形狀 (n_iter_+1,)
每次迭代時在訓練資料上的分數。第一個條目是第一次迭代之前集成模型的分數。根據
scoring
參數計算分數。如果scoring
不是 ‘loss’,則在最多 10000 個樣本的子集上計算分數。如果沒有提前停止,則為空。- validation_score_ndarray,形狀 (n_iter_+1,)
每次迭代時在保留的驗證資料上的分數。第一個條目是第一次迭代之前集成模型的分數。根據
scoring
參數計算分數。如果沒有提前停止或validation_fraction
為 None,則為空。- is_categorical_ndarray,形狀 (n_features, ) 或 None
用於類別特徵的布林遮罩。如果沒有類別特徵,則為
None
。- n_features_in_int
在 fit 期間看到的特徵數量。
在 0.24 版中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時才定義。在 1.0 版本中新增。
另請參閱
GradientBoostingClassifier
精確梯度 boosting 方法,在具有大量樣本的資料集上無法很好地擴展。
sklearn.tree.DecisionTreeClassifier
決策樹分類器。
RandomForestClassifier
一個元估計器,它在資料集的各種子樣本上擬合多個決策樹分類器,並使用平均來提高預測準確性並控制過度擬合。
AdaBoostClassifier
一個元估計器,它首先在原始資料集上擬合一個分類器,然後在相同資料集上擬合分類器的其他副本,其中錯誤分類實例的權重被調整,以便後續的分類器更關注困難的案例。
範例
>>> from sklearn.ensemble import HistGradientBoostingClassifier >>> from sklearn.datasets import load_iris >>> X, y = load_iris(return_X_y=True) >>> clf = HistGradientBoostingClassifier().fit(X, y) >>> clf.score(X, y) 1.0
- decision_function(X)[原始碼]#
計算
X
的決策函式。- 參數:
- X類陣列,形狀 (n_samples, n_features)
輸入樣本。
- 回傳值:
- decisionndarray,形狀 (n_samples,) 或 (n_samples, n_trees_per_iteration)
每個樣本的原始預測值(即樹葉的總和)。n_trees_per_iteration 等於多類別分類中的類別數。
- fit(X, y, sample_weight=None)[原始碼]#
擬合梯度 boosting 模型。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
輸入樣本。
- y形狀為 (n_samples,) 的類陣列
目標值。
- sample_weight形狀為 (n_samples,) 的類陣列,預設值=None
訓練資料的權重。
在 0.23 版本中新增。
- 回傳值:
- self物件
已擬合的估計器。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看使用者指南,了解路由機制如何運作。
- 回傳值:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設值為 True
如果為 True,將會回傳此估算器及其包含的子物件(也是估算器)的參數。
- 回傳值:
- paramsdict
參數名稱對應到其值的映射。
- property n_iter_#
boosting 過程的迭代次數。
- predict(X)[原始碼]#
預測 X 的類別。
- 參數:
- X類陣列,形狀 (n_samples, n_features)
輸入樣本。
- 回傳值:
- yndarray,形狀為 (n_samples,)
預測的類別。
- predict_proba(X)[原始碼]#
預測 X 的類別機率。
- 參數:
- X類陣列,形狀 (n_samples, n_features)
輸入樣本。
- 回傳值:
- pndarray,形狀為 (n_samples, n_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
樣本權重。
- 回傳值:
- scorefloat
self.predict(X)
相對於y
的平均準確率。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HistGradientBoostingClassifier [原始碼]#
要求傳遞到
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>
,因此可以更新巢狀物件的每個組件。- 參數:
- **paramsdict
估算器參數。
- 回傳值:
- self估算器實例
估算器實例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HistGradientBoostingClassifier [原始碼]#
要求傳遞到
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物件
更新後的物件。
- staged_decision_function(X)[原始碼]#
計算
X
在每次迭代的決策函數。此方法允許在每個階段後進行監控(即確定測試集上的錯誤)。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
輸入樣本。
- 產生:
- decisionndarray 的產生器,形狀為 (n_samples,) 或 (n_samples, n_trees_per_iteration)
輸入樣本的決策函數,對應於從整體樹狀結構預測的原始值。類別對應於屬性 classes_ 中的類別。