「Pandas:データをワンホットエンコードする方法」

Pandas How to One-Hot Encode Data

 

ワンホットエンコーディングとは

 

ワンホットエンコーディングは、カテゴリカルな値を数値形式に変換するためのデータ前処理の手法です。

categorical_column bool_col col_1 col_2 label
value_A True 9 4 0
value_B False 7 2 0
value_D True 9 5 0
value_D False 8 3 1
value_D False 9 0 1
value_D False 5 4 1
value_B True 8 1 1
value_D True 6 6 1
value_C True 0 5 0

 

このダミーデータでは、カテゴリカルな列には複数の文字列値があります。多くの機械学習アルゴリズムでは、入力データが数値形式であることが必要です。そのため、このデータ属性をそのようなアルゴリズムと互換性のある形式に変換する方法が必要です。したがって、カテゴリカルな列を複数のバイナリ値列に分割します。

 

Pandasライブラリを使用したワンホットエンコーディングの方法

 

まず、.csvファイルまたは関連するファイルをPandasのデータフレームに読み込みます。

df = pd.read_csv("data.csv")

 

ユニークな値を確認し、データをよりよく理解するために、次のPandas関数を使用することができます。

df['categorical_column'].nunique()
df['categorical_column'].unique()

 

このダミーデータでは、関数は以下の出力を返します:

>>> 4
>>> array(['値A', '値C', '値D', '値B'], dtype=object)

 

カテゴリカル列については、複数の列に分割することができます。そのために、pandas.get_dummies()メソッドを使用します。以下の引数を取ります:

引数
data: array-like、Series、またはDataFrame 元のパンダのデータフレームオブジェクト
columns: list-like、デフォルトはNone ホットエンコードするカテゴリカル列のリスト
drop_first: bool、デフォルトはFalse 最初のカテゴリラベルを削除します

 

関数をよりよく理解するために、ダミーデータセットのワンホットエンコーディングを行いましょう。

 

カテゴリカル列のワンホットエンコーディング

 

get_dummiesメソッドを使用し、元のデータフレームをdata入力として渡します。 columnsでは、カテゴリカル列のヘッダーだけを含むリストを渡します。

df_encoded = pd.get_dummies(df, columns=['カテゴリカル列', ])

 

以下のコマンドは、カテゴリカル列を削除し、各一意の値に対して新しい列を作成します。したがって、単一のカテゴリカル列が4つの新しい列に変換されます。4つの列のうち1つだけが1の値を持ち、他の3つは0でエンコードされます。これがワンホットエンコーディングと呼ばれる理由です。

カテゴリカル列値A カテゴリカル列値B カテゴリカル列値C カテゴリカル列値D
1 0 0 0
0 1 0 0
0 0 0 1
0 0 0 1
0 0 0 1
0 0 0 1
0 1 0 0
0 0 0 1
0 0 1 0
0 0 0 1

 

問題は、ブール列をワンホットエンコードする場合に発生します。これにより、2つの新しい列が作成されます。

 

バイナリ列のホットエンコーディング

 

df_encoded = pd.get_dummies(df, columns=[bool_col, ])

 

bool_col_False bool_col_True
0 1
1 0
0 1
1 0

 

Trueが1にエンコードされ、Falseが0にエンコードされる1つの列だけで済むのに、不必要に列が増えています。これを解決するために、drop_first引数を使用します。

df_encoded = pd.get_dummies(df, columns=['bool_col'], drop_first=True)

 

bool_col_True
1
0
1
0

 

結論

 

ダミーデータセットはワンホットエンコードされ、最終的な結果は以下のようになります

col_1 col_2 bool A B C D label
9 4 1 1 0 0 0 0
7 2 0 0 1 0 0 0
9 5 1 0 0 0 1 0
8 3 0 0 0 0 1 1
9 0 0 0 0 0 1 1
5 4 0 0 0 0 1 1
8 1 1 0 1 0 0 1
6 6 1 0 0 0 1 1
0 5 1 0 0 1 0 0
1 8 1 0 0 0 1 0

 

カテゴリ値とブール値は、機械学習アルゴリズムへの入力として使用できる数値に変換されました。      Muhammad Arhamは、コンピュータビジョンと自然言語処理の分野で働くディープラーニングエンジニアです。彼は、Vyro.AIでグローバルトップチャートに到達したいくつかの生成型AIアプリケーションの展開と最適化に取り組んできました。彼は、知的システムのための機械学習モデルの構築と最適化に興味があり、継続的な改善を信じています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more