【Python】配列(ベクトル)をOneHotエンコーディングにて変換する方法、やり方まとめ

数式 サムネイル

PythonにおけるOneHot(ワンホット)エンコーディングのやり方をそれぞれのライブラリ毎にまとめてご紹介いたしますので、忘れてしまった、使い方がごちゃごちゃになってしまった時にご参照ください。

スポンサーリンク
目次

NumpyにおけるOneHotエンコーディング

numpyにおけるエンコーディング方法はeye関数を使用します。

書き方は以下のようになります。

eye関数は単位行列を生成する関数なのですが、分類数分の単位行列を生成した後に、配列の値からそのままインデックスを指定して行を引っこ抜けばワンホットされているという手法です。

PandasにおけるOneHotエンコーディング

Pandasの場合はget_dummies関数というものを使います。numpyに比べるとだいぶ簡単に利用することができます。

get_dummies関数は第1引数にpandasのデータフレームを、第2引数にワンホットエンコーディングするカラム名をリストで指定します。

変換すると変換した列の種類ごとに列が生成されます。

scikit-learnにおけるOneHotエンコーディング

scikit-learnについてはOneHotEncoderというモジュールを使用します。numpyの配列に対して使用します。PandasのDataFrameでもできなくはないですけど結構面倒くさいので、get_dummies関数かもしくは後述するCategory Encodersを使用しましょう。

Numpyの場合

numpyの場合は読み込めるように配列の形を修正→エンコーダーのプロパティをセッティング→エンコード実施という流れです。読み込めるように形を変更しなければいけない場合がある点に注意しましょう。

Pandasの場合

Pandasの場合のやり方も一応記載しておきます。

一つのカテゴリのデータに対して、読み込めるようにNumpy形式にデータを変えてエンコーディングして、エンコーダーからエンコーディングしたデータを取り出してPandasに戻して…って滅茶苦茶面倒くさいことになってます。1行で終わったget_dummies関数と見比べるとその差は歴然です。

あとプロパティに設定している [handle_unknown]ですが項目が存在しなかったデータをどうするかを設定してます。”ignore”は文字通り無視します。

Category Encoders におけるOneHotエンコーディング

個人的におすすめな方法ですが、Category Encodersというライブラリを利用したワンホットエンコーディングの方法があります。

注意してほしいのはローカル環境ではもちろんですがColabでも別途インストールが必要なので、使えないよー!っていう人はインストールするコマンドをColab上で実施してみてください。(普通にコードのテキストエリアにコマンドを張り付けて実行ボタンを押すだけでいいです)

実行結果はget_dummies関数と同じ感じですが、プロパティを設定できたりほかにも様々なエンコーディングができるので便利です。

あと例の[handle_unknown]プロパティですが、今回は”impute”を指定しています。imputeを項目が存在しないデータには-1を設定します。

以上です。

やり方がわからない、他にもこういう方法がある等ございましたらご連絡いただければ幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

本業ではPHPを使ったWEBアプリやJavaを使用した基幹アプリを作成しております。Pythonは個人的に勉強しており、E資格を取ったりしたおかげで、業務でAIの研究とかも任されるようになりました。学習のアウトプットのために本サイトを運営しておりますが、これからPythonを学ぶという人のお役に立てればいいなと思います。わからないことや調査して記事にしてほしいことがございましたらご連絡いただけると幸いです。

コメント

コメントする

目次
閉じる