Scikit-Learn の複数列にわたるラベル エンコーディング
ラベル エンコーディングは、カテゴリ データを数値特徴に変換する一般的な手法です。列ごとに個別の LabelEncoder インスタンスを作成することは可能ですが、複数の列でラベル エンコードが必要な場合は、単一のエンコーダーを使用する方が効率的です。
文字列ラベルの多数の列を持つ DataFrame を考えてみましょう。 DataFrame 全体をラベル エンコードするには、以下に示すように DataFrame 全体を LabelEncoder に渡すのが簡単な方法です:
import pandas as pd from sklearn.preprocessing import LabelEncoder df = pd.DataFrame({ 'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 'New_York'] }) le = LabelEncoder() le.fit(df)
ただし、この方法では次のエラーが発生します:
ValueError: bad input shape (6, 3)
この問題を解決するには、apply 関数を使用して DataFrame の各列に LabelEncoder を適用します。このメソッドは各列を個別に変換し、複数の列を効率的に 1 ステップでエンコードできるようにします:
df.apply(LabelEncoder().fit_transform)
また、scikit-learn 0.20 以降では、OneHotEncoder を使用することをお勧めします:
OneHotEncoder().fit_transform(df)
OneHotEncoder は、エンコード文字列入力を直接サポートするようになりました。
柔軟性を高めるために、ColumnTransformer を使用して、ラベル エンコードを特定の列に、または列内の特定のデータ型にのみ適用できます。
逆変換と将来のデータの変換では、defaultdict を使用して各列のラベル エンコーダーを保持できます。辞書からエンコーダーにアクセスすることで、元の LabelEncoder インスタンスを使用してデータをデコードまたはエンコードすることができます。
さらに、Neuraxle のようなライブラリには、フラット化されたデータへの同じ LabelEncoder の適用を容易にする FlattenForEach ステップが用意されています。
列ごとに異なる LabelEncoder が必要な場合、または列のサブセットのみをエンコードする必要がある場合、ColumnTransformer は選択とエンコードのプロセスをきめ細かく制御できます。
以上がScikit-Learn で複数の列を効率的にラベル エンコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。