【初心者向け】OneHotエンコーディングとは、なぜ必要なのかなるべく簡単にわかりやすく解説

今回は機械学習の基本となるOneHot(ワンホット)エンコーディングについて解説いたします。OneHotエンコーディングとは何か、なぜエンコーディングする必要があるのかというところから丁寧に解説いたしますので、AIについて学び始めたばかりという人にもわかりやすく解説いたします。

なお、PythonにおけるOneHotエンコーディングの方法については以下の記事でまとめておりますので、必要に応じて併せてご確認ください。

あわせて読みたい
【Python】配列(ベクトル)をOneHotエンコーディングにて変換する方法、やり方まとめ PythonにおけるOneHot(ワンホット)エンコーディングのやり方をそれぞれのライブラリ毎にまとめてご紹介いたしますので、忘れてしまった、使い方がごちゃごちゃになっ...
スポンサーリンク
目次

OneHot(ワンホット)エンコーディングとは

OneHot(ワンホット)エンコーディングとは複数種類の性質を持つような、いわゆるカテゴリのデータを0か1かで表現する方法の事です。

例えば、その日の天気のデータがあり、晴れ、曇り、雨の三種類にデータが分かれていたとします。

この場合、それぞれの天気データを以下のように変換する作業の事を言います。

変換前 ワンホット表現変換後
晴れ 1 0 0
曇り 0 1 0
0 0 1

そのデータの天気のカラムが”晴れ”なら「100」に、曇りであれば、「010」に、雨であれば「001」にといった形に置き換えてあげます。

このようにすることでAIの学習時により扱いやすいデータになるため、より良い予測結果が得られる場合があります。

なぜエンコーディングするのか

それではなぜこのような作業が必要なのかについて説明します。

文字列データを数字データとして扱うため

AI、つまり機械学習はいわば数学の塊です。そこに数学では扱えないデータ、つまり文字列を与えたところで計算には使えないのです。Pythonのコードでも文字列データの足し算で例えば、「青+赤」は紫になったりしませんよね。数学ではもちろん数値のデータしか計算に使えないので晴れや曇りといった文字列を数値に置き換えてあげる必要があるのです。

数値データの意味を正しくAIに読み込ませるため

数値データを正しく認識させるとはどういうことかというと、例えば天気のそれぞれの値に区分値として以下のようにデータが降られていたとします。

晴れ : 1

曇り : 2

雨 : 3

この場合、それぞれの区分値をそのまま扱えそうですが、本当に良いでしょうか?

上記の値を数値としてそのまま扱うと以下のようなことが発生してしまいます。

晴れ + 晴れ = 曇り

晴れが2日続くと実質曇りということでしょうか。そんなわけないですよね。

それぞれの区分値には数値としての意味は全くありません。このままでは文字列データと何ら変わりないのです。なので、0か1かの表現に置き換えてあげる必要があるのです。

なぜ0か1に置き換えると数値データとして扱えるのか

何故0か1に置き換えるとよいかはON、OFFのフラグとして考えると分りやすいです。

例えば晴れについてはこうです。

  晴れフラグ 曇りフラグ 雨フラグ
天気1 1 0 0

晴れのフラグが立っていて他のフラグが立っていないので天気1は「晴れ」ということができますね。これで0と1にはっきりと意味があることがわかります。

もっと言うと確率として考えるとより数値データとしてのイメージがつくかもしれません。

  晴れの確率 曇りの確率 雨の確率
天気1 1(100%) 0(0%) 0(0%)

晴れの確率が1、つまり100%で他の天気である確率が0%なので天気1は晴れであることが確実になります。

こうすることではっきりとワンホット表現に置き換えたデータが数値として意味を成していることがわかったかなと思います。

OneHotエンコーディングの問題点

機械学習では非常に便利なOneHotエンコーディングですが、OneHotエンコーディングを行うことでデータの特徴数、次元数とも言いますがそれが増えてしまうという問題点があります。

特徴数が増えるとどういう弊害が起きるかというと主には以下の2つがあります。

  1. 次元の呪いが起きる可能性が高くなる
  2. 計算量が増える、メモリが足りなくなる

次元の呪い

次元の呪いとはデータの特徴量の数、つまり次元数が増えてしまうことにより、学習の効率が著しく低下してしまう現象が発生する現象の事です。次元数が増えると学習する特徴量の組み合わせだったり、データのパターンが増え、データの表現がより複雑になってしまいます。そうするとAIがデータの傾向を把握するために必要な学習量が増えてしまい、用意したサンプルデータでは学習しきれず思うように精度が得られないといった事態に陥ってしまいます。

この次元の呪いが、OneHotエンコーディングをすることで発生するリスクが高くなるので、これが発生しないように回避策などで対処するといったことも必要になります。

ちなみに自然言語処理や画像処理といったタスクではデータの次元数が莫大ですので、よくこういう問題に直面します。

計算量が増える

上記でデータの表現が複雑化すると記載しましたが、そうなれば当然計算量も増えてしまいます。数学でもそうですが、[ax^2 + bx + c] といった2次元の方程式より、[ax^3 + bx^2 + cx + d]といった3次元の方程式の方が解くのは難しいですよね。計算量が増えれば当然時間もかかりますし、必要なメモリも多くなってしまいます。

これにより学習時に要求されるマシンスペックが大きくなってしまって、今のマシンでは学習できない!なんてことになってしまうかもしれません。

このような問題もありますので、他の手法でもそうですが、特徴量の処理に本当にOneHotエンコーディングでよいのかというのは十分検討する必要があります。

いかがでしたでしょうか。

よくわからなかった、解釈に間違いがある等ございましたらコメント等でご連絡いただけますと幸いです。

 

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

この記事を書いた人

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

コメント

コメントする

目次
閉じる