答案頁 · 12 道題

Python 最近鄰分類器練習答案

本頁彙整 Python 最近鄰分類器 的 12 道練習。先做練習頁,再回到這裡核對準確答案和原因。

快速答案

本答案頁包含 Python 最近鄰分類器 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。

答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。

01 · 選擇題

最近鄰分類器如何預測?

  1. 訓練神經網路很多輪
  2. 按字母排序
  3. 對標籤做雜湊
  4. 讓最近的訓練樣本投票正確答案

答案: 讓最近的訓練樣本投票

為什麼: k-NN 查看最近的帶標籤點,並組合它們的標籤。

02 · 選擇題

為什麼計算距離前要縮放特徵?

  1. 不再需要鄰居
  2. 縮放讓標籤按字母排列
  3. 保證完全準確
  4. 大單位會主導距離正確答案

答案: 大單位會主導距離

為什麼: 以千為單位的特徵會壓倒個位數特徵。

03 · 選擇題

鄰居標籤平票時應該怎麼辦?

  1. 忽略目標點
  2. 使用有文件的確定規則正確答案
  3. 每次隨機選標籤
  4. 把所有標籤都當成正確

答案: 使用有文件的確定規則

為什麼: 例如選擇距離最近的平票鄰居,能讓預測可復現。

04 · 選擇題

執行結果是什麼?

def distance(a, b):
    return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5

points = [((1, 1), "a"), ((4, 4), "b"), ((1, 2), "a")]
target = (1, 1.5)
ranked = sorted(points, key=lambda item: distance(target, item[0]))
print([label for _, label in ranked])
  1. ['b']
  2. ['b', 'a', 'a']
  3. ['a', 'b']
  4. ['a', 'a', 'b']正確答案

答案: ['a', 'a', 'b']

為什麼: 離目標最近的兩個點標籤為 a,較遠的點為 b。

05 · 填空題

補全歐氏距離的指數。

def distance(a, b):
    return sum((x - y) ** 2 for x, y in zip(a, b)) ** ____

print(distance((1, 1), (4, 5)))

答案: 0.5

為什麼: 把平方和取 0.5 次方就是開平方。

06 · 填空題

補全排序時使用的距離函式。

def distance(a, b):
    return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5

points = [((1, 1), "a"), ((4, 4), "b")]
target = (1, 1.5)
ranked = sorted(points, key=lambda item: ____(target, item[0]))
print(ranked[0][1])

答案: distance

為什麼: key 函式用目標點與每個訓練點比較。

07 · 填空題

補全回傳最常見標籤的 Counter 方法。

from collections import Counter

labels = ["a", "a", "b"]
winner = Counter(labels).____(1)[0][0]
print(winner)

答案: most_common

為什麼: most_common(1) 回傳最常見標籤及其計陣列成的列表。

08 · 填空題

補全距離迴圈中的配對函式。

a = (1, 2)
b = (4, 6)
print(sum((x - y) ** 2 for x, y in ____(a, b)))

答案: zip

為什麼: zip 生成兩個點中對應位置的坐標。

09 · 輸出預測

這段程式列印出什麼?

def distance(a, b):
    return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5

print(distance((1, 1), (4, 5)))

答案: 5.0

為什麼: 坐標差為 3 和 4,所以距離是 5.0。

10 · 輸出預測

程式碼的輸出結果是什麼?

def distance(a, b):
    return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5

points = [((2, 2), "a"), ((5, 5), "b")]
target = (4.5, 4.5)
ranked = sorted(points, key=lambda item: distance(target, item[0]))
print(ranked[0][1])

答案: b

為什麼: 點 (5, 5) 離目標更近,所以列印它的標籤 b。

11 · 輸出預測

螢幕上會顯示什麼?

from collections import Counter

labels = ["a", "a", "b"]
print(Counter(labels).most_common(1)[0][0])

答案: a

為什麼: 標籤 a 出現兩次,因此贏得多數投票。

12 · 輸出預測

這段程式碼會輸出什麼?

def distance(a, b):
    return sum((x - y) ** 2 for x, y in zip(a, b)) ** 0.5

print(round(distance((30, 30000), (31, 30000)), 1), round(distance((30, 30000), (30, 31000)), 1))

答案: 1.0 1000.0

為什麼: 原始單位下的距離是 1.0 和 1000.0,說明為什麼需要縮放。

先試一遍題目

打開 Python 最近鄰分類器 練習頁,用即時回饋回答同樣的 12 道題。

練習本課