序數編碼器#
- class sklearn.preprocessing.OrdinalEncoder(*, categories='auto', dtype=<class 'numpy.float64'>, handle_unknown='error', unknown_value=None, encoded_missing_value=nan, min_frequency=None, max_categories=None)[來源]#
將類別特徵編碼為整數陣列。
此轉換器的輸入應該是一個整數或字串的類陣列,表示類別(離散)特徵所取的值。這些特徵會被轉換為序數整數。這會產生每個特徵的單一整數欄位(0 到 n_categories - 1)。
在使用者指南中閱讀更多內容。如需比較不同的編碼器,請參考:比較目標編碼器與其他編碼器。
在 0.20 版中新增。
- 參數:
- categories‘auto’ 或 array-like 的列表,預設為 ‘auto’
每個特徵的類別(唯一值)
‘auto’:自動從訓練資料判斷類別。
list:
categories[i]
包含第 i 個欄位中預期的類別。傳遞的類別不應混合字串和數值,且在數值的情況下應排序。
使用的類別可以在
categories_
屬性中找到。- dtype數字類型,預設為 np.float64
輸出所需的 dtype。
- handle_unknown{‘error’, ‘use_encoded_value’},預設為 ‘error’
當設定為 ‘error’ 時,如果在轉換期間出現未知的類別特徵,則會引發錯誤。當設定為 ‘use_encoded_value’ 時,未知類別的編碼值將設定為參數
unknown_value
給定的值。在inverse_transform
中,未知類別會表示為 None。在 0.24 版中新增。
- unknown_valueint 或 np.nan,預設為 None
當參數 handle_unknown 設定為 ‘use_encoded_value’ 時,需要此參數,並會設定未知類別的編碼值。它必須與用於在
fit
中編碼任何類別的值不同。如果設定為 np.nan,則dtype
參數必須是 float dtype。在 0.24 版中新增。
- encoded_missing_valueint 或 np.nan,預設為 np.nan
遺失類別的編碼值。如果設定為
np.nan
,則dtype
參數必須是 float dtype。在 1.1 版中新增。
- min_frequencyint 或 float,預設為 None
指定類別被視為不頻繁的最小頻率。
如果為
int
,則基數較小的類別會被視為不頻繁。如果為
float
,則基數小於min_frequency * n_samples
的類別會被視為不頻繁。
在 1.3 版中新增:在使用者指南中閱讀更多內容。
- max_categoriesint,預設為 None
指定考慮不頻繁類別時,每個輸入特徵的輸出類別數上限。如果有不頻繁的類別,
max_categories
會將代表不頻繁類別的類別與頻繁類別一起包含。如果為None
,則輸出特徵的數量沒有限制。max_categories
**不**考慮遺失或未知的類別。將unknown_value
或encoded_missing_value
設定為整數會使唯一整數程式碼的數量各增加一個。這可能會導致多達max_categories + 2
個整數程式碼。在 1.3 版中新增:在使用者指南中閱讀更多內容。
- 屬性:
- categories_陣列列表
在
fit
期間判定的每個特徵的類別(按照 X 中的特徵順序,並與transform
的輸出相對應)。這不包括在fit
期間未看到的類別。- n_features_in_int
在 fit 期間看到的特徵數量。
在 1.0 版中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
的特徵名稱皆為字串時定義。在 1.0 版中新增。
infrequent_categories_
ndarray 列表每個特徵的不頻繁類別。
另請參閱
注意
在高比例的
nan
值的情況下,在 Python 3.10 之前的版本中,推斷類別會變得緩慢。從 Python 3.10 開始,改善了nan
值的處理方式(參見bpo-43475)。範例
給定一個具有兩個特徵的資料集,我們讓編碼器找到每個特徵的唯一值,並將資料轉換為序數編碼。
>>> from sklearn.preprocessing import OrdinalEncoder >>> enc = OrdinalEncoder() >>> X = [['Male', 1], ['Female', 3], ['Female', 2]] >>> enc.fit(X) OrdinalEncoder() >>> enc.categories_ [array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)] >>> enc.transform([['Female', 3], ['Male', 1]]) array([[0., 2.], [1., 0.]])
>>> enc.inverse_transform([[1, 0], [0, 1]]) array([['Male', 1], ['Female', 2]], dtype=object)
依預設,
OrdinalEncoder
會透過傳播遺失值來寬鬆地處理它們。>>> import numpy as np >>> X = [['Male', 1], ['Female', 3], ['Female', np.nan]] >>> enc.fit_transform(X) array([[ 1., 0.], [ 0., 1.], [ 0., nan]])
您可以使用參數
encoded_missing_value
來編碼遺失值。>>> enc.set_params(encoded_missing_value=-1).fit_transform(X) array([[ 1., 0.], [ 0., 1.], [ 0., -1.]])
透過設定
max_categories
或min_frequency
啟用不常出現的類別。在以下範例中,“a” 和 “d” 被視為不常出現,並被歸為單一類別;“b” 和 “c” 則為各自的類別,未知值編碼為 3,遺失值則編碼為 4。>>> X_train = np.array( ... [["a"] * 5 + ["b"] * 20 + ["c"] * 10 + ["d"] * 3 + [np.nan]], ... dtype=object).T >>> enc = OrdinalEncoder( ... handle_unknown="use_encoded_value", unknown_value=3, ... max_categories=3, encoded_missing_value=4) >>> _ = enc.fit(X_train) >>> X_test = np.array([["a"], ["b"], ["c"], ["d"], ["e"], [np.nan]], dtype=object) >>> enc.transform(X_test) array([[2.], [0.], [1.], [2.], [3.], [4.]])
- fit(X, y=None)[原始碼]#
將 OrdinalEncoder 擬合到 X。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
用於決定每個特徵的類別的資料。
- yNone
忽略。此參數僅為了與
Pipeline
相容而存在。
- 回傳:
- self物件
已擬合的編碼器。
- fit_transform(X, y=None, **fit_params)[原始碼]#
將資料擬合,然後轉換。
使用選用參數
fit_params
將轉換器擬合到X
和y
,並回傳X
的轉換版本。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
輸入樣本。
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值為 None
目標值 (無監督轉換為 None)。
- **fit_paramsdict
額外的擬合參數。
- 回傳:
- X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列
已轉換的陣列。
- 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()[原始碼]#
取得此物件的中繼資料路由。
請查看使用者指南,了解路由機制如何運作。
- 回傳:
- routingMetadataRequest
封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估計器的參數。
- 參數:
- deep布林值,預設值為 True
若為 True,則會傳回此估計器及包含的子物件(也是估計器)的參數。
- 回傳:
- paramsdict
對應到其值的參數名稱。
- property infrequent_categories_#
每個特徵的不頻繁類別。
- inverse_transform(X)[原始碼]#
將資料轉換回原始表示法。
- 參數:
- X形狀為 (n_samples, n_encoded_features) 的類陣列
已轉換的資料。
- 回傳:
- X_tr形狀為 (n_samples, n_features) 的 ndarray
反向轉換的陣列。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
請參閱介紹 set_output API,以取得如何使用 API 的範例。
- 參數:
- transform{"default", "pandas", "polars"},預設值為 None
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換設定不變
1.4 版本新增: 加入了
"polars"
選項。
- 回傳:
- self估計器實例
估計器實例。