시뮬레이터가 화면 뒤에서 하고 있던 계산을 직접 짜 봅니다.
오늘 만들 함수는 다섯 개입니다.
| 함수 | 하는 일 | 넣는 것 | 나오는 것 |
| dist(a, b) | 두 점 사이 유클리드 거리 | 점 둘 | 거리 하나 |
| minmax_fit(rows) | 0~1 기준을 뽑는다 | 훈련 데이터만 | 최솟값·최댓값 |
| minmax_apply(v, lo, hi) | 그 기준으로 점 하나를 옮긴다 | 점 하나 + 기준 | 옮긴 좌표 |
| zscore_fit(rows) | z 기준을 뽑는다 | 훈련 데이터만 | 평균·표준편차 |
| zscore_apply(v, mu, sd) | 그 기준으로 점 하나를 옮긴다 | 점 하나 + 기준 | 옮긴 좌표 |
이 다섯 개는 오늘로 끝나지 않습니다.
8차시 k-최근접 이웃, 11차시 과적합 실험, 15차시 신경망이 이 함수들을
이름도 식도 고치지 않고 그대로 다시 싣습니다
(오늘의 빈칸 안내 주석만 뺍니다 — 그 차시에서는 이미 채워진 부품이니까요).
파이썬은 차시마다 새로 뜨므로 "앞 차시에서 만들었다"가 통하지 않기 때문입니다.
💡 dist를 2차원 전용으로 짜지 마세요
(a[0]-b[0])**2 + (a[1]-b[1])**2로 짜도 오늘은 잘 돌아갑니다.
그런데 15차시의 급식 데이터는 특성이 네 개입니다.
그때 이 함수를 다시 실으면 뒤의 두 특성이 조용히 무시됩니다 — 오류도 안 납니다.
len(a)만큼 도는 꼴로 짜 두면 특성이 몇 개든 그대로 돕니다.
빈칸 넷을 채우세요
아래 코드에 ?????가 다섯 자리 있습니다. 채울 것은 네 종류입니다.
- 빈칸 ①
dist() — 각 특성의 차를 제곱해 모두 더하고, 마지막에 ** 0.5로 뿌리를 씌웁니다.
- 빈칸 ②
minmax_apply() — 최솟값을 빼고, 최댓값과 최솟값의 차로 나눕니다.
- 빈칸 ③
zscore_apply() — 평균을 빼고, 표준편차로 나눕니다.
- 빈칸 ④
minmax_fit(?????)와 zscore_fit(?????) —
여기에 무엇을 넣을지가 오늘의 핵심입니다. 친구 셋만입니까, 친구 셋에 나까지입니까?
답을 고르는 것이 아니라 4절의 규칙을 지킬지 말지를 판단하는 자리입니다.
두 곳에 같은 답이 들어갑니다.
⚠️ 아래 코드 【3】에 답이 한 줄 보입니다
【3】은 일부러 규칙을 어겨 보는 대조군이라
minmax_fit(list(FRIENDS.values()) + [ME])가 그대로 적혀 있습니다.
빈칸 ④에 그것을 그대로 베껴 넣을 수도 있습니다. 그러면 이 차시에서 배울 것이 하나도 남지 않습니다.
【3】은 채운 뒤에 읽으세요.
ℹ️ 실행이 안 되면
SyntaxError: invalid syntax가 나오고 ?????가 가리켜진다면
아직 안 채운 빈칸이 남은 것입니다. 오류 메시지의 줄 번호를 보고 그 줄을 고치세요.
오류 메시지는 잔소리가 아니라 안내문입니다.
답을 맞게 채웠다면 출력이 【1】부터 【5】까지 나옵니다.
이어서 — 라온을 넣고 두 자를 갈라 보기
두 번째 상자는 5절의 실험을 그대로 돌립니다.
라온의 걸음 수를 6,000부터 4,000씩 올려 가며 두 방법의 답을 견주고,
갈리는 자리를 1걸음 단위까지 좁혀 찾습니다.
6,000부터 80,000까지 100걸음 간격으로 741자리를 훑은 뒤,
답이 바뀐 곳만 1걸음씩 다시 재는 방식입니다.
⚠️ 반복에는 반드시 끝이 있어야 합니다
코드의 탐색 반복은 range(6000, 80001, 100)처럼
끝이 정해진 범위를 돕니다. "답이 나올 때까지"라는 뜻으로 while True를 쓰면
브라우저 안의 파이썬은 화면과 같은 자리에서 돌기 때문에 탭이 그대로 멈춰 버립니다.
고쳐서 실험할 때도 범위의 끝은 남겨 두세요.
🔧 코드를 부숴 보기 — 넷 중 둘 이상
- 공부 시간에 배율을 곱해 보기.
FRIENDS와 ME의 두 번째 값에
60을 곱하면 순위가 바뀔까요? 435를 곱하면? 3600을 곱하면?
답을 예상하고 나서 돌려 보세요.
- 거리 식을 바꿔 보기.
dist를 제곱·뿌리 대신
sum(abs(a[i]-b[i]) for i in range(len(a)))로 바꿔 보세요(맨해튼 거리).
원래 값 순위도 정규화 순위도 하나도 안 바뀝니다. 왜 그럴까요?
- 친구를 하나 지워 보기.
FRIENDS에서 다온을 지우고 둘만 남겨 보세요.
뒤집힘이 여전히 일어납니까?
- 일부러 터뜨려 보기. 친구 셋의 공부 시간을 전부
3.0으로 바꾸면
어떤 오류가 납니까? 오류 메시지의 마지막 줄을 공책에 적어 두세요.