データサイエンスにおける特徴量の変換って何だろう?どんな考え方や手法で変換するのか知りたいなぁ。
こんな疑問に答えていきます。
特徴量の変換とは
特徴量の変換とは、文字列やカテゴリーデータを数値データに変換する処理です。
特徴量の変換処理を行う理由は、文字列やカテゴリーデータのままだと機械学習のモデルで扱うことができないケースが多いからです。
変換手法はいくつかありますが、本記事ではその中でも代表的な以下2つについて解説したいと思います。
- one-hot encoding
- label encoding
それぞれ解説していきます。
特徴量の変換処理①:one-hot encoding
one-hot encodingとは、各カテゴリデータを0と1で表現したベクトルに変換する処理です。
例えば、[Windows, MacOS, Linux]
という3つのカテゴリを持つ変数に対して、one-hot encodingを行うとします。
すると、Windowsは[1, 0, 0]
、MacOSは[0, 1, 0]
、Linuxは[0, 0, 1]
というベクトルで表現されます。
one-hot encodingには注意点があります。one-hot encodingは、カテゴリデータが膨大になると特徴量の数が膨大になってしまう点です。
特徴量の数が膨大になれば、それだけ学習に要する時間も膨大になり扱いにくくなってしまいます。
one-hot encodingの実装方法
one-hot encodingは、pandasのget_dummies関数で実装することができます。
df = pd.DataFrame({"category":["A", "B", "C", "B", "B"],
"numerical":[0, 1, 2, 3, 4]})
pd.get_dummies(df, columns=["category"])
numerical category_A category_B category_C
0 0 1 0 0
1 1 0 1 0
2 2 0 0 1
3 3 0 1 0
4 4 0 1 0
get_dummies関数を用いることから、one-hot encodingを「ダミー変数化」と呼んだりします。
実際のデータサイエンスでどのように使うのかは、以下の記事にてデータサインス100本ノックの58問目を題材に解説しているので、合わせてご確認ください。
特徴量の変換処理②:label encoding
label encodingを用いて[Windows, MacOS, Linux]
という3つのカテゴリを持つ変数を変換すると、Windowsは0
、MacOSは1
、Linuxは2
となります。
one-hot encodingとは異なり、カテゴリ数が多くても特徴量の数が膨大にならない点がメリットになります。
しかし、label encodingにも注意点があります。
label encodingで変換されたカテゴリは、0, 1, 2, 3,….という風に、ベクトルという意味では「大きさ」を持ってしまいます。そのため、数値の大きさを機械学習のモデルが考慮してしまいます。
変換前の[Windows, MacOS, Linux]の3つには、大きさの尺度や重みというものはなく、全て同列のデータです。変換前のカテゴリの間に大きさの尺度や重みが無いのにも関わらず、0, 1, 2という風に数値の大きさをもたせてしまう点はモデル適用時に注意する必要があります。
ただし、「高品質、中品質、低品質」という風に、カテゴリの間に大きさや尺度が存在する場合は、label encodingが適していると言えます。
label encodingの実装方法
label encodingは、scikit-learnのLabelEncoderで実装可能です。
from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame({"category":["A", "B", "C", "B", "B"],
"numerical":[0, 1, 2, 3, 4]})
lbe = LabelEncoder()
lbe.fit_transform(df["category"])
array([0, 1, 2, 1, 1])
まとめ:特徴量の変換の必要性と代表的な2つの手法を紹介しました。
繰り返しになりますがまとめます。
- 特徴量の変換とは、文字列やカテゴリーデータを数値データに変換する処理。
- 特徴量の変換をしなければ、機械学習のモデルで扱うことができないケースが多い
- 特徴量の変換手法の代表的なものは以下の2つ
- one-hot encoding
- label encoding
one-hot encodingは、カテゴリデータが膨大になると特徴量の数が膨大になってしまう点に注意しましょう。
label encodingは、特徴量の増大は防げるものの、カテゴリデータの間に尺度や大きさを持ってしまう点に注意が必要です。
実際のデータを用いてone-hot encodingとlabel encodingの活用方法を学びたい方は、以下のKaggleの記事を参照ください。住宅価格の予測を行う問題でone-hot encodingとlabel encodingを使用しています。
なお、データサイエンティストに関する専門知識はAidemyでの学習がおすすめです。
\ 無料ビデオカウンセリング受付中 /
コメント