one-hotエンコーディング
概要
one-hotエンコーディングについて学習したので、共有します。
one-hotエンコーディングとは
機械学習を使う際の前処理の1つです。
たとえば"性別"という特徴量は、男/女の2種類の値をもちます。 これをカテゴリ変数と呼びます。
しかし値が文字になっているため、そのままだと機械学習の学習器に入れることができません。 そのため、以下のように、"オリジナルの特徴量"_"値"で新しくヘッダを作り、値を1 or 0で表現することで、 機械学習の学習器に入れることが可能となります。 この新しく1 or 0で表現する方法を、one-hotエンコーディングといいます。
性別_男 | 性別_女 |
---|---|
1 | 0 |
0 | 1 |
実装方法
私の知っている限り、実装方法は以下の2種類があります。 1.pandasのget_dummysを使う方法 2.scikit-learnのOneHotEncoderを使う方法
今回はpandasのget_dummysを使う方法を説明します。
pandasのget_dummysを使う方法
公式ドキュメント pandas.get_dummies — pandas 0.23.4 documentation
pandasのget_dummysは、one-hotエンコーディングするデータ(Series or DataFrame)が必須の引数です。
import pandas as pd
data = pd.read_csv("train.csv");
pd.get_dummys(data)
とすれば、データがエンコーディングできます。 特徴量がすべてカテゴリ変数とは限らないので、エンコーディングする特徴量を選択したい場合が多いと思います。
その場合、以下のように特徴量のヘッダ名をリストで定義し、 get_dummys関数にオプション引数で与えることで、エンコーディングする特徴量を選択できます。
ohe_columns = ['Country', 'Sex']
pd.get_dummys(data, columns=one_columns)
使用例(Titanicデータを使って説明)
Titanicデータを使った場合の使用例です。 Train.csvを読み込んだままでは、PclassやSexなどの特徴量がカテゴリ変数となっています。
以下のように、PClass、Sexを指定してone-hotエンコーディングすると、
- Pclass→Pclass_1, Pclass_2, Pclass_3
- Sex→Sex_female, Sex_male
のように列が更新され、1 or 0で表現できました。