sklearn:OneHotEncoderの簡単な使い方

1884 ワード

離散型フィーチャーをone-hot符号化すると,フィーチャー間の距離計算がより合理的になる.離散的特徴をone-hot符号化した後,符号化後の特徴は,実は各次元の特徴が連続的な特徴と見なすことができる.連続型の特徴の正規化方法と同様に,各次元の特徴を正規化することができる.

from sklearn.preprocessing import OneHotEncode

enc = OneHotEncoder()

新しいバージョンでは、初期化パラメータはcategories、drop、sparse、dtype、handle_の5つです.unknown.私は今初心者で、公式のドキュメントを読んだ後、前の4つのパラメータは気にしないで、デフォルトでいいと思って、handle_unknownは比較的有用なパラメータで、デフォルトは「error」ですが、「ignore」と指定したほうがいいと思います.このパラメータの目的は、one-hot符号化に変換する際に、属性値が事前に指定されていない場合、プログラムはどうすればいいですか.errorであれば、プログラムはエラーで停止しますが、データの処理が不便で、逆にignoreの方が良いので、プログラムは実行を続けることができます.以下に例を挙げて説明します.
enc.fit([[" ", 0, 3], [" ", 1, 0], [" ", 2, 1], [" ", 0, 2]])

まずデータセットを訓練し,各列の属性の種類を抽出し,次のような結果を得た.
print(enc.categories_)
[array([' ', ' '], dtype=object), array([0, 1, 2], dtype=object), array([0, 1, 2, 3], dtype=object)]

第1の特徴には2つの値があり、それぞれ男性と女性であることを意味し、handle_unknownデフォルトでは、次の文を実行するとエラーが表示されます.
print((enc.transform([[" ", 0, 3], [" ", 1, 0], [" ", 2, 1], [" ", 0, 2]]).toarray()))

「中性」は訓練されていないので、これに遭遇してどうしたらいいか分からず、エラーを報告して停止しましたがhandle_を指定するとunknownがignoreであれば、間違いを報告することはありません.ある程度、これはもっといいです.
enc = OneHotEncoder(handle_unknown='ignore')

最後のone-hot符号化を見ることができます
[[0. 1. 1. 0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0. 1. 0. 0. 0.]
 [1. 0. 0. 0. 1. 0. 1. 0. 0.]
 [1. 0. 1. 0. 0. 0. 0. 1. 0.]]

2行目は、中性は事前に指定されていないため、0,0を表示し、独熱符号化の各列の意味をエラーなく表示する方法に注意することができます.get_を使用できますfeature_names()メソッド
print(enc.get_feature_names())

最後に、上の行列に対応するフィーチャー名が次のように表示されます.
['x0_ ' 'x0_ ' 'x1_0' 'x1_1' 'x1_2' 'x2_0' 'x2_1' 'x2_2' 'x2_3']