機械学習を実施する前のデータの前処理、one-hotエンコーディングについてまとめました。
※学習初学者の勉強のアウトプットですので、もしコードや解釈に間違い等あればご指摘頂けますと幸いです。
メモも兼ねて、各コードなるべく詳しく説明をつけるようにしています。
one-hotエンコーディングとは?
カテゴリ変数を数字に変換する手法のことです。具体的に言うと、文字列のデータを「0」,「1」に置き換えます。
ワンホットエンコーディングはカテゴリ間の順序を前提としません。よってカテゴリ変数間に明確な順序がない場合(例えば、白・赤・黄色、晴・雨・雪、等)にこの方法がうまく機能することが期待されます。
カテゴリ変数が多数の値をとる場合には一般的にはうまく機能しません。15種類以上の異なる値を取る変数には通常使用されないようです。
one-hotエンコーディングの実施
簡単なデータフレームを作って、one-hotエンコーディングを実施してみようと思います。
#必要なライブラリのインポート
import pandas as pd
#データフレームの作成
df = pd.DataFrame({"ground_condition" : ["良","稍重","重","不良","不良"]})
#one-hotエンコーディングを行う
pd.get_dummies(df["ground_condition"])
#one-hotエンコーディングを行い、かつ元の列名を入れる
pd.get_dummies(df["ground_condition"] ,prefix = "ground_condition")
#one-hotエンコーディングを行い、かつ元の列名を入れ、明示的に0/1表示にする
pd.get_dummies(df["ground_condition"] ,prefix = "ground_condition", dtype=int)
解説
#必要なライブラリのインポート
import pandas as pd
#データフレームの作成
df = pd.DataFrame({"ground_condition" : ["良","稍重","重","不良","不良"]})
必要なライブラリをインポートした後、簡単なデータフレームを作成します。
競馬が好きなので、馬場状況のデータフレームにしました。
#one-hotエンコーディングを行う
pd.get_dummies(df["ground_condition"])
pd.get_dummies()でone-hotエンコーディングを行います。たった一行、めちゃくちゃ簡単です。True = Yes, False = Noです。
#one-hotエンコーディングを行い、かつ元の列名を入れる
pd.get_dummies(df["ground_condition"] ,prefix = "ground_condition")
何の列に対してone-hotエンコーディングを行ったかわからないので、prefix = "元の列名"として、カラム名に元の列名を入れてみます。
#one-hotエンコーディングを行い、かつ元の列名を入れ、明示的に0/1表示にする
pd.get_dummies(df["ground_condition"] ,prefix = "ground_condition", dtype=int)
True,Falseとなっているので、明示的に数値にしてみます。True = Yes = 1, False = No = 0となります。