概要
カテゴリ変数を数値に変換する方法として、順序エンコーディング (Ordinal Encoding) とワンホットエンコーディング (One-hot Encoding) を解説します。
カテゴリ変数と量的変数
- カテゴリ変数 (Categorical Variable) は、名前や性別のように、有限個のラベルをとる変数のことをいいます。
- 量的変数 (Quantitative Variable) は、年齢、金額のように、数字の大きさに意味を持つ数値をとる変数のことをいいます。
具体的な例を見てみましょう。以下は支払ったチップの金額について、会計金額、性別、曜日などの情報を一緒に記録したテーブルデータです。
- カテゴリ変数:
sex
、smoker
、day
、time
- 量的変数:
total_bill
、tip
、size
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
カテゴリ変数を機械学習のアルゴリズムで扱えるようにするには、なんらかの方法で数値に変換する 符号化 (encode) を行う必要があります。 以下では、その符号化方法として、ordinal encoding と one-hot encoding という2つのやり方を解説します。
順序エンコーディング (Ordinal Encoding)
カテゴリ変数に連続した整数を割り当てる符号化方法です。
データの変換
sklearn.preprocessing.OrdinalEncoder はカテゴリ変数の特徴量を整数に変換するエンコーダーです。
- fit() にカテゴリ変数のデータを表す形状が (サンプル数, 特徴量の次元数) の2次元配列を渡すことでラベルと整数の対応づけが行われます。
- transform() にカテゴリ変数のデータを渡すことで、符号化したデータが得られます。
- inverse_transform() に符号化後のデータを渡すことで符号化前のデータが得られます。
[[0. 0.] [1. 1.]] [['Male' 'A'] ['Female' 'B']]
ラベルの変換
sklearn.preprocessing.LabelEncoder はカテゴリ変数のラベルを整数に変数するエンコーダーです。カテゴリ変数の正解ラベルを符号化するのに使います。扱うのが1次元配列である点以外は OrdinalEncoder と同じです。
[0 1 2] ['A' 'B' 'C']
ワンホットエンコーディング (One-hot Encoding)
one-hot 表現
個の有限個の値をとるカテゴリ変数があったとき、長さが で該当する要素が1、それ以外の要素が0のベクトルで表す表現方法を one-hot 表現といいます。
データの変換
sklearn.preprocessing.OneHotEncoder はカテゴリ変数の特徴量を one-hot 表現に変換するエンコーダーです。
[[1. 0. 1. 0.] [0. 1. 0. 1.]] [['Female' 'A'] ['Male' 'B']]
ラベルの変換
sklearn.preprocessing.LabelBinarizer はカテゴリ変数のラベルを one-hot 表現に変換するエンコーダーです。カテゴリ変数の正解ラベルを符号化するのに使います。
[[1 0 0] [0 1 0]] ['A' 'B']
コメント