回答:
データセットにカテゴリ機能(色など)があるとします。サンプルは赤、黄、青のいずれかになります。この引数をMLアルゴリズムに渡すには、文字列の代わりに数字を使用できるように、まずエンコードする必要があります。
このようなことを行う最も簡単な方法は、次のようなマッピングを作成することです。
赤->
黄色1- >
青2- > 3
各文字列をマッピングされた値に置き換えます。
ただし、これにより不要な副作用が生じる可能性があります、数値を扱う場合、青>黄(3> 2の場合)または赤+黄=青(1 + 2 = 3の場合)と考える場合、MLモデルに。モデルには、これらのデータがカテゴリカルであり、整数としてマップされたことを知る方法がありません。
この問題の解決策は、N個の新しい機能を作成するワンホットエンコーディングです。Nは元の機能の一意の値の数です。私たちの例では、3つの一意の色(赤、黄、青)があるため、Nは3になります。
これらの機能はそれぞれバイナリであり、1つに対応します、これらの一意の値のます。この例では、最初の機能はそのサンプルが赤かどうかを示すバイナリ機能であり、2番目は黄色の場合、3番目は青の場合と同じです。
そのような変換の例を以下に示します。
このアプローチはデータセットの次元を増加させるため、多くの一意の値を取得する機能がある場合、よりスパースなエンコーディング(上記で示したような)を使用する場合があることに注意してください。
depth:1つのホットディメンションの深さを定義するスカラー。
インデックス:インデックスのテンソル。
これは、テンソルフローのドキュメントに記載されている例です。
1.インデックスと深度の指定のみ(on_valueのデフォルト値は1、off_valueは0)
indices = [0, 1, 2]
depth = 3
tf.one_hot(indices, depth) # output: [3 x 3]
# [[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]]
インデックス= [0、2、-1、1] 深さ= 3 tf.one_hot(インデックス、深さ、on_value = 5.0、off_value = 0.0、axis = -1) ##出力:[4 x 3] #[[5.0、0.0、0.0]、#one_hot(0) #[0.0、0.0、5.0]、#one_hot(2) #[0.0、0.0、0.0]、#one_hot(-1) #[0.0、5.0、0.0]]#one_hot(1)
GitHubでコードを確認することもできます