ホームページ  >  記事  >  バックエンド開発  >  Scikit-Learn で複数の列を効率的にラベル エンコードするにはどうすればよいですか?

Scikit-Learn で複数の列を効率的にラベル エンコードするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-12 03:48:02198ブラウズ

How to Label Encode Multiple Columns Efficiently in Scikit-Learn?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。