🌊
[個人的用メモ]機械学習におけるone-hotとは?
one-hotとは?
one-hotとは、カテゴリをベクトルに変換する方法の一つ。
特に分類ラベルを数値として扱うために使います。
実例
例えば:クラスが3つあるとする
バナナ = 0
リンゴ = 1
メロン = 2
上記をone-hot 表現で表現すると以下になります。
バナナ = [1, 0, 0]
リンゴ = [0, 1, 0]
メロン = [0, 0, 1]
- 各ラベルは「ベクトルの中でそのクラスだけ 1、他は 0」という形になります。
- 情報の損失がなく、クラス間に誤った順序関係を持たない。(例えばバナナ = 0 リンゴ = 1 メロン = 2のままトレーニングに使用すると、0と1は0と2よりも近いため、バナナはメロンよりリンゴに近いと誤認される可能性がある。)
- モデルに「これはカテゴリだよ」と正確に伝えることも出来ます。
なんで必要?
モデルが出力する値(たとえば [0.2, 0.7, 0.1] などの確率)と、 正解ラベルを比べるときに使います。
この出力を正解ラベルと比べる必要がありますが、損失関数によってラベルの形式が異なるため、one-hotが必要になる場面と不要な場面があります。
いつ必要?
-
MSELoss を使うとき
→ 出力とターゲットを「同じ形のベクトル」で比較するため、labelも one-hot にする必要あり -
複数のラベルを同時に持つ(マルチラベル分類)とき
→ 例:猫にも犬にも写っている画像 → [1, 1, 0, 0] などの形式が必要
Discussion