
基本情報技術者試験 令和5年度 公開問題 科目B、全6問のうちの問5。
出典:令和5年度 基本情報技術者試験 公開問題 科目B 問5(分数の式は 1 行に書き直し、分数の横線を ÷、根号を √( ) で表し、添字は a1 のように並べて書き、2 乗は ² で表した。プログラムは原本の画像を文字に書き起こし、字下げは 1 段を空白 2 つで表した。関数の宣言の 2 行目は、原本どおり引数の位置にそろえた。空欄は[ a ][ b ]で、解答群の表は 1 行の文に組み直した)
次の
コサイン類似度は,
(a1b1 + a2b2 + …
○実数型: calcCosineSimilarity(実数型の配列: vector1,実数型の配列: vector2)実数型: similarity, numerator, denominator, temp ← 0整数型: inumerator ← 0for (i を 1 から vector1の要素数 まで 1 ずつ増やす)numerator ← numerator + [ a ]endforfor (i を 1 から vector1の要素数 まで 1 ずつ増やす)temp ← temp + vector1[i]の2乗endfordenominator ← tempの正の平方根temp ← 0for (i を 1 から vector2の要素数 まで 1 ずつ増やす)temp ← temp + vector2[i]の2乗endfordenominator ← [ b ]similarity ← numerator ÷ denominatorreturn similarity
- アa (vector1[i] × vector2[i])の
正の 平方 根, b denominator × (tempの 正の平方根) - イa (vector1[i] × vector2[i])の
正の 平方 根, b denominator + (tempの 正の平方根) - ウa (vector1[i] × vector2[i])の
正の 平方 根, b tempの 正の平方根 - エa vector1[i] × vector2[i],
b denominator × (tempの 正の平方根) - オa vector1[i] × vector2[i],
b denominator + (tempの 正の平方根) - カa vector1[i] × vector2[i],
b tempの 正の平方根 - キa vector1[i]の
2乗, b denominator × (tempの 正の平方根) - クa vector1[i]の
2乗, b denominator + (tempの 正の平方根) - ケa vector1[i]の
2乗, b tempの 正の平方根
答えと解説を開く
正解はエです。
式の
ほかの選択肢が違う理由
- ア積の
平方根を 足しても、 分子の a1b1 + … + anbn に なりません。 上の 例では √(1 × 1) + √(0 × 1) = 1 で たまたま 同じですが、 {2, 0} と {2, 1} では √4 = 2 に なり、 本来の 4 と 合いません。 - イa は
積の 平方根で 分子が 合わず、 b は 2 つの 平方根を 足していて 分母も 合いません。 - ウa が
分子に 合わないうえに、 b で denominator を vector2 の 側の 平方根だけで 上書きし、 vector1 の 側を 捨てています。 - オa は
合っていますが、 分母を 2 つの 平方根の 和に しています。 式は 積です。 上の 例では 1 ÷ (1 + √2) で 約 0.414 に なります。 - カa は
合っていますが、 denominator を vector2 の 側の 平方根だけで 上書きしています。 vector1 の 側の 平方根が 分母から 消えます。 - キa に
vector1[i] の 2 乗を 足すので、 分子が vector1 だけの 2 乗の 和に なり、 vector2 を 使いません。 - ク分子が
vector1 だけの 2 乗の 和に なり、 分母も 2 つの 平方根の 和で、 どちらも 式と 合いません。 - ケ分子が
vector1 だけの 2 乗の 和に なり、 分母も vector2 の 側の 平方根だけに なります。
仕組み
コサイン類似度は、
分子を