sklearn.preprocessing.OneHotEncoder?

class sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')

將分類要素編碼為one-hot數字數組。

該轉換器的輸入應為整數或字符串之類的數組,表示分類(離散)特征所采用的值。這些特性使用one hot(也稱為“one-of-K”或“dummy”)編碼方案進行編碼。這將為每個類別創建一個二進制列,并返回一個稀疏矩陣或密集數組(取決于稀疏參數)

默認情況下,編碼器會根據每個功能中的唯一值得出類別。或者,您也可以手動指定類別。

需要這種編碼才能將分類數據提供給許多scikit學習估計器,尤其是線性模型和具有標準內核的SVM。

注意:y標簽的獨熱編碼應該使用LabelBinarizer。

閱讀用戶指南中的更多信息。

在版本0.20中更改。

參數 說明
categories ‘auto’ or a list of array-like, default=’auto’
每個功能的類別(唯一值):
‘auto’:從訓練數據中自動確定類別。
list:category [i]保存第i列中期望的類別。傳遞的類別不應在單個功能中混合使用字符串和數字值,并且應該對數字值進行排序。
可以在category_屬性中找到使用的類別。
0.20版中的新功能。
drop {‘first’, ‘if_binary’} or a array-like of shape (n_features,), default=None
指定一種用于刪除每個功能類別之一的方法。這在完美共線特征導致問題的情況下很有用,例如將結果數據輸入到神經網絡或不規則回歸時。
但是,刪除一個類別會破壞原始表示形式的對稱性,因此可能在下游模型(例如,懲罰線性分類或回歸模型)中引起偏差。
None:保留所有功能(默認)。
‘first’:在每個功能中刪除第一類。如果僅存在一個類別,則該功能將被完全刪除。
‘if_binary’:將具有兩個類別的每個特征的第一個類別刪除。具有1個或2個以上類別的要素保持不變。
array:drop [i]是要素X [:, i]中應刪除的類別。
sparse bool, default=True
如果設置為True,將返回稀疏矩陣,否則將返回數組。
dtype number type, default=np.float
所需的輸出dtype。
handle_unknown {‘error’, ‘ignore’}, default=’error’
是在轉換過程中引發錯誤還是忽略是否存在未知分類特征(默認為引發)。當此參數設置為“忽略”并且在轉換過程中遇到未知類別時,此功能生成的一鍵編碼列將全為零。在逆變換中,未知類別將表示為“無”。
屬性 說明
categories_ list of arrays
擬合期間確定的每個特征的類別(按X中特征的順序,并與轉換的輸出相對應)。這包括下拉列表中指定的類別(如果有)。
drop_idx_ array of shape (n_features,)
drop_idx_ [i]是要為每個功能刪除的類別的category_ [i]中的索引。
如果不從索引為i的功能中刪除類別,則drop_idx_[i]=None,例如,當drop='if_binary'且該功能不是二進制時。
如果將保留所有已轉換的要素,則drop_idx_=None。

另見:

sklearn.preprocessing.OrdinalEncoder

對分類特征執行序數(整數)編碼。

sklearn.feature_extraction.DictVectorizer

對字典項執行獨熱編碼(也處理字符串值特征)。

sklearn.feature_extraction.FeatureHasher

對字典項或字符串執行近似獨熱編碼。

sklearn.preprocessing.LabelBinarizer

以一對多的方式對標簽進行二值化處理。

sklearn.preprocessing.MultiLabelBinarizer

在可迭代的可迭代項和多標簽格式之間進行轉換,例如表示類標簽存在的(樣本x類)二進制矩陣。

示例

給定具有兩個特征的數據集,我們讓編碼器找到每個特征的唯一值,然后將數據轉換為二進制的獨熱編碼。

>>> from sklearn.preprocessing import OneHotEncoder

可以丟棄擬合期間看不到的類別:

