本文簡要介紹python語言中 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’)編碼方案進行編碼。這將為每個類別創建一個二進製列並返回稀疏矩陣或密集數組(取決於
sparse
參數)默認情況下,編碼器根據每個特征中的唯一值派生類別。或者,您也可以手動指定
categories
。將分類數據提供給許多 scikit-learn 估計器需要這種編碼,特別是線性模型和具有標準內核的 SVM。
注意:y 標簽的 one-hot 編碼應使用 LabelBinarizer 代替。
在用戶指南中閱讀更多信息。
- categories:‘auto’ 或類似數組的列表,默認=’auto’
每個函數的類別(唯一值):
- ‘auto’:根據訓練數據自動確定類別。
- list :
categories[i]
包含第 i 列中預期的類別。傳遞的類別不應在單個特征中混合字符串和數值,並且應在數值的情況下進行排序。
使用的類別可以在
categories_
屬性中找到。- drop:{‘first’, ‘if_binary’} 或類似數組的形狀 (n_features,),默認=無
指定用於刪除每個函數的一個類別的方法。這在完全共線特征導致問題的情況下很有用,例如將結果數據輸入神經網絡或非正則化回歸時。
但是,刪除一個類別會破壞原始表示的對稱性,因此可能會導致下遊模型出現偏差,例如懲罰線性分類或回歸模型。
- 無:保留所有特征(默認)。
- ‘first’:刪除每個特征中的第一個類別。如果隻存在一個類別,則該函數將被完全刪除。
- ‘if_binary’:將每個特征中的第一個類別去掉兩個類別。具有 1 個或超過 2 個類別的特征保持不變。
- 數組:
drop[i]
是函數X[:, i]
中應該刪除的類別。
- sparse:布爾,默認=真
如果設置為 True 將返回稀疏矩陣,否則將返回一個數組。
- dtype:數字類型,默認=浮點數
所需的輸出數據類型。
- handle_unknown:{‘error’, ‘ignore’},默認='錯誤'
如果在轉換期間存在未知的分類特征,是否引發錯誤或忽略(默認為引發)。當此參數設置為 ‘ignore’ 並且在轉換過程中遇到未知類別時,生成的此函數的 one-hot 編碼列將全為零。在逆變換中,未知類別將表示為無。
- categories_:數組列表
擬合期間確定的每個特征的類別(按 X 中特征的順序並與
transform
的輸出相對應)。這包括drop
(如果有)中指定的類別。- drop_idx_:形狀數組(n_features,)
drop_idx_[i]
是categories_[i]
中每個特征要刪除的類別的索引。drop_idx_[i] = None
如果不從索引為i
的特征中刪除任何類別,例如當drop='if_binary'
並且該函數不是二進製時。drop_idx_ = None
如果將保留所有轉換後的特征。
- n_features_in_:int
擬合期間看到的特征數。
- feature_names_in_:ndarray 形狀(
n_features_in_
,) 擬合期間看到的特征名稱。僅當
X
具有全為字符串的函數名稱時才定義。
參數:
屬性:
例子:
給定一個具有兩個特征的數據集,我們讓編碼器找到每個特征的唯一值,並將數據轉換為二進製 one-hot 編碼。
>>> from sklearn.preprocessing import OneHotEncoder
可以丟棄
fit
期間未見的類別:>>> 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_out(['gender', 'group']) array(['gender_Female', 'gender_Male', 'group_1', 'group_2', 'group_3'], ...)
始終可以刪除每個函數的第一列:
>>> 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.]])
相關用法
- Python sklearn OneVsRestClassifier用法及代碼示例
- Python sklearn OneVsOneClassifier用法及代碼示例
- Python sklearn OneClassSVM用法及代碼示例
- Python sklearn OAS用法及代碼示例
- Python sklearn OrdinalEncoder用法及代碼示例
- Python sklearn OrthogonalMatchingPursuit用法及代碼示例
- Python sklearn OPTICS用法及代碼示例
- Python sklearn OutputCodeClassifier用法及代碼示例
- Python sklearn OrthogonalMatchingPursuitCV用法及代碼示例
- Python sklearn jaccard_score用法及代碼示例
- Python sklearn WhiteKernel用法及代碼示例
- Python sklearn CalibrationDisplay.from_predictions用法及代碼示例
- Python sklearn VotingRegressor用法及代碼示例
- Python sklearn gen_batches用法及代碼示例
- Python sklearn ExpSineSquared用法及代碼示例
- Python sklearn MDS用法及代碼示例
- Python sklearn adjusted_rand_score用法及代碼示例
- Python sklearn MLPClassifier用法及代碼示例
- Python sklearn train_test_split用法及代碼示例
- Python sklearn RandomTreesEmbedding用法及代碼示例
- Python sklearn GradientBoostingRegressor用法及代碼示例
- Python sklearn GridSearchCV用法及代碼示例
- Python sklearn log_loss用法及代碼示例
- Python sklearn r2_score用法及代碼示例
- Python sklearn ndcg_score用法及代碼示例
注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.preprocessing.OneHotEncoder。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。