ColumnTransformer#
- class sklearn.compose.ColumnTransformer(transformers, *, remainder='drop', sparse_threshold=0.3, n_jobs=None, transformer_weights=None, verbose=False, verbose_feature_names_out=True, force_int_remainder_cols=True)[原始碼]#
將轉換器應用於陣列或 pandas DataFrame 的列。
此估計器允許輸入的不同列或列子集被單獨轉換,並且每個轉換器產生的特徵將被串連以形成單個特徵空間。這對於異質或列狀數據非常有用,可以將多種特徵提取機制或轉換組合到單個轉換器中。
在使用者指南中閱讀更多內容。
在 0.20 版本中新增。
- 參數:
- transformerstuple 列表
指定要應用於資料子集的轉換器物件的 (名稱, 轉換器, 欄位) tuple 列表。
- namestr
如同在 Pipeline 和 FeatureUnion 中,這允許使用
set_params
設定轉換器及其參數,並在網格搜尋中搜尋。- transformer{‘drop’, ‘passthrough’} 或估算器
估算器必須支援 fit 和 transform。 也接受特殊情況的字串 'drop' 和 'passthrough',分別表示捨棄欄位或不經轉換地傳遞欄位。
- columnsstr、str 的類陣列、int、int 的類陣列、bool 的類陣列、切片或可呼叫物件
在第二軸上索引資料。整數被解釋為位置欄位,而字串可以按名稱引用 DataFrame 欄位。如果
transformer
預期 X 為 1 維類陣列(向量),則應使用純量字串或整數,否則會將 2 維陣列傳遞給轉換器。可呼叫物件會傳遞輸入資料X
,並且可以傳回上述任何內容。若要按名稱或 dtype 選擇多個欄位,您可以使用make_column_selector
。
- remainder{‘drop’, ‘passthrough’} 或估算器,預設值 = ‘drop’
預設情況下,只轉換
transformers
中指定的欄位並合併到輸出中,而未指定的欄位則會被捨棄 (預設值為'drop'
)。透過指定remainder='passthrough'
,所有未在transformers
中指定,但在傳遞給fit
的資料中存在的剩餘欄位將會自動傳遞。此欄位子集會與轉換器的輸出串連在一起。對於資料框,在fit
期間未看到的額外欄位將從transform
的輸出中排除。透過將remainder
設定為估算器,剩餘的未指定欄位將會使用remainder
估算器。估算器必須支援 fit 和 transform。請注意,使用此功能需要 fit 和 transform 時輸入的 DataFrame 欄位具有相同的順序。- sparse_thresholdfloat,預設值 = 0.3
如果不同轉換器的輸出包含稀疏矩陣,若整體密度低於此值,則這些矩陣會堆疊為稀疏矩陣。使用
sparse_threshold=0
一律傳回密集矩陣。當轉換後的輸出皆由密集資料組成時,堆疊結果會是密集矩陣,並且會忽略此關鍵字。- n_jobsint,預設值 = None
並行執行的作業數量。
None
表示 1,除非在joblib.parallel_backend
環境中。-1
表示使用所有處理器。請參閱 詞彙表 以取得更多詳細資訊。- transformer_weightsdict,預設值 = None
每個轉換器的特徵乘法權重。轉換器的輸出會乘以這些權重。鍵為轉換器名稱,值為權重。
- verbosebool,預設值 = False
如果為 True,則在完成每個轉換器的擬合時,將會列印經過的時間。
- verbose_feature_names_outbool、str 或 Callable[[str, str], str],預設值 = True
如果為 True,
ColumnTransformer.get_feature_names_out
會將所有特徵名稱加上產生該特徵的轉換器的名稱作為前綴。這相當於設定verbose_feature_names_out="{transformer_name}__{feature_name}"
。如果為 False,
ColumnTransformer.get_feature_names_out
將不會為任何特徵名稱加上前綴,而且如果特徵名稱不唯一,則會發生錯誤。如果為
Callable[[str, str], str]
,ColumnTransformer.get_feature_names_out
會使用轉換器的名稱重新命名所有特徵。可呼叫物件的第一個參數是轉換器名稱,第二個參數是特徵名稱。傳回的字串將會是新的特徵名稱。如果為
str
,則必須是準備格式化的字串。給定的字串會使用兩個欄位名稱格式化:transformer_name
和feature_name
。例如:"{feature_name}__{transformer_name}"
。如需更多資訊,請參閱標準函式庫中的str.format
方法。
1.0 版新增。
在 1.6 版中變更:
verbose_feature_names_out
可以是可呼叫物件或要格式化的字串。- force_int_remainder_colsbool,預設值 = True
強制
transformers_
的最後一個項目 (對應於「剩餘」轉換器) 的欄位始終儲存為索引 (int) 而不是欄位名稱 (str)。有關詳細資訊,請參閱transformers_
屬性的描述。注意
如果您沒有存取
transformers_
擬合屬性中剩餘欄位的欄位列表,則無需設定此參數。1.5 版新增。
在 1.7 版中變更:
force_int_remainder_cols
的預設值將在 1.7 版中從True
變更為False
。
- 屬性:
- transformers_列表
已擬合轉換器的集合,以 (名稱, 已擬合轉換器, 欄位) 的元組形式呈現。
fitted_transformer
可以是一個估算器,或'drop'
;'passthrough'
會被替換為等效的FunctionTransformer
。如果沒有選擇任何欄位,這將會是未擬合的轉換器。如果還有剩餘的欄位,最後一個元素會是一個格式如下的元組:(‘remainder’, 轉換器, 剩餘欄位),對應到remainder
參數。如果還有剩餘欄位,則len(transformers_)==len(transformers)+1
,否則len(transformers_)==len(transformers)
。在版本 1.5 中變更:如果還有剩餘欄位且
force_int_remainder_cols
為 True,剩餘欄位永遠會以它們在輸入X
中的位置索引表示 (如同舊版本)。如果force_int_remainder_cols
為 False,格式會嘗試匹配其他轉換器的格式:如果所有欄位都以欄位名稱 (str
) 提供,則剩餘欄位會儲存為欄位名稱;如果所有欄位都以遮罩陣列 (bool
) 提供,剩餘欄位也會如此;在所有其他情況下,剩餘欄位會儲存為索引 (int
)。named_transformers_
Bunch
依名稱存取已擬合的轉換器。
- sparse_output_bool
布林旗標,指示
transform
的輸出是稀疏矩陣還是稠密 numpy 陣列,這取決於個別轉換器的輸出和sparse_threshold
關鍵字。- output_indices_dict
一個從每個轉換器名稱到一個切片的字典,切片對應到轉換後輸出的索引。這對於檢查哪個轉換器負責哪個轉換後的特徵非常有用。
1.0 版新增。
- n_features_in_int
在 fit 期間看到的特徵數量。只有當底層轉換器在擬合時公開此屬性時才會定義。
在版本 0.24 中加入。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全為字串的特徵名稱時才會定義。1.0 版新增。
另請參閱
make_column_transformer
用於組合應用於原始特徵空間的欄位子集的多个轉換器物件的輸出的便利函式。
make_column_selector
用於基於資料類型或具有 regex 模式的欄位名稱來選擇欄位的便利函式。
注意事項
轉換後的特徵矩陣中的欄位順序遵循在
transformers
清單中指定欄位的順序。除非在passthrough
關鍵字中指定,否則未指定的原始特徵矩陣的欄位會從產生的轉換後特徵矩陣中刪除。使用passthrough
指定的那些欄位會加到轉換器輸出的右側。範例
>>> import numpy as np >>> from sklearn.compose import ColumnTransformer >>> from sklearn.preprocessing import Normalizer >>> ct = ColumnTransformer( ... [("norm1", Normalizer(norm='l1'), [0, 1]), ... ("norm2", Normalizer(norm='l1'), slice(2, 4))]) >>> X = np.array([[0., 1., 2., 2.], ... [1., 1., 0., 1.]]) >>> # Normalizer scales each row of X to unit norm. A separate scaling >>> # is applied for the two first and two last elements of each >>> # row independently. >>> ct.fit_transform(X) array([[0. , 1. , 0.5, 0.5], [0.5, 0.5, 0. , 1. ]])
ColumnTransformer
可以設定為使用字串設定欄位,使轉換器需要 1d 陣列>>> from sklearn.feature_extraction.text import CountVectorizer >>> from sklearn.preprocessing import MinMaxScaler >>> import pandas as pd >>> X = pd.DataFrame({ ... "documents": ["First item", "second one here", "Is this the last?"], ... "width": [3, 4, 5], ... }) >>> # "documents" is a string which configures ColumnTransformer to >>> # pass the documents column as a 1d array to the CountVectorizer >>> ct = ColumnTransformer( ... [("text_preprocess", CountVectorizer(), "documents"), ... ("num_preprocess", MinMaxScaler(), ["width"])]) >>> X_trans = ct.fit_transform(X)
有關使用方式的更詳細範例,請參閱 具有混合類型的欄位轉換器。
- fit(X, y=None, **params)[原始碼]#
使用 X 擬合所有轉換器。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 資料框架}
輸入資料,其中指定的子集用於擬合轉換器。
- y形狀為 (n_samples,…) 的類陣列,預設為 None
用於監督式學習的目標。
- **params字典,預設為 None
要傳遞給底層轉換器的
fit
和transform
方法的參數。只有在啟用中繼資料路由時才能傳遞此參數,您可以使用
sklearn.set_config(enable_metadata_routing=True)
啟用。在版本 1.4 中加入。
- 傳回值:
- selfColumnTransformer
此估算器。
- fit_transform(X, y=None, **params)[原始碼]#
擬合所有轉換器、轉換資料並串聯結果。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 資料框架}
輸入資料,其中指定的子集用於擬合轉換器。
- y形狀為 (n_samples,) 的類陣列,預設為 None
用於監督式學習的目標。
- **params字典,預設為 None
要傳遞給底層轉換器的
fit
和transform
方法的參數。只有在啟用中繼資料路由時才能傳遞此參數,您可以使用
sklearn.set_config(enable_metadata_routing=True)
啟用。在版本 1.4 中加入。
- 傳回值:
- X_t形狀為 (n_samples, sum_n_components) 的 {類陣列,稀疏矩陣}
轉換器水平堆疊的結果。sum_n_components 是轉換器輸出的 n_components(輸出維度)的總和。如果任何結果是稀疏矩陣,所有內容都將轉換為稀疏矩陣。
- get_feature_names_out(input_features=None)[原始碼]#
取得轉換的輸出特徵名稱。
- 參數:
- input_features類似陣列的字串或 None,預設為 None
輸入特徵。
如果
input_features
為None
,則會使用feature_names_in_
作為輸入特徵名稱。如果未定義feature_names_in_
,則會產生以下輸入特徵名稱:["x0", "x1", ..., "x(n_features_in_ - 1)"]
。如果
input_features
是類似陣列的結構,則如果已定義feature_names_in_
,input_features
必須與feature_names_in_
相符。
- 傳回值:
- feature_names_out字串物件的 ndarray
轉換後的特徵名稱。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看 使用者指南,了解路由機制的運作方式。
在版本 1.4 中加入。
- 傳回值:
- routingMetadataRouter
一個封裝路由資訊的
MetadataRouter
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
傳回建構函式中給定的參數,以及
ColumnTransformer
的transformers
中包含的估算器。- 參數:
- deepbool,預設為 True
如果為 True,將會傳回此估算器以及所包含的子物件(屬於估算器)的參數。
- 傳回值:
- paramsdict
參數名稱對應到它們的值。
- property named_transformers_#
依名稱存取已擬合的轉換器。
唯讀屬性,可依給定的名稱存取任何轉換器。鍵是轉換器名稱,值是已擬合的轉換器物件。
- set_output(*, transform=None)[原始碼]#
設定呼叫
"transform"
和"fit_transform"
時的輸出容器。呼叫
set_output
將會設定transformers
和transformers_
中所有估算器的輸出。- 參數:
- transform{"default", "pandas", "polars"},預設為 None
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換組態不變
1.4 版新增:新增
"polars"
選項。
- 傳回值:
- self估算器實例
估算器實例。
- set_params(**kwargs)[原始碼]#
設定此估算器的參數。
可使用
get_params()
列出有效的參數鍵。請注意,您可以直接設定ColumnTransformer
的transformers
中包含的估算器的參數。- 參數:
- **kwargsdict
估算器參數。
- 傳回值:
- selfColumnTransformer
此估算器。
- transform(X, **params)[原始碼]#
由每個轉換器分別轉換 X,並串連結果。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 資料框架}
要由子集轉換的資料。
- **params字典,預設為 None
要傳遞至底層轉換器的
transform
方法的參數。只有在啟用中繼資料路由時才能傳遞此參數,您可以使用
sklearn.set_config(enable_metadata_routing=True)
啟用。在版本 1.4 中加入。
- 傳回值:
- X_t形狀為 (n_samples, sum_n_components) 的 {類陣列,稀疏矩陣}
轉換器水平堆疊的結果。sum_n_components 是轉換器輸出的 n_components(輸出維度)的總和。如果任何結果是稀疏矩陣,所有內容都將轉換為稀疏矩陣。