사람이 적은 if-then 규칙부터 수천 개에서 수천억 개의 가중치를 가진 딥러닝까지, 분류 모델은 모두 입력 x를 받아 클래스 ŷ를 돌려주는 함수 f(x)입니다. 여덟 모델이 다른 점은 세 가지뿐입니다. 함수의 모양, 그 안의 숫자를 정하는 방법, 그리고 그 결과로 생기는 결정 경계의 모양입니다.
이 판은 한 가지 문제에서 출발합니다. 잡은 물고기의 길이와 높이를 재면, 어떤 종인지 맞힐 수 있을까? 먼저 여덟 모델이 이 문제를 푸는 모습을 2차원과 3차원으로 한눈에 본 뒤, 모델을 하나씩 뜯어봅니다. 어려운 단어는 점선 밑줄을 누르면 비유로 볼 수 있고, 맨 뒤에 용어 사전이 있습니다.
● 클래스 A · ○ 클래스 B · ▲ 클래스 C
분류 모델이 무엇인지 설명하기 전에, 풀 문제부터 정합니다.
어시장에서 물고기를 잡을 때마다 무게, 길이, 높이, 두께를 잽니다. 이 숫자만 보고 어떤 종인지 맞히고 싶습니다. 사람은 "통통하면 도미, 가늘고 작으면 빙어"처럼 감으로 구분하지만, 우리는 그 판단을 숫자로 된 규칙, 즉 함수로 만들려 합니다.
입력은 잰 숫자들이고 출력은 종 이름입니다. 이것이 분류 문제입니다. 쓰는 데이터는 7종 1,554마리의 측정값입니다(공개 데이터를 증강, 4번 참고). 이 페이지는 7종 가운데 두 쌍을 골라 씁니다. 도미 vs 빙어는 누가 봐도 다른 쉬운 짝, 농어 vs 로치는 크기와 모양이 비슷한 어려운 짝입니다.
| 물고기 | 무게 | 몸길이 | 높이 | 두께 | 종은? |
|---|---|---|---|---|---|
| ① | 290 g | 26.3 cm | 12.5 cm | 4.3 cm | ? |
| ② | 9.8 g | 12.0 cm | 2.2 cm | 1.2 cm | ? |
| ③ | 110 g | 21.0 cm | 5.7 cm | 3.6 cm | ? |
정답: ① 도미, ② 빙어, ③ 농어 (데이터의 원본 행에서 가져온 값을 반올림)
가로축은 몸길이, 세로축은 높이입니다. 배경색은 각 모델이 그 위치의 물고기를 무엇으로 판단하는지, 점은 처음 보는 시험 물고기입니다. 같은 데이터인데도 모델마다 선을 긋는 방식이 전혀 다릅니다. 그림을 누르면 그 모델의 설명으로 갑니다.
쉬운 짝으로 바꾸면 여덟 모델이 모두 100%입니다. 모델의 차이는 데이터가 어려울 때만 드러납니다. 어려운 짝에서 가장 높은 점수(굵은 테두리)도 0.8 안팎이라, 두 특성만으로는 한계가 있다는 것도 보입니다.
두께를 세 번째 축으로 더합니다. 그림을 끌거나 슬라이더(키보드 ←/→)로 돌려 보세요. 옅은 네모는 공간 곳곳에서 모델이 내리는 판단이고, 큰 점은 시험 물고기입니다. 아래 표에서 축 하나를 더했을 때 점수가 어떻게 바뀌는지 비교합니다.
어려운 짝에서 로지스틱 회귀와 딥러닝은 두께를 더하자 0.785·0.792에서 0.852로 올랐습니다. 반면 규칙 기반은 두께를 쓰지 않으니 그대로이고, 의사결정나무는 오히려 조금 낮아졌습니다. 축을 더하는 것, 즉 특성을 더하는 것이 모델을 바꾸는 것만큼 중요합니다.
이 자료는 물고기 7종 1,554마리의 측정값을 씁니다. 표의 막대는 몸길이의 범위(0~70 cm 눈금), 점은 평균입니다. 체형 비율은 높이 ÷ 몸길이, 꼬리 비율은 꼬리 길이 ÷ 몸길이(중앙값)입니다.
| 모양 | 종 | 마리 수 | 몸길이 분포 | 평균 무게 | 체형 비율 | 꼬리 비율 | 주요 특징 |
|---|---|---|---|---|---|---|---|
| 도미 Bream | 348 | 24~44 cm, 평균 33.2 | 623 g | 0.46 | 0.16 | 몸이 위아래로 높고 납작합니다(높이가 몸길이의 약 46%). 평균 623 g으로 무거운 편입니다. | |
| 빙어 Smelt | 138 | 9~16 cm, 평균 11.9 | 11 g | 0.18 | 0.10 | 가장 작고 가볍습니다(몸길이 9~16 cm, 평균 11 g). 가늘고 긴 체형입니다. | |
| 농어 Perch | 560 | 8~50 cm, 평균 27.6 | 364 g | 0.28 | 0.06 | 가장 많고(560마리) 크기 폭이 가장 넓습니다(8~50 cm). 꼬리가 짧습니다(꼬리 비율 약 0.06). | |
| 로치 Roach | 192 | 14~33 cm, 평균 22.6 | 163 g | 0.30 | 0.12 | 크기와 체형이 농어와 비슷하지만 꼬리가 약 두 배 깁니다(0.12). "어려운 짝"인 이유입니다. | |
| 강꼬치고기 Pike | 164 | 28~69 cm, 평균 45.3 | 703 g | 0.17 | 0.07 | 가장 길고(최대 69 cm) 가장 가늘며(체형 0.17), 평균 703 g으로 가장 무겁습니다. | |
| 파르키 Parkki | 104 | 13~28 cm, 평균 20.3 | 155 g | 0.44 | 0.12 | 작지만 도미처럼 몸이 높습니다(체형 0.44). 작은 도미처럼 보여 도미와 헷갈리기 쉽습니다. | |
| 흰송어 Whitefish | 48 | 24~41 cm, 평균 30.9 | 497 g | 0.32 | 0.10 | 가장 적습니다(48마리). 체형(0.32)이 농어와 로치 사이라 경계가 애매합니다. |
도미(Bream)는 국내 입문서의 관례를 따른 번역이며 실제로는 유럽 담수어 브림입니다. 증강된 물고기는 원본을 바탕으로 만들어졌기 때문에, 같은 원본에서 나온 물고기끼리는 서로 닮았습니다. 바로 아래 5번이 이 점이 왜 중요한지 보여 줍니다.
같은 데이터, 같은 모델(로지스틱 회귀)인데 학습 세트와 시험 세트를 나누는 방법만 다릅니다. 왼쪽은 종별로 정렬된 파일을 앞에서부터 70%, 뒤 30%로 그냥 자른 경우, 오른쪽은 종의 비율을 맞추고(층화) 같은 원본에서 나온 물고기를 한쪽에만 둔 경우입니다.
입력 x = (x₁, …, xₙ)은 특성(키, 나이, 픽셀 값 등)을 담은 벡터이고, 출력 ŷ은 K개의 클래스 중 하나입니다. K = 2이면 이진 분류, K ≥ 3이면 다중 분류입니다. 그림은 대부분 2차원·2개 클래스로 그렸고(KNN은 3개 클래스도 가능), 수식은 K개 클래스 일반형으로 썼습니다.
if-then 규칙인가, 거리 투표인가, 선형식 w·x + b인가, 그 합성인가.
사람이 직접 적는가, 데이터를 보고 무엇을 최소화하며 찾는가.
축에 평행한 계단, 들쭉날쭉한 곡선, 직선, 부드러운 곡선.
계보 A사람이 쓴 if-then
전문가가 알고 있는 판단 기준을 if-then 문장으로 옮겨 적은 모델입니다. 데이터로 학습하지 않으며, 규칙 목록 자체가 곧 함수입니다.
쉽게 말하면편의점 아르바이트 수칙과 같습니다. "신분증이 없고 앳돼 보이면 술을 팔지 않는다"처럼 점장이 적어 둔 문장을 그대로 따릅니다. 알바생은 판단 기준을 새로 배우지 않으므로, 수칙을 쓴 사람의 경험이 곧 모델의 실력입니다.
왼쪽 흐름도의 질문 두 개가 오른쪽 평면을 점선 두 개로 자릅니다. 두 조건을 모두 만족하는 오른쪽 위 사각형만 A가 되고, 나머지는 전부 B입니다.
핵심은 데이터를 보지 않고 경계를 정했다는 점입니다. 그래서 왼쪽 위의 초록 점처럼 규칙을 쓴 사람이 예상하지 못한 데이터는 그대로 틀립니다. 이 오류를 줄이려면 사람이 규칙을 하나 더 추가해야 합니다.
다음 모델인 의사결정나무는 구조가 이것과 똑같고, 임계값만 데이터가 정합니다.
새 점이 들어오면 사람이 적어 둔 조건을 순서대로 검사하고, 조건이 만든 영역에 따라 답을 냅니다.
간단한 규칙 하나로 충분합니다. 도미는 높이 11 cm 이상, 빙어는 3 cm 이하라서 "높이 > 7 cm이면 도미"라는 규칙이 시험 물고기를 모두 맞힙니다. 사람이 산점도를 한 번 보고 정할 수 있는 수준입니다.
두 종의 길이와 높이가 크게 겹칩니다. 산점도를 보고 "길이 < 25 cm이고 높이 > 6 cm이면 로치"라는 규칙을 세웠지만, 시험 정확도는 0.691로 "모두 농어"라고 답하는 기준선(0.738)보다도 낮습니다. 축에 평행한 직사각형 경계로는 겹친 부분을 가를 수 없습니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. 규칙 기반 분류기가 학습 데이터에서 새 패턴을 발견하면 어떻게 되나요?
Q2. 규칙이 "x₁ > 0.5 그리고 x₂ > 0.4 → A, 그 외 B"일 때 x = (0.6, 0.2)의 답은?
계보 A거리로 투표
새 데이터가 들어오면 저장해 둔 데이터 중 가장 가까운 k개를 찾아 다수결로 클래스를 정합니다. "비슷한 것은 가까이 있다"는 가정 하나로 동작합니다.
쉽게 말하면처음 이사 온 동네에서 어떤 식당이 괜찮은지 모를 때, 우리 집에서 가장 가까운 이웃 다섯 명에게 물어보고 다수결로 정하는 것과 같습니다. 가까이 사는 사람일수록 취향이 비슷하다고 믿는 셈입니다.
보라색 마름모가 새 점입니다. 모든 점과의 거리를 잰 뒤 가장 가까운 5개를 고르면 A가 3표, B가 2표이므로 A로 분류합니다.
KNN에는 학습 단계에서 계산하는 숫자가 하나도 없습니다. 데이터를 저장만 해 두었다가 질문이 올 때 비로소 계산합니다(게으른 학습). 즉 "함수의 식"이 따로 없고, 저장된 데이터 전체가 함수 역할을 합니다.
k가 작으면 경계가 한두 점에 휘둘려 들쭉날쭉해지고(과적합), k가 크면 경계가 뭉개집니다(과소적합).
저장된 모든 점과 거리를 잰 뒤 원을 넓혀 가며 가장 가까운 k개를 찾고 투표합니다. k와 클래스 수를 바꿔 결과가 어떻게 달라지는지 보세요.
가장 가까운 이웃이 모두 같은 종이라 k를 얼마로 하든 100%입니다. 무리가 멀리 떨어져 있으면 KNN이 가장 쉽게 이깁니다.
겹친 구간에서는 이웃 중에 농어와 로치가 섞여 경계가 섬처럼 들쭉날쭉합니다. k = 1이면 학습 1.000, 시험 0.732로 전형적인 과적합이고, k = 5는 시험 0.745, k = 15는 0.765로 경계가 매끄러워지며 조금 나아집니다. 그래도 기준선(0.738)과 큰 차이는 없습니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. k = 1이면 경계는 어떻게 되기 쉬운가요?
Q2. 키(cm)와 몸무게(kg)를 그대로 넣고 KNN을 쓰면 생기는 문제는?
계보 A데이터가 정한 if-then
"x₁이 0.2 이하인가?" 같은 예/아니오 질문을 반복해 데이터를 쪼개는 모델입니다. 규칙 기반과 구조가 같지만, 어떤 특성을 어떤 값에서 자를지 데이터가 정합니다.
쉽게 말하면스무고개나 병원 문진표와 같습니다. "열이 38도 이상인가요?", "기침을 하나요?"처럼 예/아니오 질문을 하나씩 던지며 후보를 좁혀 갑니다. 어떤 질문을 먼저 할지는 데이터를 가장 잘 가르는 순서로 컴퓨터가 정합니다.
스무고개와 같습니다. 첫 질문 x₁ ≤ 0.45가 평면을 세로로 자르고, 오른쪽 조각을 두 번째 질문 x₂ ≤ 0.50이 가로로 한 번 더 자릅니다. 잎 노드 R₁, R₂, R₃가 오른쪽 평면의 직사각형과 하나씩 대응합니다.
규칙 기반과 비교하면 질문의 형식은 같고, 0.45와 0.50이라는 숫자를 데이터가 골랐다는 점만 다릅니다. 가능한 모든 자르는 위치를 시험해 보고, 자른 뒤 양쪽이 가장 한 클래스로 모이는 곳을 택합니다.
질문이 항상 "한 특성 ≤ 값" 형태라서 경계는 반드시 축에 평행한 계단이 됩니다. 대각선 경계는 계단을 아주 잘게 쌓아야 흉내 낼 수 있습니다.
데이터로 실제 학습한 나무를 새 점이 따라 내려갑니다. 질문 하나마다 남은 영역 밖의 점이 흐려지고, 잎 노드에 도착하면 그 칸의 답이 나옵니다. 깊이를 바꾸면 나무를 다시 학습합니다.
질문 하나로 두 종을 완벽히 가릅니다(세로 경계선). 사람은 높이로 갈랐지만 나무는 몸길이를 골랐습니다. 이 짝에서는 길이와 높이 모두 완벽하게 가르기 때문에, 먼저 검사한 특성이 뽑혔을 뿐입니다.
깊이를 키울수록 학습 정확도는 0.746(깊이 1) → 0.884(깊이 5)로 오르지만, 시험 정확도는 0.738(깊이 1)에서 0.671~0.725 사이로 오히려 낮아집니다(기본값 깊이 3은 0.691). 계단 경계가 학습 물고기의 겹친 구간을 잘게 외우기 때문입니다. 깊이 1은 사실상 "모두 농어"와 같습니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. 의사결정나무의 결정 경계가 항상 축에 평행한 이유는?
Q2. 칸에 A 6개, B 4개가 있을 때 지니 불순도는?
계보 B의 출발점z = w·x + b → step
입력마다 중요도(가중치)를 곱해 더한 점수가 기준을 넘으면 "예"라고 답하는 모델입니다. 뇌의 뉴런 하나를 흉내 낸 것으로, 모든 인공신경망의 가장 작은 부품입니다.
쉽게 말하면서류 전형 점수표와 같습니다. "학점 × 3 + 자격증 × 2 − 지각 횟수 × 1"을 계산해 기준을 넘으면 합격입니다. 항목별 배점이 가중치 w이고, 합격 기준선을 옮기는 값이 b입니다. 퍼셉트론은 이 배점을 사람이 아니라 합격·불합격 사례를 보며 스스로 고칩니다.
왼쪽 입력 x₁, x₂에 각각 가중치 w₁, w₂를 곱하고, 항상 1인 입력에 곱해지는 b(편향)를 더해 점수 z를 만듭니다. 그 점수를 계단 함수에 넣어 0보다 크면 1, 아니면 0을 냅니다.
평면에서 보면 z = 0 인 곳, 즉 w₁x₁ + w₂x₂ + b = 0 이 직선입니다. 이 직선의 한쪽은 1, 반대쪽은 0이 됩니다. w는 직선의 기울기(방향)를, b는 직선의 위치를 정합니다.
학습은 틀린 예시를 만날 때마다 w를 그 예시 쪽으로 조금 미는 것이 전부입니다. 분리 가능한 직선을 아무거나 하나 찾으면 멈추므로, 어떤 직선이 나올지는 데이터 순서에 따라 달라집니다.
틀린 점을 하나 골라 z를 계산하고, 학습 규칙대로 w를 고치면 직선이 돕니다. 틀린 점(✕)이 없어질 때까지 반복합니다. 이 그림은 좌표 범위가 작아 η = 0.3을 썼습니다(아래 ⑦ 실습은 η = 0.1).
직선 하나로 완전히 나뉘는 짝이라 가중치를 3번만 고치고 멈춥니다. 1편 04에서 본 "선형 분리 가능하면 반드시 수렴"이 그대로 나타납니다.
직선으로 완전히 나눌 수 없어서 퍼셉트론은 30 에포크 동안 276번 직선을 고치며 계속 흔들리다 멈춥니다. 멈춘 순간의 직선이 운 나쁘게 대부분을 로치로 판정해 시험 정확도가 0.262까지 떨어졌습니다. "선형 분리가 안 되면 수렴하지 않는다"는 한계가 실제로 나타난 것이고, 이를 확률로 해결한 것이 다음 칸의 로지스틱 회귀입니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. 퍼셉트론이 예측을 맞혔을 때 가중치는?
Q2. 퍼셉트론 하나로 절대 풀 수 없는 문제는?
학교에서 배운 함수와 나란히 놓으면 머신러닝이 무엇을 하는지 정확히 보입니다. 아래 실습에서 숫자를 직접 바꿔 보세요.
수학 문제는 "식을 줄 테니 답을 구하라"이고, 머신러닝은 "답을 잔뜩 줄 테니 식의 계수를 구하라"입니다. 일단 계수를 다 찾고 나면 퍼셉트론도 f(x) = 2x + 1처럼 평범한 함수가 됩니다.
또 하나의 차이: y = 2x + 1은 입력이 하나지만, 퍼셉트론은 입력이 n개인 다변수 일차식 w₁x₁ + … + wₙxₙ + b에 문턱(step)을 씌운 것입니다. 안에 특별한 수학은 없고 곱셈, 덧셈, 크기 비교 세 가지 연산만 있습니다.
x₁ = 주당 공부 시간(시간), x₂ = 결석 횟수(회)로 합격(1)/불합격(0)을 예측하는 퍼셉트론입니다. 입력과 가중치를 움직이면 세 단계 계산과 오른쪽 평면의 직선이 함께 바뀝니다.
위의 현재 입력이 실제로는 어떤 결과였는지 정답을 골라 "학습 1회"를 누르세요. 예측이 틀렸다면 학습 규칙 w ← w + η(y − ŷ)x (η = 0.1)로 가중치가 고쳐지고, 위의 슬라이더와 직선이 실제로 움직입니다.
계보 Bstep → σ, 확률 출력
퍼셉트론과 같은 점수 z = w·x + b를 계산하되, 계단 대신 부드러운 S자 곡선(시그모이드)에 넣어 0과 1 사이의 확률로 바꾸는 모델입니다. 이름에 "회귀"가 있지만 분류 모델입니다.
쉽게 말하면일기예보가 "내일 비가 온다/안 온다" 대신 "비 올 확률 70%"라고 말하는 것과 같습니다. 경계에서 먼 점은 90%대로, 경계 근처는 50%대로 말해 판단의 확신 정도까지 알려 줍니다.
왼쪽 구조는 퍼셉트론과 똑같고 마지막 상자만 step에서 σ로 바뀌었습니다. 오른쪽 곡선을 보면 z가 클수록 확률이 1에, 작을수록 0에 부드럽게 다가갑니다.
확률이 0.5가 되는 곳은 z = 0 이므로, 결정 경계는 퍼셉트론과 마찬가지로 직선입니다. 달라진 것은 두 가지입니다. 경계 근처의 점에는 0.55처럼 애매한 확률을, 먼 점에는 0.99처럼 확신에 찬 확률을 준다는 것, 그리고 곡선이 매끄러워 미분이 가능하므로 경사하강법으로 w를 체계적으로 찾을 수 있다는 것입니다.
클래스가 3개 이상이면 클래스마다 점수 zₖ를 만들고 소프트맥스로 확률을 나눠 가집니다. 딥러닝의 출력층이 바로 이 구조입니다.
앞부분은 경사하강법으로 w가 자리를 잡으며 확률 지도(색의 진하기)가 만들어지는 과정이고, 뒷부분은 새 점이 경계를 가로지를 때 확률이 S자 곡선을 따라 변하는 모습입니다.
경계에서 먼 물고기일수록 색이 진합니다(확률이 0이나 1에 가까움). 두 무리 사이 빈 공간은 확률이 급하게 바뀝니다.
경계는 여전히 직선이지만, 겹친 구간이 연한 색(확률 0.5 근처)으로 칠해져 "확신이 없는 곳"이 보입니다. 시험 정확도 0.785로, 같은 직선 경계인 퍼셉트론(0.262)과 선형 SVM(0.745)보다 좋습니다. 겹친 데이터에서는 확률로 부드럽게 학습하는 쪽이 유리합니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. z = 0일 때 σ(z)는?
Q2. 로지스틱 회귀의 결정 경계 모양은?
계보 B손실 → 마진 최대화
두 클래스를 나누는 직선 중에서 양쪽 데이터와 가장 멀리 떨어진 직선, 즉 "가장 넓은 도로"의 가운데 선을 찾는 모델입니다.
쉽게 말하면두 마을 사이에 도로를 내는 일과 같습니다. 양쪽 집을 하나도 건드리지 않으면서 가장 넓은 도로를 내고, 도로 한가운데 중앙선을 경계로 삼습니다. 도로가 넓을수록 새로 지은 집이 조금 삐져나와도 헷갈리지 않습니다.
실선이 결정 경계, 두 점선이 도로의 가장자리입니다. 동그라미 친 세 점이 도로 가장자리에 딱 닿아 있는 서포트 벡터이고, 경계는 오직 이 점들만으로 정해집니다. 멀리 있는 점은 지우거나 옮겨도 경계가 변하지 않습니다.
퍼셉트론·로지스틱과 경계의 식(w·x + b = 0)은 같습니다. 차이는 어떤 직선을 고르는가입니다. 퍼셉트론은 처음 찾은 직선, 로지스틱은 확률 오차가 가장 작은 직선, SVM은 양쪽과의 여유가 가장 큰 직선을 고릅니다. 여유가 클수록 새 데이터가 조금 흔들려도 틀릴 가능성이 줄어듭니다.
SVM은 레이블을 0/1 대신 −1/+1로 써서 yᵢ(w·xᵢ + b) ≥ 1 한 줄로 "올바른 쪽에 여유 있게 있음"을 표현합니다.
직선의 방향을 돌려 가며 방향마다 낼 수 있는 가장 넓은 도로를 재고(오른쪽 곡선), 폭이 최대인 방향을 고릅니다. 이 탐색은 원리를 보여 주기 위한 것이며, 실제 SVM은 볼록 최적화 문제를 풀어 한 번에 답을 찾습니다.
데이터가 조금 겹치면 모든 점을 도로 밖에 둘 수 없습니다. 이때 C가 "넓은 도로"와 "침범 벌점" 사이의 균형을 정합니다. 슬라이더를 움직이면 SVM을 다시 풀어 결과를 그립니다.
두 무리 사이에 넓은 도로를 냅니다. 도로 가장자리에 닿은 서포트 벡터는 3개 행뿐이고, 나머지 물고기는 경계에 영향을 주지 않습니다.
두 종이 겹쳐 모든 점을 도로 밖에 둘 수 없으므로 소프트 마진(C = 1)으로 풀었습니다. 도로 안이나 반대편에 있는 행이 많아 서포트 벡터가 311개로 학습 행의 절반이 넘습니다. 시험 정확도는 0.745입니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. SVM의 경계를 결정하는 점은?
Q2. C를 크게 하면?
계보 Bx → φ(x), 공간을 들어 올림
직선으로 나뉘지 않는 데이터를 더 높은 차원으로 들어 올린 뒤, 그곳에서 선형 SVM을 적용하는 모델입니다. SVM이 방법론의 이름이라면 SVC는 그중 분류용 구현(예: scikit-learn의 SVC)을 가리킵니다.
쉽게 말하면책상 위에 구슬이 섞여 있는데 파란 구슬은 가운데, 주황 구슬은 가장자리에 둥글게 놓여 있습니다. 자 하나로는 둘을 가를 수 없습니다. 그런데 가장자리 구슬일수록 높이 튀어 오르게 하면, 그 사이에 쟁반 하나를 수평으로 끼워 넣어 위아래로 가를 수 있습니다.
왼쪽은 A가 가운데, B가 바깥을 둘러싼 데이터라 어떤 직선도 나눌 수 없습니다. 여기에 "원점에서 떨어진 거리의 제곱" z = x₁² + x₂²라는 새 축을 붙이면(φ), 가운데 점은 아래로, 바깥 점은 위로 벌어져 오른쪽처럼 가로선 하나로 나뉩니다. 그 가로선을 원래 평면으로 되돌린 것이 왼쪽의 원형 점선입니다.
커널 트릭: 실제로는 φ(x)를 계산하지 않고, 두 점의 유사도 K(xᵢ, x)만 계산해도 고차원에서의 내적과 같은 결과를 얻습니다. RBF 커널을 쓰면 서포트 벡터마다 가우시안 "언덕"을 세우고, 그 언덕들의 합의 부호로 분류하는 것과 같습니다.
선형 SVM과의 관계: 식에서 x를 φ(x)로 바꿨을 뿐, 마진을 최대화한다는 원리는 그대로입니다.
"들어 올리기"는 x₁² + x₂²라는 명시적인 φ로 차원을 올리는 예시(다항 커널 계열)이고, "RBF 언덕"은 실제 RBF 커널이 서포트 벡터마다 언덕과 구덩이를 더해 경계를 만드는 모습입니다.
RBF 커널로도 100%입니다. 곡선이 필요 없는 짝이라 서포트 벡터 7개로 충분하고, 직선 모델과 차이가 없습니다.
겹친 구간을 곡선으로 감싸며 시험 정확도 0.765를 얻었습니다. 선형 SVM(0.745)보다 조금 낫지만, 길이와 높이 두 특성만으로는 한계가 뚜렷합니다. 서포트 벡터도 255개로 많습니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. 커널 트릭의 핵심은?
Q2. RBF 커널에서 γ를 아주 크게 하면?
계보 B의 끝φ를 사람이 아니라 학습으로
퍼셉트론(뉴런)을 옆으로 여러 개 놓아 층을 만들고, 그 층을 여러 겹 쌓은 모델입니다. 앞쪽 층이 데이터를 나누기 쉬운 형태로 바꾸고, 마지막 층이 소프트맥스 회귀로 클래스를 고릅니다.
쉽게 말하면공장 조립 라인과 같습니다. 첫 공정은 원자재를 다듬고, 다음 공정은 다듬은 부품을 조립하고, 마지막 검수원이 합격·불합격을 판정합니다. 불량이 나오면 검수원부터 첫 공정까지 거꾸로 거슬러 올라가며 각 공정의 방법(가중치)을 조금씩 고칩니다. 이 거꾸로 고치기가 역전파입니다.
동그라미 하나하나가 04의 퍼셉트론이고, 선 하나하나가 가중치 w 하나입니다. 이 그림에만 가중치가 2×4 + 4×4 + 4×3 = 36개, 편향까지 47개의 빈칸이 있습니다.
초록 점선 상자(출력층)만 떼어 보면 05의 소프트맥스 회귀와 똑같습니다. 다른 점은 입력이 원래 데이터 x가 아니라 은닉층이 만든 새 특성 h(x)라는 것입니다. 07의 커널 SVC가 사람이 고른 φ(x)로 공간을 휘었다면, 딥러닝은 보라색 점선 상자(은닉층)의 가중치를 학습해 "직선으로 나누기 좋은 공간"을 스스로 찾습니다.
층이 깊어질수록 더 추상적인 특성이 만들어집니다. 이미지라면 앞층은 선과 모서리, 뒤층은 눈·바퀴 같은 부분, 마지막은 물체 전체를 알아봅니다.
왼쪽은 달 모양 두 무리를 학습하며 경계가 휘어지는 과정이고, 오른쪽은 그동안 가중치(선의 굵기와 색)가 바뀌는 신경망입니다. 학습이 끝나면 새 점이 층을 따라 계산되는 순전파를 보여 줍니다.
층의 수, 뉴런 수, 활성화 함수는 문제에 맞춰 고르는 설계 선택입니다. 구조가 달라도 계산 원리(곱하고, 더하고, 꺾기)와 학습 원리(역전파)는 같습니다.
| 그림 | 구조 | 은닉층 활성화 | 출력 | 목적 |
|---|---|---|---|---|
| ③ 정적 다이어그램 | 2 → 4 → 4 → 3 | g (ReLU 등) | 소프트맥스, 3개 클래스 | 전체 모양 보기 |
| ③ 움직이는 다이어그램 | 2 → 6 → 6 → 1 | tanh | σ, 2개 클래스 (소프트맥스와 같음) | 곡선 경계가 학습되는 과정 |
| ⑦·⑧ 연산 실습 | 2 → 3 → 3 | ReLU | 소프트맥스, 3개 클래스 | 숫자 하나하나 따라가기 |
100%입니다. 곡선을 만드는 능력이 필요 없는 문제입니다.
은닉 뉴런 8개가 곡선 경계를 만들어 시험 정확도 0.792로 이 짝에서 가장 좋습니다. 하지만 기준선(0.738)과의 차이는 크지 않습니다. 이 짝은 모델을 바꾸기보다 특성을 바꾸는 편이 훨씬 효과적입니다. 예를 들어 "꼬리 길이 ÷ 몸길이"(꼬리 비율)를 특성으로 더하면, 농어는 0.026~0.081, 로치는 0.093~0.155로 겹치지 않아 로지스틱 회귀만으로도 거의 완벽하게 갈립니다.
배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).
Q1. 은닉층에서 활성화 함수 g를 모두 빼면?
Q2. 딥러닝의 출력층(소프트맥스)은 어떤 모델과 수식이 같나요?
입력 2개 → 은닉 뉴런 3개(ReLU) → 클래스 3개(소프트맥스)인 작은 신경망으로, 순전파(예측)와 역전파(학습)를 숫자 하나하나까지 따라가 봅니다.
딥러닝은 새로운 수학이 아닙니다. "곱하고, 더하고, 꺾는다"는 계산을 층 단위로 엄청나게 많이 반복한 합성함수입니다.
한 층 = 퍼셉트론 여러 개를 한꺼번에 = 행렬 곱. 뉴런 3개가 각자 w·x + b를 계산하는 것을 행렬로 모으면 Wx + b 한 번의 계산이 됩니다. GPU가 딥러닝에 필요한 이유가 이 행렬 곱을 동시에 수천 개씩 처리하기 때문입니다.
왜 꺾어야(g) 하나? g가 없으면 W₃(W₂(W₁x)) = (W₃W₂W₁)x 가 되어, 층을 100개 쌓아도 결국 일차식 하나, 즉 직선 경계 하나로 합쳐집니다. ReLU(z) = max(0, z)처럼 0에서 한 번 꺾어 주는 것만으로 층마다 경계를 구부릴 수 있게 됩니다.
학습은 네 단계의 반복입니다. ① 순전파로 확률 p를 구하고, ② 정답과 비교해 손실 L을 재고, ③ 각 가중치가 손실에 얼마나 책임이 있는지(기울기) 출력층부터 거꾸로 계산하고(역전파, 연쇄법칙), ④ 기울기 반대 방향으로 가중치를 조금 옮깁니다. 정답을 고르고 "학습 1회"를 눌러 보세요.
δ가 음수인 정답 클래스는 가중치가 커져 점수가 올라가고, δ가 양수인 오답 클래스는 점수가 내려갑니다. 은닉층 가중치 W₁도 같은 방식으로 δ를 한 층 더 거꾸로 전달해 함께 고칩니다(이 실습에서도 실제로 계산해 반영합니다).
칸을 누르면 해당 모델로 이동합니다. 두 계보는 출발점이 다르지만 모두 입력 x를 클래스 ŷ로 보내는 함수입니다.
| 모델 | 함수의 모양 | 파라미터를 정하는 방법 | 결정 경계 | 확률 출력 | 해석 용이성 |
|---|---|---|---|---|---|
| 규칙 기반 | if Ruleⱼ(x) then cⱼ | 사람이 직접 작성 | 축에 평행한 직선 | 없음 | 매우 쉬움 |
| KNN | argmax 투표 in Nₖ(x) | 없음 (데이터 저장) | 들쭉날쭉한 곡선 | 투표 비율 | 쉬움 |
| 의사결정나무 | Σ cₘ 𝟙(x ∈ Rₘ) | 지니 불순도 최소 분할 | 축에 평행한 계단 | 잎의 비율 | 쉬움 |
| 퍼셉트론 | step(w·x + b) | 틀릴 때마다 w 수정 | 직선 | 없음 | 보통 |
| 로지스틱 회귀 | softmax(Wx + b) | 교차엔트로피 최소 (경사하강) | 직선 | 있음 | 보통 (계수 해석) |
| 선형 SVM | sign(w·x + b) | 마진 최대 + 힌지손실 | 직선 (마진 최대) | 없음 (보정 필요) | 보통 |
| 커널 SVC | sign(Σ αᵢyᵢK(xᵢ,x) + b) | 커널 공간에서 마진 최대 | 곡선 | 없음 (보정 필요) | 어려움 |
| 딥러닝 (MLP) | softmax(W₃ g(W₂ g(W₁x))) | 역전파 + 경사하강 | 자유로운 곡선 | 있음 | 매우 어려움 |
읽을 때 주의할 점. 다이어그램의 점 배치와 실습의 가중치·입력값은 원리를 보여 주기 위한 예시 값입니다. SVM 애니메이션의 방향 탐색은 이해를 돕기 위한 연출이며 실제 학습 방법이 아닙니다. 실제 데이터에서의 성능 순위는 데이터의 크기와 모양에 따라 달라집니다.
개념을 실제 도구로 옮기는 칸입니다. 상황별로 먼저 시도할 모델을 고르고, 같은 데이터로 여덟 모델을 직접 비교해 봅니다.
| 상황 | 먼저 시도할 모델 | 이유 |
|---|---|---|
| 판단 근거를 문장으로 설명해야 한다 (규제, 감사) | 규칙 기반 · 의사결정나무 | if-then으로 그대로 읽힙니다. 나무는 깊이를 제한해야 읽을 만합니다. |
| 확률이 필요하고, 특성의 영향 방향을 알고 싶다 | 로지스틱 회귀 | 확률 출력과 계수 해석이 가능하고, 빠르고 안정적인 기준선입니다. |
| 데이터가 수천 개 이하이고 경계가 복잡하다 | 커널 SVC · KNN | 적은 데이터에서도 곡선 경계를 잘 잡습니다. 둘 다 스케일링이 필수입니다. |
| 특성이 매우 많다 (텍스트, 유전자) | 선형 SVM · 로지스틱 회귀 | 고차원에서는 직선 경계로도 충분한 경우가 많고, 학습이 빠릅니다. |
| 표 형태 데이터에서 성능이 최우선이다 | 나무를 여러 개 묶은 모델 (랜덤 포레스트, 그래디언트 부스팅) | 의사결정나무를 기본 블록으로 쓰며, 실무 표 데이터에서 가장 흔히 쓰입니다. |
| 이미지, 음성, 긴 텍스트처럼 원시 데이터다 | 딥러닝 | 특성을 스스로 학습합니다. 데이터와 연산 자원이 많이 필요합니다. |
이번에는 두 종이 아니라 7종 전체를, 특성 6개(무게, 길이 3종, 높이, 두께)로 가릅니다. 같은 원본에서 나온 물고기가 학습과 시험에 나뉘지 않도록 원본 단위 5겹 교차검증(StratifiedGroupKFold)을 씁니다. CSV 파일을 같은 폴더에 두고 실행하면 됩니다.
import pandas as pd, numpy as np, warnings; warnings.filterwarnings("ignore")
# 데이터 불러오기와 정리: 무게 0인 행과 완전히 같은 행을 뺀다
df = pd.read_csv("fish_market_x10.csv")
df = df[df["weight_g"] > 0].drop_duplicates().reset_index(drop=True)
FEATS = ["weight_g", "length1_cm", "length2_cm", "length3_cm", "height_cm", "width_cm"]
X, y, groups = df[FEATS], df["species"], df["seed_id"] # seed_id: 같은 물고기에서 만든 복제본 묶음
# 물고기 7종 분류: 여러 모델 비교 (물고기 단위 5겹 교차검증)
from sklearn.model_selection import StratifiedGroupKFold, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import Perceptron, LogisticRegression
from sklearn.svm import LinearSVC, SVC
from sklearn.neural_network import MLPClassifier
cv = StratifiedGroupKFold(5, shuffle=True, random_state=0) # 같은 물고기(seed_id)는 한쪽에만
scaled = lambda m: make_pipeline(StandardScaler(), m)
models = {
"KNN (k=5)": scaled(KNeighborsClassifier(n_neighbors=5)),
"의사결정나무 (깊이 5)": DecisionTreeClassifier(max_depth=5, random_state=0),
"퍼셉트론": scaled(Perceptron(random_state=0)),
"로지스틱 회귀": scaled(LogisticRegression(max_iter=5000)),
"선형 SVM": scaled(LinearSVC(C=1.0, max_iter=20000)),
"커널 SVC (RBF)": scaled(SVC(kernel="rbf", C=1.0)),
"MLP (32-32, ReLU)": scaled(MLPClassifier(hidden_layer_sizes=(32, 32), max_iter=3000, random_state=0)),
}
print(f"기준선 (가장 많은 농어만 답하기): {(y == 'Perch').mean():.3f}")
for name, m in models.items():
s = cross_val_score(m, X, y, cv=cv, groups=groups)
print(f"{name:<18} {s.mean():.3f} ± {s.std():.3f}")| 모델 | 5겹 교차검증 정확도 |
|---|---|
| 기준선 (가장 많은 농어만 답하기) | 0.360 |
| KNN (k=5) | 0.900 ± 0.033 |
| 의사결정나무 (깊이 5) | 0.723 ± 0.040 |
| 퍼셉트론 | 0.921 ± 0.031 |
| 로지스틱 회귀 | 0.899 ± 0.036 |
| 선형 SVM | 0.942 ± 0.024 |
| 커널 SVC (RBF) | 0.850 ± 0.032 |
| MLP (32-32, ReLU) | 0.981 ± 0.013 |
읽는 법. 특성이 6개로 늘자 직선 경계 모델도 7종을 잘 가릅니다(선형 SVM 0.942, 퍼셉트론 0.921). 가장 높은 것은 MLP(0.981)이고, 깊이 5짜리 의사결정나무는 0.723으로 가장 낮습니다. 특성 여섯 개가 서로 강하게 얽혀 있어(길이 세 개는 거의 같은 값) 한 번에 한 특성만 보는 나무에 불리하기 때문입니다. 규칙 기반은 7종용 규칙을 따로 만들지 않아 표에서 뺐습니다. 순위는 이 데이터와 이 설정에 대한 것입니다.
내려받은 코드를 내 데이터로 바꾸거나 다른 모델로 바꾸고 싶을 때, 아래 프롬프트를 복사해 AI 도우미에게 붙여 넣으세요. [ ] 칸을 채우고, 해당하지 않는 항목은 지우면 됩니다.
# 역할 너는 파이썬(pandas, scikit-learn)으로 분류 모델을 가르치는 친절한 데이터 과학 튜터이자 코드 리뷰어다. # 배경 나는 "물고기 분류" 해설 페이지(또는 실험실)에서 코드를 내려받았다. 이 코드를 [데이터 변환 / 모델 변환 / 둘 다] 하고 싶다. - 지금 데이터: [파일 이름], 행 수 [ ] - 기본 열: species(정답), weight_g, length1_cm, length2_cm, length3_cm, height_cm, width_cm, source, seed_id - 내 데이터라면 열 이름과 뜻을 여기에 적는다: [ ] - 실행 환경: [코랩 / 주피터 / 로컬 파이썬 3.x], scikit-learn 버전 [ ](모르면 "모름") - 내 수준: [입문 / 중급 / 실무] # 하고 싶은 일 (해당하는 번호만 남기고 [ ]를 채운다) ## A. 데이터 변환 A1. 다른 데이터로 바꾸기: 파일 [경로], 정답 열 [ ], 특성 열 [ ] A2. 정리: 결측치 [삭제 / 평균 대체 / 중앙값 대체], 이상치 [예: 무게 0인 행 삭제], 완전히 같은 행 [삭제 / 유지] A3. 새 특성 만들기: [예: 체형 비율 = height_cm / length2_cm, 꼬리 비율 = (length3_cm - length2_cm) / length2_cm] A4. 변환: 범주형 [원-핫 / 순서형], 스케일링 [표준화 / 최소-최대 / 없음], 로그 변환할 열 [ ] A5. 데이터 증강: 원본마다 복제본 [n]개, 크기 배율 ~ 정규분포(평균 1, 표준편차 [0.12]), 무게는 배율의 세제곱에 비례, 모양 비율에는 표준편차 [3%]의 잡음. 원본 ID 열(seed_id)을 반드시 만든다. A6. 클래스 고르기·합치기: [예: 농어와 로치 두 종만 / 흰송어와 로치를 한 클래스로] ## B. 모델 변환 B1. 모델 바꾸기: 지금 [ ] → [KNN / 의사결정나무 / 로지스틱 회귀 / 선형 SVM / 커널 SVC / MLP / 랜덤 포레스트 / 그래디언트 부스팅] B2. 하이퍼파라미터: 직접 지정 [ ] 또는 탐색 [GridSearchCV / RandomizedSearchCV], 탐색 범위 [ ] B3. 학습 과정: 학습률 [ ], 에포크 [ ], 배치 크기 [ ], 조기 종료 [사용 / 안 함] B4. 규제: [L1 / L2], 강도 [C 또는 alpha 값] B5. 앙상블: [보팅(모델 목록) / 배깅(기본 모델, 개수) / 부스팅(종류, 단계 수)] B6. 여러 모델 비교표: [비교할 모델 목록] # 반드시 지킬 것 1. 분할: 층화(stratify)로 나눈다. 증강·복제 데이터라면 원본 ID(seed_id) 단위로 나눈다(StratifiedGroupKFold 또는 GroupShuffleSplit). 이유를 주석 한 줄로 적는다. 2. 누수 방지: 스케일링, 특성 선택, 결측치 처리는 Pipeline 안에서 학습 데이터로만 fit한다. 시험 세트는 모든 선택이 끝난 뒤 한 번만 쓴다. 3. 재현성: random_state=0처럼 난수를 고정한다. 4. 기준선: 가장 많은 클래스만 답할 때의 정확도를 함께 출력한다. 5. 출력: 교차검증 정확도(평균 ± 표준편차), 시험 정확도, 혼동행렬, classification_report(클래스별 정밀도·재현율·F1). 6. 원래 코드에서 바뀐 줄에는 "# [변경]" 주석을 단다. 7. 주석과 설명은 한국어로, 입문자도 따라올 수 있게 쓴다. 8. 코랩에서 바로 실행되도록 import를 모두 넣고, 필요하면 파일 올리기 칸(google.colab.files.upload)을 포함한다. # 답변 형식 1. 무엇을 왜 바꿨는지 3~5줄 요약 2. 그대로 실행되는 전체 코드 한 덩어리 (주피터 칸으로 나눌 곳에 "# %%" 표시) 3. 결과를 읽는 법과 주의할 점 (과적합·누수·클래스 불균형 신호) 4. 다음에 해 볼 만한 실험 2~3가지 # 코드 [여기에 내려받은 .py 코드나 노트북 코드를 붙여 넣는다]
프롬프트의 "반드시 지킬 것"은 이 자료에서 다룬 원칙(층화 분할, 원본 단위 분할, 누수 방지, 기준선 비교)을 그대로 옮긴 것입니다. AI가 만든 코드도 이 원칙을 지켰는지 확인하세요.
본문에서 점선 밑줄이 있는 단어를 누르면 같은 비유가 뜹니다. 여기서는 한꺼번에 훑어볼 수 있습니다.
본문에서 점선 밑줄이 있는 단어는 처음 나올 때마다 눌러서(또는 마우스를 올려서) 같은 비유를 볼 수 있습니다. 여기서는 한꺼번에 훑어볼 수 있습니다.
비유요리 레시피의 재료 비율. 소금을 두 배 넣으면 맛이 크게 바뀌듯, 가중치가 큰 입력이 판단을 크게 좌우합니다.
뜻입력 하나하나가 결과에 얼마나 영향을 주는지 나타내는 숫자. 학습이 찾아내는 대상입니다.
비유체중계의 영점 나사. 아무것도 올리지 않았을 때 바늘이 가리키는 위치를 옮겨 줍니다.
뜻식 w·x + b의 b. 결정 경계를 평행 이동시킵니다.
비유다트가 과녁 중심에서 빗나간 거리. 멀수록 점수가 나쁩니다.
뜻예측이 정답과 얼마나 다른지를 숫자 하나로 잰 것. 학습은 이 값을 줄이는 과정입니다.
비유짙은 안개 속 산에서 발밑의 기울어짐만 느끼며 한 걸음씩 아래로 내려가 골짜기를 찾는 것.
뜻손실이 줄어드는 방향(기울기의 반대)으로 가중치를 조금씩 옮기는 방법.
비유산을 내려갈 때의 보폭. 너무 크면 골짜기를 건너뛰고, 너무 작으면 해가 질 때까지 못 내려갑니다.
뜻경사하강법에서 한 번에 얼마나 크게 움직일지 정하는 값. 기호는 η(에타).
비유문제집 한 권을 처음부터 끝까지 한 번 푸는 것. 여러 번 풀면 익숙해지지만, 너무 많이 풀면 답을 외워 버립니다.
뜻학습 데이터 전체를 한 바퀴 다 보는 단위.
비유불량품이 나온 공장에서 마지막 공정부터 거꾸로 거슬러 올라가며 공정마다 책임을 나누는 것.
뜻출력의 오차를 층을 따라 거꾸로 전달해, 모든 가중치의 기울기를 한 번에 구하는 방법.
비유도미노. 첫 조각이 마지막 조각에 주는 영향은, 중간 조각들이 차례로 미는 힘을 곱한 것과 같습니다.
뜻합성함수의 미분은 각 단계 미분의 곱이라는 규칙. 역전파의 수학적 근거입니다.
비유둥근 그릇 안에 구슬 굴리기. 어디서 놓아도 바닥 한 곳으로 모입니다.
뜻골짜기(최솟값)가 하나뿐인 최적화 문제. 그래서 답을 확실히 찾을 수 있습니다. SVM과 로지스틱 회귀가 여기에 속합니다.
비유양 끝이 막힌 볼륨 다이얼. 아무리 돌려도 0%와 100% 사이에서만 움직입니다.
뜻어떤 실수든 0과 1 사이 값으로 바꾸는 S자 함수 σ(z).
비유반장 선거의 득표수를 득표율(%)로 바꾸기. 모든 후보의 득표율을 더하면 100%가 됩니다.
뜻클래스별 점수를 합이 1인 확률로 바꾸는 함수. 클래스가 2개면 시그모이드와 같습니다.
비유"비 올 확률 99%"라고 했다가 맑으면 신뢰를 크게 잃고, "55%"라고 했다가 틀리면 조금만 잃는 일기예보 채점.
뜻정답에 준 확률이 낮을수록 크게 벌점을 주는 손실. −log(정답에 준 확률).
비유OMR 답안지. 정답 칸 하나만 까맣게(1) 칠하고 나머지는 비워(0) 둡니다.
뜻클래스를 [0, 0, 1]처럼 한 자리만 1인 벡터로 나타내는 방법.
비유경마 배당이 "1 대 3"에서 "2 대 3"으로 바뀌면 가능성의 비율이 2배가 된 것.
뜻특성이 1 늘 때 "일어날 확률 ÷ 안 일어날 확률"이 몇 배가 되는지. 로지스틱 회귀에서는 e^w입니다.
비유지도 위의 국경선. 선 이쪽이면 A국, 저쪽이면 B국입니다.
뜻모델의 답이 바뀌는 지점을 이은 선(또는 면).
비유장보기 계산. 품목별로 수량 × 가격을 곱해 모두 더하면 총액이 나옵니다.
뜻두 벡터의 같은 자리끼리 곱해서 더한 값. w·x가 바로 내적입니다.
비유방을 둘로 나누는 칸막이. 2차원에서는 선, 3차원에서는 판이고, 더 높은 차원에서도 같은 역할을 합니다.
뜻n차원 공간을 둘로 나누는 (n−1)차원의 평평한 경계.
비유차선 사이의 안전 거리. 넓을수록 조금 흔들려도 옆 차와 부딪히지 않습니다.
뜻결정 경계에서 가장 가까운 점까지의 여유. SVM은 이 폭을 최대화합니다.
비유텐트를 붙잡는 말뚝. 말뚝을 옮기면 텐트 모양이 바뀌지만, 안쪽 짐은 옮겨도 그대로입니다.
뜻마진 가장자리에 닿거나 안으로 들어온 학습 점. 이 점들만 경계를 결정합니다.
비유두 사람이 얼마나 닮았는지 재는 "닮음 측정기". 좌표를 일일이 옮기지 않고 닮은 정도만 잽니다.
뜻두 점을 고차원으로 옮긴 뒤의 내적을 바로 계산하는 함수 K(xᵢ, x).
비유층과 방이 끝없이 늘어나는 호텔에서 친구 찾기. 방이 많아질수록 모두가 서로 멀어집니다.
뜻특성(차원)이 많아지면 데이터가 듬성듬성해져 거리가 의미를 잃는 현상.
비유키(cm)와 몸무게(kg)를 비교하기 전에 단위 맞추기. 맞추지 않으면 숫자가 큰 쪽이 이깁니다.
뜻특성들의 범위를 비슷하게 맞추는 전처리. 표준화는 "평균 0, 표준편차 1"로 바꿉니다.
비유수도꼭지. 들어온 신호를 얼마나 흘려보낼지 정합니다.
뜻뉴런의 합계 z에 씌우는 함수. 이것이 있어야 곡선 경계를 만들 수 있습니다.
비유한쪽으로만 열리는 체크 밸브. 음수는 막고(0) 양수는 그대로 통과시킵니다.
뜻ReLU(z) = max(0, z).
비유양 끝이 막힌 시소. 아무리 밀어도 −1과 +1 사이에서만 움직입니다.
뜻값을 −1~1 사이로 누르는 S자 함수.
비유컨베이어 벨트. 원료가 첫 공정부터 마지막 공정까지 한 방향으로 흘러갑니다.
뜻입력에서 출력 방향으로 층을 차례로 계산하는 과정.
비유반 학생 전체의 성적을 한 번에 채점하는 일괄 처리.
뜻퍼셉트론 여러 개의 w·x + b를 한꺼번에 계산하는 방법.
비유레고 블록. 블록이 충분히 많으면 어떤 모양이든 흉내 낼 수 있습니다.
뜻은닉층의 뉴런이 충분하면 신경망이 어떤 연속 함수든 원하는 만큼 가깝게 흉내 낼 수 있다는 정리.
비유기출문제 답을 통째로 외운 학생. 기출은 만점이지만 처음 보는 문제는 못 풉니다.
뜻학습 데이터에는 잘 맞지만 새 데이터에서는 성능이 떨어지는 상태.
비유교과서를 대충 훑어본 학생. 기출문제도, 새 문제도 못 풉니다.
뜻모델이 너무 단순해 학습 데이터조차 잘 맞히지 못하는 상태.
비유요리사가 미리 정하는 불 세기와 조리 시간. 재료(데이터)를 보고 저절로 정해지지 않습니다.
뜻학습 전에 사람이 정하는 설정값. k, 나무 깊이, C, γ, 학습률 등.
비유문제지를 바꿔 가며 모의고사를 여러 번 보고 평균 내기. 한 번 운 좋게 잘 본 점수에 속지 않습니다.
뜻데이터를 k조각으로 나눠, 돌아가며 한 조각을 시험용으로 쓰고 점수를 평균 내는 평가 방법.
비유시험 전에는 공부하지 않고, 문제를 받은 뒤에야 참고서를 뒤지는 학생.
뜻학습 단계에서는 계산하지 않고 예측할 때 계산하는 방식. KNN이 대표적입니다.
코드를 직접 실행하려면 물고기 데이터 CSV(fish_market_x10.csv)를 받아 코드와 같은 폴더(또는 Colab)에 올리세요. 강사·튜터라면: 확인 문제의 채점 기준과 과제 예시 답안은 교육자용 정답 페이지 (1)에서 볼 수 있다.
「1 분류 모델은 모두 하나의 함수다」 편을 끝까지 읽었어요. 연구실 식구들이 한마디씩 정리해 드립니다.