>>> enc = OneHotEncoder(handle_unknown='ignore')
>>> X = [['Male'1], ['Female'3], ['Female'2]]
>>> enc.fit(X)
OneHotEncoder(handle_unknown='ignore')
>>> enc.categories_
[array(['Female''Male'], dtype=object), array([123], dtype=object)]
>>> enc.transform([['Female'1], ['Male'4]]).toarray()
array([[1.0.1.0.0.],
       [0.1.0.0.0.]])
>>> enc.inverse_transform([[01100], [00010]])
array([['Male'1],
       [None2]], dtype=object)
>>> enc.get_feature_names(['gender''group'])
array(['gender_Female''gender_Male''group_1''group_2''group_3'],
  dtype=object)

您可以隨時為每個功能刪除第一列:

>>> drop_enc = OneHotEncoder(drop='first').fit(X)
>>> drop_enc.categories_
[array(['Female''Male'], dtype=object), array([123], dtype=object)]
>>> drop_enc.transform([['Female'1], ['Male'2]]).toarray()
array([[0.0.0.],
       [1.1.0.]])

或為僅具有2個類別的功能刪除一列:

>>> drop_binary_enc = OneHotEncoder(drop='if_binary').fit(X)
>>> drop_binary_enc.transform([['Female'1], ['Male'2]]).toarray()
array([[0.1.0.0.],
       [1.0.1.0.]])

方法

方法 說明
fit(X[, y]) 使OneHotEncoder適應X。
fit_transform(X[, y]) 使OneHotEncoder擬合X,然后變換X。
get_feature_names([input_features]) 返回輸出要素的要素名稱。
get_params([deep]) 獲取此估計量的參數。
inverse_transform(X) 將數據轉換回原始表示形式。
set_params(**params) 設置此估算器的參數。
transform(X) 使用one-hot編碼轉換X。
__init__(*, categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')

[源碼]

初始化self,有關準確的簽名,請參見help(type(self))。

fit(X, y=None)

[源碼]

使OneHotEncoder適應X。

參數 說明
X array-like, shape [n_samples, n_features]
該數據確定每個功能的類別。
y None
忽略了。僅存在此參數是為了與sklearn.pipeline.Pipeline.兼容。
返回值 說明
self -
fit_transform(X, y=None)

[源碼]

使OneHotEncoder適應X,然后變換X。

等效于fit(X).transform(X),但更方便。

參數 說明
X array-like, shape [n_samples, n_features]
要編碼的數據。
y None
忽略了。僅存在此參數是為了與sklearn.pipeline.Pipeline.兼容。
返回值 說明
X_out sparse matrix if sparse=True else a 2-d array
轉換后的輸入。
get_feature_names(input_features=None)

[源碼]

返回輸出要素的要素名稱。

參數 說明
input_features list of str of shape (n_features,)
輸入功能的字符串名稱(如果有)。默認情況下,使用“ x0”,“ x1”,……“ xn_features”。
返回值 說明
output_feature_names ndarray of shape (n_output_features,)
功能名稱數組。
get_params(deep=True)

[源碼]

獲取此估計量的參數。

參數 說明
deep bool, default=True
如果為True,則將返回此估算器和作為估算器的所包含子對象的參數。
返回值 說明
params mapping of string to any
參數名稱映射到其值。
inverse_transform(X)

[源碼]

將數據轉換回原始表示形式。

如果遇到未知類別(單次熱編碼中的全零),則無(None)代表該類別。

參數 說明
X array-like or sparse matrix, shape [n_samples, n_encoded_features]
轉換后的數據。
返回值 說明
X_tr array-like, shape [n_samples, n_features]
逆變換數組。
set_params(**params)

[源碼]

設置此估算器的參數。

該方法適用于簡單的估計器以及嵌套對象(例如管道)。他后者具有以下形式的參數<component>__<parameter>這樣就可以更新嵌套對象的每個組件。

參數 說明
**params dict
估算器參數。
返回值 說明
self object
估算器實例。
transform(X)

[源碼]

參數 說明
X array-like, shape [n_samples, n_features]
要編碼的數據。
返回值 說明
X_out sparse matrix if sparse=True else a 2-d array
轉換后的輸入。