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([1, 2, 3], dtype=object)]
>>> enc.transform([['Female', 1], ['Male', 4]]).toarray()
array([[1., 0., 1., 0., 0.],
[0., 1., 0., 0., 0.]])
>>> enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])
array([['Male', 1],
[None, 2]], 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([1, 2, 3], 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 轉換后的輸入。 |