分類器鏈#
- 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 中的折數,
一個可迭代物件,產生 (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物件
更新後的物件。