HistGradientBoostingRegressor#
- class sklearn.ensemble.HistGradientBoostingRegressor(loss='squared_error', *, quantile=None, 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)[source]#
基於直方圖的梯度提升迴歸樹。
對於大型數據集(n_samples >= 10,000),此估算器比
GradientBoostingRegressor
快得多。此估算器原生支援缺失值(NaN)。在訓練期間,樹狀結構產生器會在每個分割點學習具有缺失值的樣本應該根據潛在的增益移動到左子節點還是右子節點。在預測時,具有缺失值的樣本會因此被指派到左子節點或右子節點。如果在訓練期間給定特徵沒有遇到缺失值,則具有缺失值的樣本會被映射到擁有最多樣本的子節點。請參閱 直方圖梯度提升樹中的特徵 以取得此功能的使用案例範例。
此實作的靈感來自 LightGBM。
請在 使用者指南 中閱讀更多內容。
在 0.21 版本中新增。
- 參數:
- loss{‘squared_error’, ‘absolute_error’, ‘gamma’, ‘poisson’, ‘quantile’}, default=’squared_error’
在提升過程中使用的損失函數。請注意,“squared error”、“gamma”和“poisson”損失實際上會實作“一半最小平方損失”、“一半伽瑪偏差”和“一半泊松偏差”,以簡化梯度的計算。此外,“gamma”和“poisson”損失在內部使用對數連結,“gamma”需要
y > 0
且 “poisson” 需要y >= 0
。“quantile”使用 pinball 損失。在 0.23 版本中變更: 新增選項 'poisson'。
在 1.1 版本中變更: 新增選項 'quantile'。
在 1.3 版本中變更: 新增選項 'gamma'。
- quantilefloat, default=None
如果損失是 "quantile",則此參數會指定要估計哪個分位數,且必須介於 0 和 1 之間。
- learning_ratefloat, default=0.1
學習率,也稱為收縮。這會用作葉子值的乘法因子。使用
1
表示不收縮。- max_iterint, default=100
提升過程的最大迭代次數,即樹的最大數量。
- 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
用於非缺失值的最大 bin 數。在訓練之前,輸入陣列
X
的每個特徵都會被劃分成整數值的 bin,這使得訓練階段快得多。具有少量唯一值的特徵可能使用少於max_bins
個 bin。除了max_bins
個 bin 之外,始終會為缺失值保留一個額外的 bin。必須不大於 255。- categorical_features形狀為 (n_features) 或形狀為 (n_categorical_features,) 的 array-like {bool, int, str}, default=None
指出類別特徵。
None:不會將任何特徵視為類別特徵。
boolean array-like:指示類別特徵的布林遮罩。
integer array-like:指示類別特徵的整數索引。
str array-like:類別特徵的名稱(假設訓練資料具有特徵名稱)。
"from_dtype"
:若資料框架(dataframe)欄位的資料型態為「category」,則會被視為類別特徵。輸入的資料必須是具有__dataframe__
方法的物件,例如 pandas 或 polars 的 DataFrame,才能使用此功能。
對於每個類別特徵,最多只能有
max_bins
個不重複的類別。數值型態編碼的類別特徵,若值為負數,則會被視為缺失值。所有的類別值都會被轉換成浮點數。這表示類別值 1.0 和 1 會被視為同一個類別。請參閱使用者指南以了解更多資訊。
在 0.24 版本中新增。
在 1.2 版本中變更:新增對特徵名稱的支援。
在 1.4 版本中變更:新增
"from_dtype"
選項。在 1.6 版本中變更:預設值從
None
變更為"from_dtype"
。- monotonic_cstarray-like of int of shape (n_features) or dict, default=None
單調約束(monotonic constraint),用於對每個特徵強制執行,使用以下整數值指定:
1:單調遞增
0:無約束
-1:單調遞減
如果是一個以字串為鍵值的 dict,則會依照名稱將特徵對應到單調約束。如果是一個陣列,則會依照位置將特徵對應到約束。有關使用範例,請參閱使用特徵名稱指定單調約束。
請參閱使用者指南以了解更多資訊。
在 0.23 版本中新增。
在 1.2 版本中變更:接受以特徵名稱為鍵值的約束 dict。
- interaction_cst{“pairwise”, “no_interactions”} or sequence of lists/tuples/sets of int, default=None
指定交互約束(interaction constraints),這些特徵集合可以在子節點分裂時彼此交互作用。
每個項目指定允許彼此交互作用的特徵索引集合。如果特徵數量超過這些約束中指定的數量,則會將它們視為額外的集合。
字串 “pairwise” 和 “no_interactions” 分別是僅允許成對交互作用或不允許交互作用的簡寫。
例如,若總共有 5 個特徵,
interaction_cst=[{0, 1}]
等同於interaction_cst=[{0, 1}, {2, 3, 4}]
,並且指定樹的每個分支將僅基於特徵 0 和 1 或僅基於特徵 2、3 和 4 分裂。在 1.2 版本中新增。
- warm_startbool, default=False
當設定為
True
時,會重複使用上次呼叫 fit 的結果,並在集成模型中添加更多估計器。為了使結果有效,估計器應該僅在相同的資料上重新訓練。請參閱詞彙表。- early_stopping‘auto’ or bool, default=’auto’
如果為 ‘auto’,則當樣本大小大於 10000 時,啟用提前停止。如果為 True,則啟用提前停止,否則停用提前停止。
在 0.23 版本中新增。
- scoringstr or callable or None, default=’loss’
用於提前停止的評分參數。它可以是一個字串(請參閱評分參數:定義模型評估規則)或一個可呼叫物件(請參閱可呼叫的評分器)。如果為 None,則使用估計器的預設評分器。如果
scoring='loss'
,則會根據損失值檢查提前停止。僅在執行提前停止時使用。- validation_fractionint or float or None, default=0.1
為了提前停止,預留作為驗證資料的訓練資料比例(或絕對大小)。如果為 None,則在訓練資料上執行提前停止。僅在執行提前停止時使用。
- n_iter_no_changeint, default=10
用於決定何時「提前停止」。當最後
n_iter_no_change
個分數中沒有任何一個比倒數第n_iter_no_change - 1
個分數更好時,會停止擬合過程,但會有一些容差。僅在執行提前停止時使用。- tolfloat, default=1e-7
在提前停止期間比較分數時使用的絕對容差。容差越高,越有可能提前停止:更高的容差意味著後續迭代更難被認為是對參考分數的改進。
- verboseint, default=0
詳細程度。如果非零,則列印關於擬合過程的一些資訊。
1
僅列印摘要資訊,2
列印每次迭代的資訊。- random_stateint, RandomState instance or None, default=None
用於控制分箱過程中的子取樣,以及在啟用提前停止時控制訓練/驗證資料分割的偽隨機數產生器。傳遞一個 int 以便在多個函式呼叫中產生可重複的輸出。請參閱詞彙表。
- 屬性:
- do_early_stopping_bool
指示在訓練期間是否使用提前停止。
n_iter_
int提升過程的迭代次數。
- n_trees_per_iteration_int
每次迭代建立的樹木數量。對於迴歸器,這始終為 1。
- train_score_ndarray, shape (n_iter_+1,)
在訓練資料上每次迭代的分數。第一個項目是第一次迭代之前集成模型的分數。根據
scoring
參數計算分數。如果scoring
不是 ‘loss’,則會在最多 10000 個樣本的子集上計算分數。如果沒有提前停止,則為空。- validation_score_ndarray, shape (n_iter_+1,)
在保留的驗證資料上每次迭代的分數。第一個項目是第一次迭代之前集成模型的分數。根據
scoring
參數計算分數。如果沒有提前停止或如果validation_fraction
為 None,則為空。- is_categorical_ndarray, shape (n_features, ) or None
類別特徵的布林遮罩。如果沒有類別特徵,則為
None
。- n_features_in_int
在 fit 期間看到的特徵數量。
在 0.24 版本中新增。
- feature_names_in_ndarray of shape (
n_features_in_
,) 在 fit 期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時才定義。在 1.0 版本中新增。
參見
GradientBoostingRegressor
精確的梯度提升方法,在具有大量樣本的資料集上擴展性不佳。
sklearn.tree.DecisionTreeRegressor
決策樹迴歸器。
RandomForestRegressor
一個元估計器,它在資料集的各種子樣本上擬合多個決策樹迴歸器,並使用平均來改進統計效能和控制過度擬合。
AdaBoostRegressor
一個元估計器,它首先在原始資料集上擬合一個迴歸器,然後在相同的資料集上擬合迴歸器的其他副本,但根據當前預測的誤差調整實例的權重。 因此,後續的迴歸器更側重於困難的情況。
範例
>>> from sklearn.ensemble import HistGradientBoostingRegressor >>> from sklearn.datasets import load_diabetes >>> X, y = load_diabetes(return_X_y=True) >>> est = HistGradientBoostingRegressor().fit(X, y) >>> est.score(X, y) 0.92...
- fit(X, y, sample_weight=None)[原始碼]#
擬合梯度提升模型。
- 參數:
- 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_#
提升過程的迭代次數。
- predict(X)[原始碼]#
預測 X 的值。
- 參數:
- X類陣列,形狀 (n_samples, n_features)
輸入樣本。
- 返回:
- yndarray,形狀 (n_samples,)
預測的值。
- 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
樣本權重。
- 返回:
- 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$') HistGradientBoostingRegressor [原始碼]#
請求傳遞給
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$') HistGradientBoostingRegressor [原始碼]#
請求傳遞給
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物件
更新後的物件。