分類器鏈#

class sklearn.multioutput.ClassifierChain(base_estimator, *, order=None, cv=None, chain_method='predict', random_state=None, verbose=False)[原始碼]#

一個將二元分類器排列成鏈的多標籤模型。

每個模型按照鏈指定的順序進行預測,使用模型可用的所有特徵,再加上鏈中較早模型的預測。

如需瞭解如何使用 ClassifierChain 並從其集成中獲益的範例,請參閱酵母資料集上的 ClassifierChain範例。

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

於 0.19 版本新增。

參數:
base_estimator估算器

建立分類器鏈的基礎估算器。

order形狀為 (n_outputs,) 的類陣列,或 ‘random’,預設值為 None

若為 None,則順序將由標籤矩陣 Y 中欄的順序決定。

order = [0, 1, 2, ..., Y.shape[1] - 1]

可以透過提供整數列表來明確設定鏈的順序。 例如,對於長度為 5 的鏈。

order = [1, 3, 2, 4, 0]

表示鏈中的第一個模型將針對 Y 矩陣中的第 1 欄進行預測,第二個模型將針對第 3 欄進行預測,依此類推。

若 order 為 random,則會使用隨機順序。

cv整數、交叉驗證產生器或可迭代物件,預設值為 None

決定是否對鏈中先前估算器的結果使用交叉驗證預測或真實標籤。cv 的可能輸入為

  • None,在擬合時使用真實標籤,

  • 整數,指定 (Stratified)KFold 中的折數,

  • CV 分割器,

  • 一個可迭代物件,產生 (train, test) 分割,作為索引陣列。

chain_method{‘predict’、‘predict_proba’、‘predict_log_proba’、‘decision_function’} 或此類字串的列表,預設值為 ‘predict’

鏈中估算器用於鏈中先前估算器的「預測」特徵的預測方法。

  • 如果為 str,則為方法的名稱;

  • 如果為 str 的列表,則按優先順序提供方法名稱。 使用的方法對應於 base_estimator 實作的列表中的第一個方法。

於 1.5 版本新增。

random_state整數、RandomState 實例或 None,選填(預設值為 None)

order='random',則決定鏈順序的隨機數生成。 此外,它控制每次鏈接迭代時給定的每個 base_estimator 的隨機種子。 因此,僅當 base_estimator 公開 random_state 時才使用。 傳遞一個整數,以在多個函數呼叫中產生可重現的輸出。 請參閱詞彙表

verbose布林值,預設值為 False

如果為 True,則會在每個模型完成時輸出鏈進度。

於 1.2 版本新增。

屬性:
classes_列表

一個長度為 len(estimators_) 的陣列列表,其中包含鏈中每個估算器的類別標籤。

estimators_列表

base_estimator 的複製品列表。

order_列表

分類器鏈中標籤的順序。

chain_method_字串

鏈中估算器用於預測特徵的預測方法。

n_features_in_整數

fit 期間看到的特徵數量。 僅當基礎 base_estimator 在擬合時公開此屬性時才定義。

於 0.24 版本新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

於 1.0 版本新增。

另請參閱

迴歸器鏈 (RegressorChain)

迴歸的等效項目。

多輸出分類器 (MultiOutputClassifier)

獨立分類每個輸出,而不是鏈接。

參考文獻

Jesse Read、Bernhard Pfahringer、Geoff Holmes、Eibe Frank,“用於多標籤分類的分類器鏈”,2009 年。

範例

>>> from sklearn.datasets import make_multilabel_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.multioutput import ClassifierChain
>>> X, Y = make_multilabel_classification(
...    n_samples=12, n_classes=3, random_state=0
... )
>>> X_train, X_test, Y_train, Y_test = train_test_split(
...    X, Y, random_state=0
... )
>>> base_lr = LogisticRegression(solver='lbfgs', random_state=0)
>>> chain = ClassifierChain(base_lr, order='random', random_state=0)
>>> chain.fit(X_train, Y_train).predict(X_test)
array([[1., 1., 0.],
       [1., 0., 0.],
       [0., 1., 0.]])
>>> chain.predict_proba(X_test)
array([[0.8387..., 0.9431..., 0.4576...],
       [0.8878..., 0.3684..., 0.2640...],
       [0.0321..., 0.9935..., 0.0626...]])
decision_function(X)[原始碼]#

評估鏈中模型決策函數。

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

輸入資料。

返回:
Y_decision形狀為 (n_samples, n_classes) 的類陣列

針對鏈中的每個模型,返回樣本的決策函數。

fit(X, Y, **fit_params)[原始碼]#

將模型擬合到資料矩陣 X 和目標 Y。

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

輸入資料。

Y形狀為 (n_samples, n_classes) 的類陣列

目標值。

**fit_params字串 -> 物件的字典

傳遞給每個步驟 fit 方法的參數。

僅當 enable_metadata_routing=True 時可用。 請參閱使用者指南

於 1.3 版本新增。

返回:
self物件

類別實例。

get_metadata_routing()[原始碼]#

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

請查看使用者指南,了解路由機制的運作方式。

於 1.3 版本新增。

返回:
routingMetadataRouter

一個封裝路由資訊的 MetadataRouter

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

取得此估計器的參數。

參數:
deepbool,預設值為 True

如果為 True,將返回此估計器和其中包含的子物件(也是估計器)的參數。

返回:
paramsdict

參數名稱對應到它們的值。

predict(X)[原始碼]#

使用 ClassifierChain 模型預測資料矩陣 X。

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

輸入資料。

返回:
Y_pred形狀為 (n_samples, n_classes) 的類陣列

預測值。

predict_log_proba(X)[原始碼]#

預測機率估計值的對數。

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

輸入資料。

返回:
Y_log_prob形狀為 (n_samples, n_classes) 的類陣列

預測機率的對數。

predict_proba(X)[原始碼]#

預測機率估計值。

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

輸入資料。

返回:
Y_prob形狀為 (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_params(**params)[原始碼]#

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

返回:
self估計器實例

估計器實例。

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

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

更新後的物件。