序數編碼器#

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_valueencoded_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 列表

每個特徵的不頻繁類別。

另請參閱

獨熱編碼器

執行類別特徵的獨熱編碼。此編碼適用於監督和非監督設定中的低至中基數類別變數。

目標編碼器

在分類或迴歸管線中使用監督訊號來編碼類別特徵。此編碼通常適用於高基數類別變數。

標籤編碼器

使用 0 到 n_classes-1 之間的值來編碼目標標籤。

注意

在高比例的 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_categoriesmin_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 將轉換器擬合到 Xy,並回傳 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_featuresNone,則使用 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

設定 transformfit_transform 的輸出。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定不變

1.4 版本新增: 加入了 "polars" 選項。

回傳:
self估計器實例

估計器實例。

set_params(**params)[原始碼]#

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

回傳:
self估計器實例

估計器實例。

transform(X)[原始碼]#

將 X 轉換為序數代碼。

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

要編碼的資料。

回傳:
X_out形狀為 (n_samples, n_features) 的 ndarray

已轉換的輸入。