カテゴリカルデータのOne-Hotエンコーディング変換

正解は「イ」です。 本問は、入力されたカテゴリカルな文字列配列 `colors` から重複を除いたユニークな要素一覧(マスタ)を作成し、各データに対応するOne-Hotベクトル(該当カテゴリのインデックスのみが1で他が0のベクトル)を生成する処理です。 1. 空欄 `  a  `(名前一覧の作成): 第1のループでは、入力配列 `colors` を先頭から順に走査し、まだマスタ配列 `colorVector` に含まれていない新しい色名を見つけた場合にその末尾へ追加しています。したがって、追加する対象は現在の要素である「`colors  i  の値`」となります。 2. 空欄 `  b  `(One-Hot表現への変換): 第2のループでは、各データ `colors  j  ` に対して、マスタ `colorVector` の各要素 `colorVector  k  ` と比較を行っています。 One-Hot表現の定義より、対象データ `colors  j  ` がマスタの第 $$k$$ 番目の色名と一致したときのみその桁を $$1$$ とし、不一致であれば $$0$$ とする必要があります。したがって、条件式は「`colors  j  が colorVector  k  と等しい`」となります。 以上より、  a  = `colors  i  の値`、  b  = `colors  j  が colorVector  k  と等しい` となる選択肢イが正解です。  b  の「colorsの要素のいずれかにcolorVector  k  の値が格納されている」という条件は、マスタに登録されている色であれば常に真になってしまい、すべての桁が1になってしまうため誤りです。  a  で未定義の値を追加すると色名の一覧が作成できないため誤りです。  a  に未定義の値を指定しているため誤りです。

次のプログラム中の  a  と  b  に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。

一つの要素だけが1 で他の要素が0 であるような整数型の配列による表現を,本問ではOne-Hot 表現という。関数oneHotEncoding は,図のように,色の名前が格納されている要素数1 以上の文字列型の配列を引数として受け取り,配列に含まれる色の名前(図の例では3 種類)に基づいて,各要素をOne-Hot 表現に変換し,整数型配列の配列に格納して返す。関数oneHotEncoding における変換の例を図に示す。

引数の例: {"Red", "Green", "Blue", "Red"} ↓ "Red"のOne-Hot 表現 : {1, 0, 0} "Green"のOne-Hot 表現: {0, 1, 0} "Blue"のOne-Hot 表現 : {0, 0, 1} ↓ 引数の例に対応する戻り値: {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0, 0}}

〔プログラム〕

○整数型配列の配列: oneHotEncoding(文字列型の配列: colors)
  整数型: i, j, k
  文字列型の配列: colorVector ← {}  // 要素数0の配列
  整数型の配列: tempVector
  整数型配列の配列: oneHotVector ← {}  // 要素数0の配列

  /* 名前一覧の作成 */
  for (i を 1 から colorsの要素数 まで 1 ずつ増やす)
    if (colorVector の要素のいずれにも colors[i]の値 が格納されていない)
      colorVectorの末尾 に [ a ] を追加する
    endif
  endfor

  /* One-Hot表現への変換 */
  for (j を 1 から colorsの要素数 まで 1 ずつ増やす)
    tempVector ← {}  // 要素数0の配列
    for (k を 1 から colorVectorの要素数 まで 1 ずつ増やす)
      if ( [ b ] )
        tempVectorの末尾 に 1 を追加する
      else
        tempVectorの末尾 に 0 を追加する
      endif
    endfor
    oneHotVectorの末尾 に tempVector を追加する
  endfor
  return oneHotVector
出典令和8年度 基本情報技術者試験 科目B 問5

a

b

ア

colors i の値

colors の要素のいずれかに colorVector k の値 が格納されている

イ

colors i の値

colors j  が colorVector k  と等しい

ウ

未定義の値

colors の要素のいずれかに colorVector k の値 が格納されている

エ

未定義の値

colors j  が colorVector k  と等しい