물고기 분류 문제잡은 물고기를 재고, 분류 모델이 판단해, 종별 상자로 나누는 모습을 픽셀 그림으로 표현① 잡은 물고기를 잰다????② 모델이 판단한다분류 모델종 = f(몸길이, 높이, 두께, …)③ 종별로 나눈다도미빙어농어로치
Fish Market Data로 쉽게 따라하는 머신러닝 · 1

분류 모델은 모두 하나의 함수다

사람이 적은 if-then 규칙부터 수천 개에서 수천억 개의 가중치를 가진 딥러닝까지, 분류 모델은 모두 입력 x를 받아 클래스 ŷ를 돌려주는 함수 f(x)입니다. 여덟 모델이 다른 점은 세 가지뿐입니다. 함수의 모양, 그 안의 숫자를 정하는 방법, 그리고 그 결과로 생기는 결정 경계의 모양입니다.

이 판은 한 가지 문제에서 출발합니다. 잡은 물고기의 길이와 높이를 재면, 어떤 종인지 맞힐 수 있을까? 먼저 여덟 모델이 이 문제를 푸는 모습을 2차원과 3차원으로 한눈에 본 뒤, 모델을 하나씩 뜯어봅니다. 어려운 단어는 점선 밑줄을 누르면 비유로 볼 수 있고, 맨 뒤에 용어 사전이 있습니다.

● 클래스 A · ○ 클래스 B · ▲ 클래스 C

🐟

문제: 이 물고기는 어떤 종일까?Fish species classification

분류 모델이 무엇인지 설명하기 전에, 풀 문제부터 정합니다.

1문제 정의

어시장에서 물고기를 잡을 때마다 무게, 길이, 높이, 두께를 잽니다. 이 숫자만 보고 어떤 종인지 맞히고 싶습니다. 사람은 "통통하면 도미, 가늘고 작으면 빙어"처럼 감으로 구분하지만, 우리는 그 판단을 숫자로 된 규칙, 즉 함수로 만들려 합니다.

종 = f(몸길이, 높이, 두께, …)

입력은 잰 숫자들이고 출력은 종 이름입니다. 이것이 분류 문제입니다. 쓰는 데이터는 7종 1,554마리의 측정값입니다(공개 데이터를 증강, 4번 참고). 이 페이지는 7종 가운데 두 쌍을 골라 씁니다. 도미 vs 빙어는 누가 봐도 다른 쉬운 짝, 농어 vs 로치는 크기와 모양이 비슷한 어려운 짝입니다.

물고기무게몸길이높이두께종은?
①290 g26.3 cm12.5 cm4.3 cm?
②9.8 g12.0 cm2.2 cm1.2 cm?
③110 g21.0 cm5.7 cm3.6 cm?

정답: ① 도미, ② 빙어, ③ 농어 (데이터의 원본 행에서 가져온 값을 반올림)

물고기 측정 특성주둥이에서 꼬리지느러미 시작, 갈라진 곳, 끝까지의 세 가지 길이와 가장 높은 곳의 높이length1: 주둥이 → 꼬리지느러미 시작length2 (몸길이): 주둥이 → 꼬리 갈라진 곳length3: 주둥이 → 꼬리 끝height: 가장 높은 곳
22차원으로 보기 · 여덟 모델이 같은 문제를 푸는 모습

가로축은 몸길이, 세로축은 높이입니다. 배경색은 각 모델이 그 위치의 물고기를 무엇으로 판단하는지, 점은 처음 보는 시험 물고기입니다. 같은 데이터인데도 모델마다 선을 긋는 방식이 전혀 다릅니다. 그림을 누르면 그 모델의 설명으로 갑니다.

짝 ● 도미·농어 ○ 빙어·로치

쉬운 짝으로 바꾸면 여덟 모델이 모두 100%입니다. 모델의 차이는 데이터가 어려울 때만 드러납니다. 어려운 짝에서 가장 높은 점수(굵은 테두리)도 0.8 안팎이라, 두 특성만으로는 한계가 있다는 것도 보입니다.

33차원으로 보기 · 축을 하나 더하면

두께를 세 번째 축으로 더합니다. 그림을 끌거나 슬라이더(키보드 ←/→)로 돌려 보세요. 옅은 네모는 공간 곳곳에서 모델이 내리는 판단이고, 큰 점은 시험 물고기입니다. 아래 표에서 축 하나를 더했을 때 점수가 어떻게 바뀌는지 비교합니다.

짝
모델

어려운 짝에서 로지스틱 회귀와 딥러닝은 두께를 더하자 0.785·0.792에서 0.852로 올랐습니다. 반면 규칙 기반은 두께를 쓰지 않으니 그대로이고, 의사결정나무는 오히려 조금 낮아졌습니다. 축을 더하는 것, 즉 특성을 더하는 것이 모델을 바꾸는 것만큼 중요합니다.

4데이터에 대해 알아 둘 것 · 종마다 어떻게 생겼나

이 자료는 물고기 7종 1,554마리의 측정값을 씁니다. 표의 막대는 몸길이의 범위(0~70 cm 눈금), 점은 평균입니다. 체형 비율은 높이 ÷ 몸길이, 꼬리 비율은 꼬리 길이 ÷ 몸길이(중앙값)입니다.

모양종마리 수몸길이 분포평균 무게체형 비율꼬리 비율주요 특징
도미
Bream
348
24~44 cm, 평균 33.2
623 g0.460.16몸이 위아래로 높고 납작합니다(높이가 몸길이의 약 46%). 평균 623 g으로 무거운 편입니다.
빙어
Smelt
138
9~16 cm, 평균 11.9
11 g0.180.10가장 작고 가볍습니다(몸길이 9~16 cm, 평균 11 g). 가늘고 긴 체형입니다.
농어
Perch
560
8~50 cm, 평균 27.6
364 g0.280.06가장 많고(560마리) 크기 폭이 가장 넓습니다(8~50 cm). 꼬리가 짧습니다(꼬리 비율 약 0.06).
로치
Roach
192
14~33 cm, 평균 22.6
163 g0.300.12크기와 체형이 농어와 비슷하지만 꼬리가 약 두 배 깁니다(0.12). "어려운 짝"인 이유입니다.
강꼬치고기
Pike
164
28~69 cm, 평균 45.3
703 g0.170.07가장 길고(최대 69 cm) 가장 가늘며(체형 0.17), 평균 703 g으로 가장 무겁습니다.
파르키
Parkki
104
13~28 cm, 평균 20.3
155 g0.440.12작지만 도미처럼 몸이 높습니다(체형 0.44). 작은 도미처럼 보여 도미와 헷갈리기 쉽습니다.
흰송어
Whitefish
48
24~41 cm, 평균 30.9
497 g0.320.10가장 적습니다(48마리). 체형(0.32)이 농어와 로치 사이라 경계가 애매합니다.
데이터 출처와 증강 방식
원본은 Kaggle에 공개된 Fish Market 데이터셋(https://www.kaggle.com/datasets/vipullrathod/fish-market)으로, 핀란드의 한 호수에서 잡은 7종 159마리의 측정 자료입니다. 이 자료는 원본을 정규분포를 고려해 약 10배로 증강했습니다. 데이터에서 확인한 증강 방식은 다음과 같습니다.
  • 크기: 원본 물고기마다 크기 배율을 평균 1, 표준편차 약 0.12인 정규분포에 가깝게 뽑아 길이·높이·두께에 함께 곱했습니다. 그래서 복제본은 원본보다 조금 크거나 작은 "비슷한 물고기"가 됩니다.
  • 무게: 부피에 맞게 크기 배율의 약 세제곱으로 바뀌고(데이터에서 확인한 기울기 3.1), 여기에 약 5%의 잡음이 더해졌습니다.
  • 모양: 체형 비율에는 약 3%, 꼬리 비율에는 0.5% 정도의 작은 잡음만 더해져, 종 고유의 모양이 유지됩니다.
  • 정리: 무게가 0으로 잘못 적힌 원본 1행과 완전히 같은 행 35개를 빼서 1,554마리가 되었습니다.

도미(Bream)는 국내 입문서의 관례를 따른 번역이며 실제로는 유럽 담수어 브림입니다. 증강된 물고기는 원본을 바탕으로 만들어졌기 때문에, 같은 원본에서 나온 물고기끼리는 서로 닮았습니다. 바로 아래 5번이 이 점이 왜 중요한지 보여 줍니다.

5데이터 분할 · 한쪽으로 쏠리게 나누면 엉망이 된다

같은 데이터, 같은 모델(로지스틱 회귀)인데 학습 세트와 시험 세트를 나누는 방법만 다릅니다. 왼쪽은 종별로 정렬된 파일을 앞에서부터 70%, 뒤 30%로 그냥 자른 경우, 오른쪽은 종의 비율을 맞추고(층화) 같은 원본에서 나온 물고기를 한쪽에만 둔 경우입니다.

짝
잘못된 분할파일 순서대로 앞 70% / 뒤 30%
학습 세트
시험 세트
시험 정확도

올바른 분할층화 + 물고기(원본) 단위 70 / 30
학습 세트
시험 세트
시험 정확도

왜 이런 일이 생기나
  1. 학습 쏠림데이터 파일은 흔히 종별로 정렬되어 있습니다. 섞지 않고 앞뒤로 자르면 한 종은 학습에만, 다른 종은 시험에만 몰립니다. 모델은 본 적 없는 종을 맞힐 수 없습니다.
  2. 시험 쏠림시험 세트가 거의 한 종이면 정확도는 "그 한 종을 얼마나 맞히나"만 잽니다. 두 종을 가르는 실력은 전혀 측정되지 않습니다.
  3. 증강된 쌍둥이같은 원본에서 나온 물고기가 학습과 시험 양쪽에 들어가면, 모델은 처음 보는 물고기가 아니라 쌍둥이를 이미 본 물고기를 맞혀 점수가 부풀려집니다. 7종 전체를 특성 6개로 가를 때 KNN(k = 1)은 행 단위 분할에서 0.959, 원본 단위 분할에서 0.920이었습니다.
  4. 바로잡는 법① 나누기 전에 섞는다(shuffle) ② 종의 비율을 맞춘다(stratify) ③ 같은 원본은 한쪽에만 둔다(StratifiedGroupKFold, GroupShuffleSplit). 이 페이지의 모든 점수는 이 세 가지를 지킨 분할로 계산했습니다.
0

분류 모델이란 — 입력을 받아 클래스를 돌려주는 함수

입력 x = (x₁, …, xₙ)은 특성(키, 나이, 픽셀 값 등)을 담은 벡터이고, 출력 ŷ은 K개의 클래스 중 하나입니다. K = 2이면 이진 분류, K ≥ 3이면 다중 분류입니다. 그림은 대부분 2차원·2개 클래스로 그렸고(KNN은 3개 클래스도 가능), 수식은 K개 클래스 일반형으로 썼습니다.

f : ℝn → {1, 2, …, K}
함수의 모양
f(x)를 어떤 식으로 쓰는가

if-then 규칙인가, 거리 투표인가, 선형식 w·x + b인가, 그 합성인가.

파라미터를 정하는 방법
식 안의 숫자는 누가 정하는가

사람이 직접 적는가, 데이터를 보고 무엇을 최소화하며 찾는가.

결정 경계의 모양
클래스가 바뀌는 선은 어떻게 생겼나

축에 평행한 계단, 들쭉날쭉한 곡선, 직선, 부드러운 곡선.

모델 지도: 오른쪽으로 갈수록 무엇 하나가 바뀝니다 (이름을 누르면 해당 칸으로 이동)
계보 A · 평면을 규칙이나 거리로 나누는 모델
규칙 기반임계값을
데이터가 결정
의사결정나무 KNN함수 대신
데이터 저장
계보 B · 모두 z = w·x + b 에서 출발하는 모델
퍼셉트론출력 함수
step → σ
로지스틱손실
→ 마진 최대
선형 SVM입력 공간
x → φ(x)
커널 SVCφ를
학습으로
딥러닝
01

규칙 기반 분류Rule-based classifier

계보 A사람이 쓴 if-then

1모델

전문가가 알고 있는 판단 기준을 if-then 문장으로 옮겨 적은 모델입니다. 데이터로 학습하지 않으며, 규칙 목록 자체가 곧 함수입니다.

파라미터 결정사람이 직접
결정 경계축에 평행한 직선
출력클래스

쉽게 말하면편의점 아르바이트 수칙과 같습니다. "신분증이 없고 앳돼 보이면 술을 팔지 않는다"처럼 점장이 적어 둔 문장을 그대로 따릅니다. 알바생은 판단 기준을 새로 배우지 않으므로, 수칙을 쓴 사람의 경험이 곧 모델의 실력입니다.

2수식
ŷ = cj   if   Rulej(x) = 참  (j = 1, …, m),    그 외 ŷ = cdefault
예)  Rule1 : (x₁ > 0.5) ∧ (x₂ > 0.4) → A,    그 외 → B규칙 순서대로 검사해 처음 참이 되는 규칙의 클래스를 돌려줍니다.
Rulej(x)
j번째 조건식 (참/거짓)
cj
그 규칙이 가리키는 클래스
0.5, 0.4
사람이 정한 임계값
수식 한 조각씩 읽기
  1. ŷ"와이 햇"이라고 읽습니다. y 위의 모자(^)는 "모델이 예측한 값"이라는 표시이고, 실제 정답은 모자 없는 y로 씁니다.
  2. ŷ = cj if Rulej(x) = 참"j번째 규칙의 조건이 맞으면, 그 규칙이 정해 둔 답 cj를 낸다"는 뜻입니다.
  3. j = 1, …, m규칙이 1번부터 m번까지 있고, 위에서부터 차례로 검사한다는 뜻입니다. 먼저 맞는 규칙이 이깁니다.
  4. cdefault어느 규칙에도 해당하지 않을 때 내는 기본 답입니다.
  5. ∧"그리고"입니다. 양쪽 조건이 모두 참일 때만 참이 됩니다. "또는"은 ∨로 씁니다.
숫자로 한 번 해 보기x = (0.7, 0.6): x₁ > 0.5 참, x₂ > 0.4 참 → 둘 다 참이므로 A
x = (0.3, 0.9): x₁ > 0.5부터 거짓 → 두 번째 조건은 볼 필요 없이 B
3다이어그램 · 한 장으로 보기
규칙 기반 분류기if-then 흐름도와 그 규칙이 만드는 결정 영역 입력 x = (x₁, x₂) x₁ > 0.5 ? 예 아니오 x₂ > 0.4 ? 아니오 ŷ = B 예 ŷ = A x₁x₂ x₁ = 0.5x₂ = 0.4
4해석

왼쪽 흐름도의 질문 두 개가 오른쪽 평면을 점선 두 개로 자릅니다. 두 조건을 모두 만족하는 오른쪽 위 사각형만 A가 되고, 나머지는 전부 B입니다.

핵심은 데이터를 보지 않고 경계를 정했다는 점입니다. 그래서 왼쪽 위의 초록 점처럼 규칙을 쓴 사람이 예상하지 못한 데이터는 그대로 틀립니다. 이 오류를 줄이려면 사람이 규칙을 하나 더 추가해야 합니다.

다음 모델인 의사결정나무는 구조가 이것과 똑같고, 임계값만 데이터가 정합니다.

3움직이는 다이어그램 · 실제로 판단하는 과정

새 점이 들어오면 사람이 적어 둔 조건을 순서대로 검사하고, 조건이 만든 영역에 따라 답을 냅니다.

  1. 새 점 도착
  2. 조건 1 검사
  3. 조건 2 검사
  4. 결론
5주요 특징
강점
  • 판단 이유를 문장 그대로 설명할 수 있음
  • 학습 데이터가 없어도 바로 만들 수 있음
  • 규제·감사 대응이 쉬움
한계
  • 규칙이 많아지면 서로 충돌하거나 빈틈이 생김
  • 새로운 패턴에 스스로 적응하지 못함
  • 전문가의 지식 수준이 성능의 상한
쓰이는 곳: 키워드 스팸 필터, 신용 심사 기준표, 의료 가이드라인 체크리스트
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

간단한 규칙 하나로 충분합니다. 도미는 높이 11 cm 이상, 빙어는 3 cm 이하라서 "높이 > 7 cm이면 도미"라는 규칙이 시험 물고기를 모두 맞힙니다. 사람이 산점도를 한 번 보고 정할 수 있는 수준입니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. 규칙 기반 분류기가 학습 데이터에서 새 패턴을 발견하면 어떻게 되나요?

Q2. 규칙이 "x₁ > 0.5 그리고 x₂ > 0.4 → A, 그 외 B"일 때 x = (0.6, 0.2)의 답은?

02

K-최근접 이웃K-Nearest Neighbors, KNN

계보 A거리로 투표

1모델

새 데이터가 들어오면 저장해 둔 데이터 중 가장 가까운 k개를 찾아 다수결로 클래스를 정합니다. "비슷한 것은 가까이 있다"는 가정 하나로 동작합니다.

파라미터 결정없음 (데이터 저장)
결정 경계들쭉날쭉한 곡선
하이퍼파라미터k, 거리 척도

쉽게 말하면처음 이사 온 동네에서 어떤 식당이 괜찮은지 모를 때, 우리 집에서 가장 가까운 이웃 다섯 명에게 물어보고 다수결로 정하는 것과 같습니다. 가까이 사는 사람일수록 취향이 비슷하다고 믿는 셈입니다.

2수식
ŷ = argmaxc  Σxi ∈ Nk(x) 𝟙(yi = c)
Nk(x) = 거리 d(x, xi) = ‖x − xi‖ 가 가장 작은 k개의 점유클리드 거리: ‖x − xᵢ‖ = √((x₁ − xᵢ₁)² + (x₂ − xᵢ₂)² + …)
𝟙(yᵢ = c)
이웃 i의 클래스가 c이면 1, 아니면 0 (표 한 장)
argmaxc
표를 가장 많이 받은 클래스 c를 고름
수식 한 조각씩 읽기
  1. ‖x − xi‖두 점 사이의 거리입니다. 평면이라면 자로 잰 직선 거리이고, 피타고라스 정리 √((x₁ − xi1)² + (x₂ − xi2)²)로 계산합니다.
  2. Nk(x)x와 가장 가까운 k개 점의 모임(Neighbors)입니다. k = 5면 거리 순으로 1~5위입니다.
  3. 𝟙(yi = c)지시 함수입니다. 괄호 안이 참이면 1, 거짓이면 0입니다. 이웃 i가 클래스 c이면 c에 한 표를 준다는 뜻입니다.
  4. Σ"모두 더하라"는 기호입니다. 이웃 k개가 c에 준 표를 합칩니다.
  5. argmaxcmax는 "가장 큰 값", argmax는 "가장 큰 값을 만드는 후보"입니다. 표를 가장 많이 받은 클래스 이름을 돌려줍니다. 동점이면 보통 더 가까운 이웃의 클래스를 택합니다.
숫자로 한 번 해 보기x = (1, 1)과 이웃 (1, 2)의 거리 = √(0² + 1²) = 1
가장 가까운 5개가 A, A, B, A, B라면 A의 합 = 3, B의 합 = 2 → argmax = A
3다이어그램 · 한 장으로 보기
KNN새 점의 가장 가까운 5개 이웃 중 A가 3개, B가 2개라 A로 분류 x₁x₂ 새 점 x 의 k = 5 이웃클래스 A: 3표클래스 B: 2표 다수결 → ŷ = A거리 d = ‖x − xᵢ‖학습 파라미터: 없음
분류하려는 새 점점선 원 = 가장 가까운 5개가 들어오는 범위
4해석

보라색 마름모가 새 점입니다. 모든 점과의 거리를 잰 뒤 가장 가까운 5개를 고르면 A가 3표, B가 2표이므로 A로 분류합니다.

KNN에는 학습 단계에서 계산하는 숫자가 하나도 없습니다. 데이터를 저장만 해 두었다가 질문이 올 때 비로소 계산합니다(게으른 학습). 즉 "함수의 식"이 따로 없고, 저장된 데이터 전체가 함수 역할을 합니다.

k가 작으면 경계가 한두 점에 휘둘려 들쭉날쭉해지고(과적합), k가 크면 경계가 뭉개집니다(과소적합).

3움직이는 다이어그램 · 실제로 판단하는 과정

저장된 모든 점과 거리를 잰 뒤 원을 넓혀 가며 가장 가까운 k개를 찾고 투표합니다. k와 클래스 수를 바꿔 결과가 어떻게 달라지는지 보세요.

클래스 수

  1. 새 점
  2. 모든 거리 재기
  3. 가까운 k개 찾기
  4. 투표
  5. 다수결 결과
5주요 특징
강점
  • 원리가 직관적이고 구현이 매우 단순
  • 경계 모양에 대한 가정이 없어 복잡한 경계도 따라감
  • 데이터를 추가하면 곧바로 반영
한계
  • 예측할 때마다 전체 데이터와 거리 계산 → 느림
  • 특성 단위가 다르면 거리가 왜곡 → 스케일링 필수
  • 차원이 높아지면 모든 점이 멀어짐 (차원의 저주)
쓰이는 곳: 추천 시스템의 유사 사용자 찾기, 소규모 데이터 기준 모델, 이상치 탐지
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

가장 가까운 이웃이 모두 같은 종이라 k를 얼마로 하든 100%입니다. 무리가 멀리 떨어져 있으면 KNN이 가장 쉽게 이깁니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. k = 1이면 경계는 어떻게 되기 쉬운가요?

Q2. 키(cm)와 몸무게(kg)를 그대로 넣고 KNN을 쓰면 생기는 문제는?

03

의사결정나무Decision tree

계보 A데이터가 정한 if-then

1모델

"x₁이 0.2 이하인가?" 같은 예/아니오 질문을 반복해 데이터를 쪼개는 모델입니다. 규칙 기반과 구조가 같지만, 어떤 특성을 어떤 값에서 자를지 데이터가 정합니다.

파라미터 결정불순도 최소 분할
결정 경계축에 평행한 계단
하이퍼파라미터최대 깊이

쉽게 말하면스무고개나 병원 문진표와 같습니다. "열이 38도 이상인가요?", "기침을 하나요?"처럼 예/아니오 질문을 하나씩 던지며 후보를 좁혀 갑니다. 어떤 질문을 먼저 할지는 데이터를 가장 잘 가르는 순서로 컴퓨터가 정합니다.

2수식
ŷ = Σm cm · 𝟙(x ∈ Rm),    cm = Rm 안에서 가장 많은 클래스
(j*, t*) = argminj, t [ (nL/n)·G(L) + (nR/n)·G(R) ],    G = 1 − Σk pk²모든 특성 j와 자를 위치 t를 시험해 보고, 나눈 뒤 양쪽이 가장 "순수해지는" 조합을 고릅니다.
Rm
잎 노드 하나가 차지하는 직사각형 영역
G (지니 불순도)
한 클래스만 있으면 0, 섞일수록 커짐. pₖ = 영역 안 클래스 k의 비율
수식 한 조각씩 읽기
  1. 𝟙(x ∈ Rm)x가 m번째 칸 Rm 안에 있으면 1, 아니면 0입니다.
  2. Σm cm·𝟙(x ∈ Rm)칸들은 서로 겹치지 않으므로 x가 속한 칸 하나만 1이 됩니다. 그래서 합을 계산하면 그 칸의 답 cm만 남습니다.
  3. G = 1 − Σk pk²지니 불순도입니다. 칸 안에서 두 개를 무작위로 뽑았을 때 클래스가 서로 다를 확률로, 한 클래스뿐이면 0, 반반이면 0.5로 가장 큽니다.
  4. (nL/n)·G(L) + (nR/n)·G(R)나눈 뒤 왼쪽(L)과 오른쪽(R)의 불순도를, 각각에 들어간 점의 비율만큼 가중 평균한 값입니다.
  5. argminj, t그 평균을 가장 작게 만드는 특성 j(어느 축)와 기준값 t(어디서 자를지)를 고릅니다.
숫자로 한 번 해 보기칸에 A 8개, B 2개: p = (0.8, 0.2) → G = 1 − (0.64 + 0.04) = 0.32
A 5, B 5면 G = 1 − (0.25 + 0.25) = 0.5, A 10개뿐이면 G = 1 − 1 = 0
3다이어그램 · 한 장으로 보기
의사결정나무트리 분할 규칙이 평면을 세 직사각형으로 나눔 예아니오예아니오 x₁ ≤ 0.45 R₁: ŷ = B x₂ ≤ 0.50 R₃: ŷ = B R₂: ŷ = A 분할 기준: 지니 불순도 최소화 x₁x₂ R₁R₂R₃
4해석

스무고개와 같습니다. 첫 질문 x₁ ≤ 0.45가 평면을 세로로 자르고, 오른쪽 조각을 두 번째 질문 x₂ ≤ 0.50이 가로로 한 번 더 자릅니다. 잎 노드 R₁, R₂, R₃가 오른쪽 평면의 직사각형과 하나씩 대응합니다.

규칙 기반과 비교하면 질문의 형식은 같고, 0.45와 0.50이라는 숫자를 데이터가 골랐다는 점만 다릅니다. 가능한 모든 자르는 위치를 시험해 보고, 자른 뒤 양쪽이 가장 한 클래스로 모이는 곳을 택합니다.

질문이 항상 "한 특성 ≤ 값" 형태라서 경계는 반드시 축에 평행한 계단이 됩니다. 대각선 경계는 계단을 아주 잘게 쌓아야 흉내 낼 수 있습니다.

3움직이는 다이어그램 · 실제로 판단하는 과정

데이터로 실제 학습한 나무를 새 점이 따라 내려갑니다. 질문 하나마다 남은 영역 밖의 점이 흐려지고, 잎 노드에 도착하면 그 칸의 답이 나옵니다. 깊이를 바꾸면 나무를 다시 학습합니다.

  1. 새 점
  2. 질문 따라 내려가기
  3. 잎 노드 = 답
5주요 특징
강점
  • 학습 결과를 if-then 규칙으로 뽑아 설명 가능
  • 특성 스케일링이 필요 없음. 범주형 특성도 원리상 다룰 수 있으나 scikit-learn에서는 숫자로 인코딩해야 함
  • 랜덤 포레스트·그래디언트 부스팅의 기본 블록
한계
  • 깊게 키우면 데이터를 외워 과적합 → 가지치기 필요
  • 데이터가 조금만 바뀌어도 트리 모양이 크게 달라짐
  • 대각선·곡선 경계를 표현하기 어려움
쓰이는 곳: 대출 승인, 고객 이탈 예측, 설명이 필요한 업무 규칙 추출
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

질문 하나로 두 종을 완벽히 가릅니다(세로 경계선). 사람은 높이로 갈랐지만 나무는 몸길이를 골랐습니다. 이 짝에서는 길이와 높이 모두 완벽하게 가르기 때문에, 먼저 검사한 특성이 뽑혔을 뿐입니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. 의사결정나무의 결정 경계가 항상 축에 평행한 이유는?

Q2. 칸에 A 6개, B 4개가 있을 때 지니 불순도는?

04

퍼셉트론Perceptron

계보 B의 출발점z = w·x + b → step

1모델

입력마다 중요도(가중치)를 곱해 더한 점수가 기준을 넘으면 "예"라고 답하는 모델입니다. 뇌의 뉴런 하나를 흉내 낸 것으로, 모든 인공신경망의 가장 작은 부품입니다.

파라미터 결정틀릴 때마다 수정
결정 경계직선 (초평면)
출력클래스 (확률 아님)

쉽게 말하면서류 전형 점수표와 같습니다. "학점 × 3 + 자격증 × 2 − 지각 횟수 × 1"을 계산해 기준을 넘으면 합격입니다. 항목별 배점이 가중치 w이고, 합격 기준선을 옮기는 값이 b입니다. 퍼셉트론은 이 배점을 사람이 아니라 합격·불합격 사례를 보며 스스로 고칩니다.

2수식
z = w·x + b = w₁x₁ + w₂x₂ + … + wₙxₙ + b
이진:  ŷ = step(z) = { 1 if z > 0,  0 otherwise }     다중:  ŷ = argmaxk (wk·x + bk)다중 분류는 클래스마다 퍼셉트론을 하나씩 두고, 점수가 가장 큰 클래스를 고릅니다.
학습 규칙:  w ← w + η (y − ŷ) x,    b ← b + η (y − ŷ)
w, b
가중치와 편향. 데이터로 찾아야 하는 빈칸
η (에타)
학습률. 한 번에 얼마나 크게 고칠지
y − ŷ
정답 − 예측. 맞으면 0이라 아무것도 바뀌지 않음
수식 한 조각씩 읽기
  1. w·x점곱(내적)입니다. 같은 자리끼리 곱해서 모두 더합니다: w₁x₁ + w₂x₂ + … + wₙxₙ. "항목별 점수 × 배점의 합"입니다.
  2. + b편향입니다. 문턱의 높이를 옮깁니다. b가 −3이면 w·x가 3을 넘어야 z가 양수가 됩니다.
  3. step(z)계단 함수입니다. z가 0보다 크면 1, 아니면 0. 중간값 없이 딱 잘라 판단합니다.
  4. w ← w + η(y − ŷ)x화살표 ←는 "오른쪽 값으로 바꿔 넣는다"는 뜻입니다. 맞히면 y − ŷ = 0이라 그대로입니다. 1을 0으로 틀렸으면 x를 더해 z를 키우고, 0을 1로 틀렸으면 x를 빼서 z를 줄입니다.
  5. argmaxk(wk·x + bk)클래스가 여럿이면 클래스마다 점수표를 따로 두고, 점수가 가장 높은 클래스를 고릅니다.
숫자로 한 번 해 보기w = (2, −1), b = −1, x = (1, 0.5): z = 2×1 + (−1)×0.5 − 1 = 0.5 > 0 → ŷ = 1
정답이 0이었다면 (η = 0.1) w ← (2, −1) − 0.1×(1, 0.5) = (1.9, −1.05), b ← −1.1
3다이어그램 · 한 장으로 보기
퍼셉트론입력과 바이어스가 가중치를 거쳐 합산되고 계단 함수를 통과 w₁w₂b x₁ x₂ 1 Σ → z step(z)z > 0 → 1 ŷ 1z0 z = w₁x₁ + w₂x₂ + b틀리면 w ← w + η(y − ŷ)x
4해석

왼쪽 입력 x₁, x₂에 각각 가중치 w₁, w₂를 곱하고, 항상 1인 입력에 곱해지는 b(편향)를 더해 점수 z를 만듭니다. 그 점수를 계단 함수에 넣어 0보다 크면 1, 아니면 0을 냅니다.

평면에서 보면 z = 0 인 곳, 즉 w₁x₁ + w₂x₂ + b = 0 이 직선입니다. 이 직선의 한쪽은 1, 반대쪽은 0이 됩니다. w는 직선의 기울기(방향)를, b는 직선의 위치를 정합니다.

학습은 틀린 예시를 만날 때마다 w를 그 예시 쪽으로 조금 미는 것이 전부입니다. 분리 가능한 직선을 아무거나 하나 찾으면 멈추므로, 어떤 직선이 나올지는 데이터 순서에 따라 달라집니다.

3움직이는 다이어그램 · 실제로 판단하는 과정

틀린 점을 하나 골라 z를 계산하고, 학습 규칙대로 w를 고치면 직선이 돕니다. 틀린 점(✕)이 없어질 때까지 반복합니다. 이 그림은 좌표 범위가 작아 η = 0.3을 썼습니다(아래 ⑦ 실습은 η = 0.1).

  1. 틀린 점 고르기
  2. z로 확인
  3. 직선 수정
  4. 모두 맞으면 끝
5주요 특징
강점
  • 연산이 곱셈·덧셈·비교뿐이라 매우 가볍고 빠름
  • 데이터가 직선으로 나뉜다면 반드시 수렴(수렴 정리)
  • 딥러닝을 이해하는 출발점
한계
  • XOR처럼 직선으로 나눌 수 없는 문제는 풀 수 없음
  • 확률(얼마나 확신하는지)을 알려 주지 않음
  • 여러 해답 중 어떤 직선이 나올지 보장 없음
위치: 1958년 로젠블랫. 이후 로지스틱 회귀(출력 함수 교체)와 다층 신경망(층 쌓기)의 뿌리
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

직선 하나로 완전히 나뉘는 짝이라 가중치를 3번만 고치고 멈춥니다. 1편 04에서 본 "선형 분리 가능하면 반드시 수렴"이 그대로 나타납니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. 퍼셉트론이 예측을 맞혔을 때 가중치는?

Q2. 퍼셉트론 하나로 절대 풀 수 없는 문제는?

퍼셉트론 심화: 수학 함수와 무엇이 다르고, 안에서는 무슨 계산을 하나

학교에서 배운 함수와 나란히 놓으면 머신러닝이 무엇을 하는지 정확히 보입니다. 아래 실습에서 숫자를 직접 바꿔 보세요.

6수학 함수 vs 퍼셉트론
수학 시간의 함수
f(x) = 2x + 1
  • 식의 모양(일차식)과 계수(2와 1)를 모두 사람이 정해서 준다
  • 할 일: x를 넣어 f(x)를 계산하기
  • 방향: 식 → 답
  • 출력: 연속적인 실수 (3, 7.4, −1 …)
퍼셉트론
f(x; w, b) = step(w·x + b)
  • 식의 모양(곱하고, 더하고, 문턱 비교)만 정하고 w와 b는 빈칸
  • 할 일: 예시(x)와 정답(y)을 보고 빈칸을 채우기
  • 방향: 답(데이터) → 식의 계수
  • 출력: 클래스 (0 또는 1)

수학 문제는 "식을 줄 테니 답을 구하라"이고, 머신러닝은 "답을 잔뜩 줄 테니 식의 계수를 구하라"입니다. 일단 계수를 다 찾고 나면 퍼셉트론도 f(x) = 2x + 1처럼 평범한 함수가 됩니다.

또 하나의 차이: y = 2x + 1은 입력이 하나지만, 퍼셉트론은 입력이 n개인 다변수 일차식 w₁x₁ + … + wₙxₙ + b에 문턱(step)을 씌운 것입니다. 안에 특별한 수학은 없고 곱셈, 덧셈, 크기 비교 세 가지 연산만 있습니다.

7연산 따라가기: 시험 합격 예측

x₁ = 주당 공부 시간(시간), x₂ = 결석 횟수(회)로 합격(1)/불합격(0)을 예측하는 퍼셉트론입니다. 입력과 가중치를 움직이면 세 단계 계산과 오른쪽 평면의 직선이 함께 바뀝니다.

  1. 곱하기: 입력마다 가중치를 곱한다
  2. 더하기: 곱한 값과 편향 b를 모두 더해 점수 z를 만든다
  3. 문턱 비교: z가 0보다 크면 1, 아니면 0
퍼셉트론 결정 경계공부 시간과 결석 횟수 평면에서 직선 w1x1 + w2x2 + b = 0 이 합격과 불합격 영역을 나눈다
z > 0 영역 (합격)z ≤ 0 영역 (불합격)현재 입력
8학습 한 번 해 보기: 빈칸(w, b)은 이렇게 채워진다

위의 현재 입력이 실제로는 어떤 결과였는지 정답을 골라 "학습 1회"를 누르세요. 예측이 틀렸다면 학습 규칙 w ← w + η(y − ŷ)x (η = 0.1)로 가중치가 고쳐지고, 위의 슬라이더와 직선이 실제로 움직입니다.

05

로지스틱 회귀Logistic regression · 다중 클래스는 소프트맥스 회귀

계보 Bstep → σ, 확률 출력

1모델

퍼셉트론과 같은 점수 z = w·x + b를 계산하되, 계단 대신 부드러운 S자 곡선(시그모이드)에 넣어 0과 1 사이의 확률로 바꾸는 모델입니다. 이름에 "회귀"가 있지만 분류 모델입니다.

파라미터 결정교차엔트로피 최소
결정 경계직선
출력클래스별 확률

쉽게 말하면일기예보가 "내일 비가 온다/안 온다" 대신 "비 올 확률 70%"라고 말하는 것과 같습니다. 경계에서 먼 점은 90%대로, 경계 근처는 50%대로 말해 판단의 확신 정도까지 알려 줍니다.

2수식
이진:   P(y = 1 | x) = σ(z) = 1 / (1 + e−z),    z = w·x + b
다중:   P(y = k | x) = softmax(z)k = ezk / Σj ezj,    zk = wk·x + bk,    ŷ = argmaxk P(y = k | x)
손실:   L = − Σi log P(yi | xi)   (교차엔트로피)  → 경사하강법으로 최소화정답 클래스에 준 확률이 1에 가까울수록 손실이 0에 가까워집니다.
σ (시그모이드)
어떤 실수든 0~1 사이로 눌러 주는 S자 함수
softmax
K개의 점수를 합이 1인 K개의 확률로 바꾸는 함수 (K = 2이면 σ와 같음)
수식 한 조각씩 읽기
  1. e−ze는 약 2.718인 수입니다. z가 크면 e−z는 0에 가까워지고, z가 음수로 작아지면 매우 커집니다.
  2. σ(z) = 1 / (1 + e−z)시그모이드입니다. z = 0이면 1/(1+1) = 0.5, z = 2면 약 0.88, z = −2면 약 0.12. 어떤 z도 0과 1 사이로 눌러 줍니다.
  3. P(y = 1 | x)"x가 주어졌을 때 y가 1일 확률"입니다. 세로 막대 | 는 "~일 때"로 읽습니다.
  4. softmax(z)k = ezk / Σ ezj클래스별 점수를 e의 지수로 올려 모두 양수로 만든 뒤, 전체 합으로 나눠 합이 1인 확률로 바꿉니다.
  5. L = −Σ log P(yi | xi)교차엔트로피 손실입니다. 정답에 준 확률이 1이면 벌점 0, 0.5면 0.69, 0.1이면 2.30. 자신 있게 틀릴수록 벌점이 커집니다.
숫자로 한 번 해 보기점수 z = (2, 1, 0) → ez = (7.39, 2.72, 1.00), 합 11.11 → 확률 (0.67, 0.24, 0.09)
정답이 첫 번째 클래스라면 손실 = −log 0.67 = 0.40
3다이어그램 · 한 장으로 보기
로지스틱 회귀선형 합 z에 시그모이드를 씌워 확률을 출력, 오른쪽은 시그모이드 곡선과 0.5 임계값 w₁w₂b x₁ x₂ 1 Σ → z σ(z) p P(y=A | x) zp 0.51 ŷ = Aŷ = B σ(z) = 1 / (1 + e⁻ᶻ)손실: −Σ [ y·log p + (1−y)·log(1−p) ]
4해석

왼쪽 구조는 퍼셉트론과 똑같고 마지막 상자만 step에서 σ로 바뀌었습니다. 오른쪽 곡선을 보면 z가 클수록 확률이 1에, 작을수록 0에 부드럽게 다가갑니다.

확률이 0.5가 되는 곳은 z = 0 이므로, 결정 경계는 퍼셉트론과 마찬가지로 직선입니다. 달라진 것은 두 가지입니다. 경계 근처의 점에는 0.55처럼 애매한 확률을, 먼 점에는 0.99처럼 확신에 찬 확률을 준다는 것, 그리고 곡선이 매끄러워 미분이 가능하므로 경사하강법으로 w를 체계적으로 찾을 수 있다는 것입니다.

클래스가 3개 이상이면 클래스마다 점수 zₖ를 만들고 소프트맥스로 확률을 나눠 가집니다. 딥러닝의 출력층이 바로 이 구조입니다.

3움직이는 다이어그램 · 실제로 판단하는 과정

앞부분은 경사하강법으로 w가 자리를 잡으며 확률 지도(색의 진하기)가 만들어지는 과정이고, 뒷부분은 새 점이 경계를 가로지를 때 확률이 S자 곡선을 따라 변하는 모습입니다.

  1. w = 0에서 시작
  2. 경사하강으로 학습
  3. 경계 = 확률 0.5
  4. 새 점의 확률 읽기
5주요 특징
강점
  • 확률을 출력하므로 "얼마나 확신하는지" 알 수 있음
  • 계수 wⱼ로 특성의 영향 방향과 크기 해석 (오즈비 ewⱼ)
  • 빠르고 안정적인 기준 모델(baseline)
한계
  • 경계가 직선이라 비선형 문제는 특성을 직접 만들어 줘야 함
  • 특성끼리 강하게 얽혀 있으면 계수 해석이 불안정
  • 이상치에 확률이 끌려갈 수 있음
쓰이는 곳: 질병 발생 위험도, 클릭률 예측, 신용 부도 확률, 모든 분류 문제의 첫 기준선
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

경계에서 먼 물고기일수록 색이 진합니다(확률이 0이나 1에 가까움). 두 무리 사이 빈 공간은 확률이 급하게 바뀝니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. z = 0일 때 σ(z)는?

Q2. 로지스틱 회귀의 결정 경계 모양은?

06

선형 서포트 벡터 머신Linear SVM

계보 B손실 → 마진 최대화

1모델

두 클래스를 나누는 직선 중에서 양쪽 데이터와 가장 멀리 떨어진 직선, 즉 "가장 넓은 도로"의 가운데 선을 찾는 모델입니다.

파라미터 결정마진 최대 + 힌지손실
결정 경계직선 (유일)
하이퍼파라미터C

쉽게 말하면두 마을 사이에 도로를 내는 일과 같습니다. 양쪽 집을 하나도 건드리지 않으면서 가장 넓은 도로를 내고, 도로 한가운데 중앙선을 경계로 삼습니다. 도로가 넓을수록 새로 지은 집이 조금 삐져나와도 헷갈리지 않습니다.

2수식
ŷ = sign(w·x + b)
minw, b   ½‖w‖² + C Σi max(0, 1 − yi(w·xi + b)),    yi ∈ {−1, +1}앞 항은 마진을 넓히고(‖w‖이 작을수록 마진 2/‖w‖이 넓음), 뒤 항(힌지손실)은 도로를 침범한 점에 벌점을 줍니다.
다중:   ŷ = argmaxk (wk·x + bk)   (One-vs-Rest: 클래스마다 "k 대 나머지" SVM)
2 / ‖w‖
마진(도로 폭)
C
침범 허용 정도. 크면 엄격(좁은 도로), 작으면 관대(넓은 도로)
수식 한 조각씩 읽기
  1. sign(z)부호 함수입니다. z가 양수면 +1, 음수면 −1.
  2. yi ∈ {−1, +1}SVM은 두 클래스를 0/1 대신 −1/+1로 씁니다. 그러면 yi(w·xi + b)가 양수라는 한 줄로 "올바른 쪽에 있다"를 표현할 수 있습니다.
  3. yi(w·xi + b) ≥ 1올바른 쪽에 있을 뿐 아니라 도로 가장자리(점선) 바깥에 있어야 한다는 조건입니다.
  4. ½‖w‖²‖w‖는 화살표 w의 길이입니다. 도로 폭이 2/‖w‖이므로 ‖w‖를 작게 할수록 도로가 넓습니다. ½과 제곱은 미분 계산을 쉽게 하려고 붙입니다.
  5. C·Σ max(0, 1 − yi(w·xi + b))힌지 손실입니다. 도로 밖 올바른 쪽이면 0, 도로 안으로 들어오거나 반대편에 있으면 들어온 깊이만큼 벌점을 받습니다. C는 이 벌점의 무게입니다.
숫자로 한 번 해 보기w = (1, 1), b = −3 → 도로 폭 = 2/√2 ≈ 1.41
x = (3, 2), y = +1: 1×(3 + 2 − 3) = 2 ≥ 1 → 벌점 0
x = (2, 1.5), y = +1: 0.5 → 벌점 1 − 0.5 = 0.5
3다이어그램 · 한 장으로 보기
선형 SVM결정 경계 직선과 마진 점선, 서포트 벡터, 법선 벡터 w, 마진 폭 x₁x₂ w 2 / ‖w‖ w·x + b = 0 w·x + b = ±1 서포트 벡터 목적 함수min ½‖w‖²s.t. yᵢ(w·xᵢ + b) ≥ 1⇔ 마진 2/‖w‖ 최대화
4해석

실선이 결정 경계, 두 점선이 도로의 가장자리입니다. 동그라미 친 세 점이 도로 가장자리에 딱 닿아 있는 서포트 벡터이고, 경계는 오직 이 점들만으로 정해집니다. 멀리 있는 점은 지우거나 옮겨도 경계가 변하지 않습니다.

퍼셉트론·로지스틱과 경계의 식(w·x + b = 0)은 같습니다. 차이는 어떤 직선을 고르는가입니다. 퍼셉트론은 처음 찾은 직선, 로지스틱은 확률 오차가 가장 작은 직선, SVM은 양쪽과의 여유가 가장 큰 직선을 고릅니다. 여유가 클수록 새 데이터가 조금 흔들려도 틀릴 가능성이 줄어듭니다.

SVM은 레이블을 0/1 대신 −1/+1로 써서 yᵢ(w·xᵢ + b) ≥ 1 한 줄로 "올바른 쪽에 여유 있게 있음"을 표현합니다.

3움직이는 다이어그램 · 실제로 판단하는 과정

직선의 방향을 돌려 가며 방향마다 낼 수 있는 가장 넓은 도로를 재고(오른쪽 곡선), 폭이 최대인 방향을 고릅니다. 이 탐색은 원리를 보여 주기 위한 것이며, 실제 SVM은 볼록 최적화 문제를 풀어 한 번에 답을 찾습니다.

  1. 방향 돌리며 폭 재기
  2. 가장 넓은 도로
  3. 서포트 벡터
  4. 새 점 판단
3C를 바꿔 보기 · 소프트 마진

데이터가 조금 겹치면 모든 점을 도로 밖에 둘 수 없습니다. 이때 C가 "넓은 도로"와 "침범 벌점" 사이의 균형을 정합니다. 슬라이더를 움직이면 SVM을 다시 풀어 결과를 그립니다.

왼쪽 0.03 ↔ 오른쪽 100 (로그 눈금)

5주요 특징
강점
  • 마진 최대화로 새 데이터에 대한 일반화 성능이 좋음
  • 서포트 벡터만 중요 → 해가 간결
  • 특성이 매우 많은 데이터(텍스트)에서 강함
한계
  • 기본적으로 확률을 주지 않음 (별도 보정 필요)
  • 특성 스케일에 민감 → 표준화 필수
  • 다중 클래스는 여러 SVM을 조합해야 함
쓰이는 곳: 문서·스팸 분류, 유전자 발현 데이터, 고차원 소규모 데이터
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

두 무리 사이에 넓은 도로를 냅니다. 도로 가장자리에 닿은 서포트 벡터는 3개 행뿐이고, 나머지 물고기는 경계에 영향을 주지 않습니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. SVM의 경계를 결정하는 점은?

Q2. C를 크게 하면?

07

커널 서포트 벡터 분류기Kernel SVC (Support Vector Classifier)

계보 Bx → φ(x), 공간을 들어 올림

1모델

직선으로 나뉘지 않는 데이터를 더 높은 차원으로 들어 올린 뒤, 그곳에서 선형 SVM을 적용하는 모델입니다. SVM이 방법론의 이름이라면 SVC는 그중 분류용 구현(예: scikit-learn의 SVC)을 가리킵니다.

파라미터 결정커널 공간 마진 최대
결정 경계곡선
하이퍼파라미터C, γ, 커널 종류

쉽게 말하면책상 위에 구슬이 섞여 있는데 파란 구슬은 가운데, 주황 구슬은 가장자리에 둥글게 놓여 있습니다. 자 하나로는 둘을 가를 수 없습니다. 그런데 가장자리 구슬일수록 높이 튀어 오르게 하면, 그 사이에 쟁반 하나를 수평으로 끼워 넣어 위아래로 가를 수 있습니다.

2수식
ŷ = sign( Σi αi yi K(xi, x) + b ),    K(xi, x) = φ(xi)·φ(x)
RBF 커널:   K(xi, x) = exp(−γ ‖x − xi‖²)두 점이 가까울수록 1, 멀수록 0에 가까운 "유사도"입니다.
다중:   클래스 쌍마다 SVC를 만들어 투표 (One-vs-One, K(K−1)/2개)
φ(x)
x를 고차원으로 보내는 변환. 예: φ(x₁, x₂) = (x₁, x₂, x₁² + x₂²)
αᵢ
각 학습 점의 영향력. 서포트 벡터만 αᵢ > 0
γ
한 점의 영향이 미치는 범위. 크면 좁고 뾰족함
수식 한 조각씩 읽기
  1. φ(x)x를 새 좌표로 옮기는 변환입니다. 예: (x₁, x₂) → (x₁, x₂, x₁² + x₂²)는 2차원 점에 "원점에서 떨어진 거리의 제곱"이라는 높이를 붙여 3차원으로 만듭니다.
  2. K(xi, x) = φ(xi)·φ(x)두 점을 옮긴 뒤의 내적, 즉 "새 공간에서 얼마나 비슷한가"입니다. 커널은 φ를 직접 계산하지 않고 이 값을 바로 구하는 지름길입니다.
  3. exp(−γ‖x − xi‖²)RBF 커널입니다. 거리가 0이면 e⁰ = 1, 멀어질수록 0에 가까워집니다. γ가 클수록 금방 0이 되어 영향 범위가 좁습니다. RBF의 φ는 무한 차원이라 직접 그릴 수 없고, 대신 점마다 세운 "언덕"으로 이해합니다.
  4. αi yi K(xi, x)서포트 벡터 i의 한 표 = (영향력 αi) × (클래스 +1 또는 −1) × (새 점과의 유사도)입니다.
  5. sign(Σ … + b)모든 서포트 벡터의 표를 더한 합이 양수면 +1 클래스, 음수면 −1 클래스입니다.
숫자로 한 번 해 보기γ = 1, 새 점과 A 쪽 서포트 벡터의 거리 0.5 → K = e−0.25 ≈ 0.78
B 쪽 서포트 벡터와의 거리 1.5 → K = e−2.25 ≈ 0.11
α가 모두 1이면 합 = (+1)×0.78 + (−1)×0.11 = 0.67 > 0 → A
3다이어그램 · 한 장으로 보기
커널 SVC원 공간에서 섞인 데이터를 z축을 추가해 들어 올리면 직선 하나로 분리 x₁x₂ 원 공간: 직선으로 분리 불가 φ(x) x₁z = x₁² + x₂² z = c 인 직선으로 분리 φ 공간: 선형 SVM 적용
4해석

왼쪽은 A가 가운데, B가 바깥을 둘러싼 데이터라 어떤 직선도 나눌 수 없습니다. 여기에 "원점에서 떨어진 거리의 제곱" z = x₁² + x₂²라는 새 축을 붙이면(φ), 가운데 점은 아래로, 바깥 점은 위로 벌어져 오른쪽처럼 가로선 하나로 나뉩니다. 그 가로선을 원래 평면으로 되돌린 것이 왼쪽의 원형 점선입니다.

커널 트릭: 실제로는 φ(x)를 계산하지 않고, 두 점의 유사도 K(xᵢ, x)만 계산해도 고차원에서의 내적과 같은 결과를 얻습니다. RBF 커널을 쓰면 서포트 벡터마다 가우시안 "언덕"을 세우고, 그 언덕들의 합의 부호로 분류하는 것과 같습니다.

선형 SVM과의 관계: 식에서 x를 φ(x)로 바꿨을 뿐, 마진을 최대화한다는 원리는 그대로입니다.

3움직이는 다이어그램 · 실제로 판단하는 과정

"들어 올리기"는 x₁² + x₂²라는 명시적인 φ로 차원을 올리는 예시(다항 커널 계열)이고, "RBF 언덕"은 실제 RBF 커널이 서포트 벡터마다 언덕과 구덩이를 더해 경계를 만드는 모습입니다.

보기

  1. 평면: 직선으로 불가
  2. φ로 들어 올리기
  3. 판 하나로 분리
  4. 되돌리면 원형 경계
  1. 서포트 벡터 준비
  2. 언덕·구덩이 더하기
  3. 합 = 0인 선이 경계
  4. 새 점 판단
5주요 특징
강점
  • 원형·나선형 등 복잡한 비선형 경계 표현
  • 중소규모 데이터에서 딥러닝 못지않은 성능
  • 마진 원리 덕분에 과적합에 비교적 강함
한계
  • 데이터가 수십만 개를 넘으면 학습이 매우 느림 (n² 이상)
  • C와 γ 조합에 성능이 크게 좌우됨
  • 어떤 공간에서 나눴는지 사람이 해석하기 어려움
쓰이는 곳: 필기체 숫자 인식(딥러닝 확산 이전 이미지 분류의 대표적 강자), 단백질 분류, 이미지 특징 분류
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

RBF 커널로도 100%입니다. 곡선이 필요 없는 짝이라 서포트 벡터 7개로 충분하고, 직선 모델과 차이가 없습니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. 커널 트릭의 핵심은?

Q2. RBF 커널에서 γ를 아주 크게 하면?

08

딥러닝: 다층 퍼셉트론Deep learning · Multi-layer perceptron (MLP)

계보 B의 끝φ를 사람이 아니라 학습으로

1모델

퍼셉트론(뉴런)을 옆으로 여러 개 놓아 층을 만들고, 그 층을 여러 겹 쌓은 모델입니다. 앞쪽 층이 데이터를 나누기 쉬운 형태로 바꾸고, 마지막 층이 소프트맥스 회귀로 클래스를 고릅니다.

파라미터 결정역전파 + 경사하강
결정 경계자유로운 곡선
출력클래스별 확률

쉽게 말하면공장 조립 라인과 같습니다. 첫 공정은 원자재를 다듬고, 다음 공정은 다듬은 부품을 조립하고, 마지막 검수원이 합격·불합격을 판정합니다. 불량이 나오면 검수원부터 첫 공정까지 거꾸로 거슬러 올라가며 각 공정의 방법(가중치)을 조금씩 고칩니다. 이 거꾸로 고치기가 역전파입니다.

2수식
h(1) = g(W(1)x + b(1)),    h(l) = g(W(l)h(l−1) + b(l))
P(y = k | x) = softmax(W(L)h(L−1) + b(L))k,    ŷ = argmaxk P(y = k | x)
f(x) = fL( … f2( f1(x) ) … ),    학습: W ← W − η ∂L/∂W전체는 층 함수들의 합성함수이고, 손실 L의 기울기는 연쇄법칙(역전파)으로 계산합니다.
W(l)
l번째 층의 가중치 행렬. 한 행 = 뉴런 하나(퍼셉트론 하나)의 w
g
활성화 함수. ReLU(z) = max(0, z), tanh 등
h(l)
l번째 층이 만든 새로운 특성 벡터
수식 한 조각씩 읽기
  1. h(l), W(l)위첨자 (l)은 제곱이 아니라 층 번호입니다. h(2)는 "2번째 층의 출력"입니다.
  2. W(1)x + b(1)행렬 곱입니다. 행 하나가 뉴런 하나의 w이므로, 퍼셉트론 여러 개의 w·x + b를 한꺼번에 계산합니다.
  3. g(z)활성화 함수입니다. ReLU(z) = max(0, z)는 음수를 0으로 바꾸고 양수는 그대로 둡니다. tanh는 값을 −1~1로 누릅니다.
  4. fL( … f2(f1(x)) … )합성함수입니다. 가장 안쪽 f₁부터 계산해 그 결과를 다음 함수에 넣습니다.
  5. W ← W − η ∂L/∂W∂L/∂W는 W를 아주 조금 바꿨을 때 손실 L이 얼마나 변하는지(기울기)입니다. 그 반대 방향으로 η만큼 움직이면 손실이 줄어듭니다.
숫자로 한 번 해 보기x = (1, 2), W₁의 한 행 = (0.5, −0.2), b = 0.1 → z = 0.5 − 0.4 + 0.1 = 0.2 → ReLU(0.2) = 0.2
다른 행에서 z = −0.3이 나오면 ReLU(−0.3) = 0. 이렇게 뉴런마다 계산한 값이 다음 층의 입력이 됩니다.
3다이어그램 · 한 장으로 보기
다층 퍼셉트론입력 2개, 은닉층 4개씩 두 층, 출력 3개 소프트맥스 x₁ x₂ A B C P(A)P(B)P(C) 입력층은닉층 1은닉층 2출력층 특성 변환 h(x)를 학습소프트맥스 회귀 x = (x₁, x₂)h₁ = g(W₁x + b₁)h₂ = g(W₂h₁ + b₂)p = softmax(W₃h₂ + b₃)
4해석

동그라미 하나하나가 04의 퍼셉트론이고, 선 하나하나가 가중치 w 하나입니다. 이 그림에만 가중치가 2×4 + 4×4 + 4×3 = 36개, 편향까지 47개의 빈칸이 있습니다.

초록 점선 상자(출력층)만 떼어 보면 05의 소프트맥스 회귀와 똑같습니다. 다른 점은 입력이 원래 데이터 x가 아니라 은닉층이 만든 새 특성 h(x)라는 것입니다. 07의 커널 SVC가 사람이 고른 φ(x)로 공간을 휘었다면, 딥러닝은 보라색 점선 상자(은닉층)의 가중치를 학습해 "직선으로 나누기 좋은 공간"을 스스로 찾습니다.

층이 깊어질수록 더 추상적인 특성이 만들어집니다. 이미지라면 앞층은 선과 모서리, 뒤층은 눈·바퀴 같은 부분, 마지막은 물체 전체를 알아봅니다.

3움직이는 다이어그램 · 실제로 판단하는 과정

왼쪽은 달 모양 두 무리를 학습하며 경계가 휘어지는 과정이고, 오른쪽은 그동안 가중치(선의 굵기와 색)가 바뀌는 신경망입니다. 학습이 끝나면 새 점이 층을 따라 계산되는 순전파를 보여 줍니다.

  1. 무작위 시작
  2. 역전파로 경계 휘기
  3. 학습 완료
  4. 새 점 순전파
!이 페이지의 신경망 세 개는 구조가 다릅니다

층의 수, 뉴런 수, 활성화 함수는 문제에 맞춰 고르는 설계 선택입니다. 구조가 달라도 계산 원리(곱하고, 더하고, 꺾기)와 학습 원리(역전파)는 같습니다.

그림구조은닉층 활성화출력목적
③ 정적 다이어그램2 → 4 → 4 → 3g (ReLU 등)소프트맥스, 3개 클래스전체 모양 보기
③ 움직이는 다이어그램2 → 6 → 6 → 1tanhσ, 2개 클래스 (소프트맥스와 같음)곡선 경계가 학습되는 과정
⑦·⑧ 연산 실습2 → 3 → 3ReLU소프트맥스, 3개 클래스숫자 하나하나 따라가기
5주요 특징
강점
  • 층과 뉴런이 충분하면 어떤 경계든 근사 가능 (보편 근사 정리)
  • 특성을 사람이 설계하지 않아도 데이터에서 학습
  • 이미지·음성·텍스트처럼 원시 데이터에서 압도적 성능
한계
  • 많은 데이터와 연산(GPU)이 필요
  • 왜 그렇게 판단했는지 설명하기 어려움 (블랙박스)
  • 층 수, 학습률 등 조정할 것이 많음
쓰이는 곳: 이미지 인식, 음성 인식, 번역, 대규모 언어 모델의 분류 헤드
🐟물고기로 보면 · 이 모델이 도미·빙어와 농어·로치를 가르는 방법
짝

100%입니다. 곡선을 만드는 능력이 필요 없는 문제입니다.

배경색은 모델의 판단(파랑 = 도미·농어 쪽, 주황 = 빙어·로치 쪽), 실선은 경계입니다. 점수는 이 페이지가 브라우저에서 직접 학습해 계산한 값입니다(층화 + 원본 단위 80:20 분할).

✓확인 문제

Q1. 은닉층에서 활성화 함수 g를 모두 빼면?

Q2. 딥러닝의 출력층(소프트맥스)은 어떤 모델과 수식이 같나요?

딥러닝 심화: 거대한 합성함수는 실제로 어떻게 계산되나

입력 2개 → 은닉 뉴런 3개(ReLU) → 클래스 3개(소프트맥스)인 작은 신경망으로, 순전파(예측)와 역전파(학습)를 숫자 하나하나까지 따라가 봅니다.

6수학 함수 vs 딥러닝
수학 시간의 합성함수
f(g(x)),   g(x) = 2x + 1,   f(u) = u²
  • 함수 두 개를 이어 붙여 (2x + 1)²을 만든다
  • 식과 계수를 사람이 정한다
  • 계수는 2, 1 두 개
  • 식을 보면 의미를 바로 읽을 수 있다
딥러닝
f3(f2(f1(x))),   fl(h) = g(Wlh + bl)
  • 같은 모양의 층 함수를 여러 번 이어 붙인다
  • 층의 모양만 정하고 W, b는 전부 학습
  • 계수가 수천 개(작은 모델)에서 수천억 개(대형 언어 모델)까지
  • 계수 하나하나의 의미를 사람이 읽기 어렵다

딥러닝은 새로운 수학이 아닙니다. "곱하고, 더하고, 꺾는다"는 계산을 층 단위로 엄청나게 많이 반복한 합성함수입니다.

한 층 = 퍼셉트론 여러 개를 한꺼번에 = 행렬 곱. 뉴런 3개가 각자 w·x + b를 계산하는 것을 행렬로 모으면 Wx + b 한 번의 계산이 됩니다. GPU가 딥러닝에 필요한 이유가 이 행렬 곱을 동시에 수천 개씩 처리하기 때문입니다.

왜 꺾어야(g) 하나? g가 없으면 W₃(W₂(W₁x)) = (W₃W₂W₁)x 가 되어, 층을 100개 쌓아도 결국 일차식 하나, 즉 직선 경계 하나로 합쳐집니다. ReLU(z) = max(0, z)처럼 0에서 한 번 꺾어 주는 것만으로 층마다 경계를 구부릴 수 있게 됩니다.

7순전파 따라가기: 입력이 확률이 되기까지
작은 신경망의 순전파입력 2개, ReLU 은닉 뉴런 3개, 소프트맥스 출력 3개. 선 굵기는 가중치 크기, 보라는 양수, 주황은 음수
양수 가중치음수 가중치선이 굵을수록 |w|가 큼
  1. 은닉층: 뉴런마다 퍼셉트론 계산(곱하기, 더하기) 후 ReLU로 음수를 0으로 꺾기
  2. 같은 계산을 행렬로 한 번에: h = ReLU(W₁x + b₁)
  3. 출력층 점수: 은닉값 h를 입력 삼아 클래스마다 다시 곱하고 더하기
  4. 소프트맥스: es를 구해 전체 합으로 나누면 합이 1인 확률
  5. 예측: 확률이 가장 큰 클래스
8역전파 따라가기: 틀린 만큼 거꾸로 나눠 고치기

학습은 네 단계의 반복입니다. ① 순전파로 확률 p를 구하고, ② 정답과 비교해 손실 L을 재고, ③ 각 가중치가 손실에 얼마나 책임이 있는지(기울기) 출력층부터 거꾸로 계산하고(역전파, 연쇄법칙), ④ 기울기 반대 방향으로 가중치를 조금 옮깁니다. 정답을 고르고 "학습 1회"를 눌러 보세요.

  1. 손실: 정답 클래스에 준 확률의 −log
  2. 출력층 오차 δ = p − y (예측 확률 − 정답 원-핫)
  1. 가중치 기울기: ∂L/∂W₂[k][j] = δₖ × hⱼ (오차 × 그 선으로 들어온 값)
  2. 갱신 결과
    아직 학습하지 않았습니다.

δ가 음수인 정답 클래스는 가중치가 커져 점수가 올라가고, δ가 양수인 오답 클래스는 점수가 내려갑니다. 은닉층 가중치 W₁도 같은 방식으로 δ를 한 층 더 거꾸로 전달해 함께 고칩니다(이 실습에서도 실제로 계산해 반영합니다).

09

한 장으로 잇기 — 여덟 모델을 같은 기준으로

칸을 누르면 해당 모델로 이동합니다. 두 계보는 출발점이 다르지만 모두 입력 x를 클래스 ŷ로 보내는 함수입니다.

입력
x = (x₁, …, xₙ)
계보 A · 평면을 규칙이나 거리로 나눈다
계보 B · z = w·x + b 에서 출발한다
출력
ŷ ∈ {1, …, K}

같은 기준으로 비교

모델함수의 모양파라미터를 정하는 방법결정 경계확률 출력해석 용이성
규칙 기반if Ruleⱼ(x) then cⱼ사람이 직접 작성축에 평행한 직선없음매우 쉬움
KNNargmax 투표 in Nₖ(x)없음 (데이터 저장)들쭉날쭉한 곡선투표 비율쉬움
의사결정나무Σ cₘ 𝟙(x ∈ Rₘ)지니 불순도 최소 분할축에 평행한 계단잎의 비율쉬움
퍼셉트론step(w·x + b)틀릴 때마다 w 수정직선없음보통
로지스틱 회귀softmax(Wx + b)교차엔트로피 최소 (경사하강)직선있음보통 (계수 해석)
선형 SVMsign(w·x + b)마진 최대 + 힌지손실직선 (마진 최대)없음 (보정 필요)보통
커널 SVCsign(Σ αᵢyᵢK(xᵢ,x) + b)커널 공간에서 마진 최대곡선없음 (보정 필요)어려움
딥러닝 (MLP)softmax(W₃ g(W₂ g(W₁x)))역전파 + 경사하강자유로운 곡선있음매우 어려움

핵심 세 줄

1. 모든 분류 모델은 입력 x를 클래스 ŷ로 보내는 함수 f이고, 모델의 차이는 함수의 모양, 파라미터를 정하는 방법, 결정 경계의 모양 세 가지입니다.
2. 퍼셉트론부터 딥러닝까지는 같은 선형식 z = w·x + b에서 출발해 출력 함수, 손실, 입력 공간, 그 공간을 정하는 주체를 하나씩 바꿔 온 계보입니다.
3. 딥러닝은 새로운 수학이 아니라 곱하고, 더하고, 꺾는 연산을 층으로 반복한 합성함수이며, 그 계수를 역전파로 학습합니다.

읽을 때 주의할 점. 다이어그램의 점 배치와 실습의 가중치·입력값은 원리를 보여 주기 위한 예시 값입니다. SVM 애니메이션의 방향 탐색은 이해를 돕기 위한 연출이며 실제 학습 방법이 아닙니다. 실제 데이터에서의 성능 순위는 데이터의 크기와 모양에 따라 달라집니다.

10

실무로 잇기 — 어떤 모델을 고를까

개념을 실제 도구로 옮기는 칸입니다. 상황별로 먼저 시도할 모델을 고르고, 같은 데이터로 여덟 모델을 직접 비교해 봅니다.

상황별 첫 선택

상황먼저 시도할 모델이유
판단 근거를 문장으로 설명해야 한다 (규제, 감사)규칙 기반 · 의사결정나무if-then으로 그대로 읽힙니다. 나무는 깊이를 제한해야 읽을 만합니다.
확률이 필요하고, 특성의 영향 방향을 알고 싶다로지스틱 회귀확률 출력과 계수 해석이 가능하고, 빠르고 안정적인 기준선입니다.
데이터가 수천 개 이하이고 경계가 복잡하다커널 SVC · KNN적은 데이터에서도 곡선 경계를 잘 잡습니다. 둘 다 스케일링이 필수입니다.
특성이 매우 많다 (텍스트, 유전자)선형 SVM · 로지스틱 회귀고차원에서는 직선 경계로도 충분한 경우가 많고, 학습이 빠릅니다.
표 형태 데이터에서 성능이 최우선이다나무를 여러 개 묶은 모델 (랜덤 포레스트, 그래디언트 부스팅)의사결정나무를 기본 블록으로 쓰며, 실무 표 데이터에서 가장 흔히 쓰입니다.
이미지, 음성, 긴 텍스트처럼 원시 데이터다딥러닝특성을 스스로 학습합니다. 데이터와 연산 자원이 많이 필요합니다.

물고기 7종으로 모델 비교하기 (scikit-learn)

이번에는 두 종이 아니라 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}")

실행 결과 (scikit-learn 1.8, CPU)

모델5겹 교차검증 정확도
기준선 (가장 많은 농어만 답하기)0.360
KNN (k=5)0.900 ± 0.033
의사결정나무 (깊이 5)0.723 ± 0.040
퍼셉트론0.921 ± 0.031
로지스틱 회귀0.899 ± 0.036
선형 SVM0.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

AI와 함께 바꿔 보기 — 풀버전 프롬프트Prompt

내려받은 코드를 내 데이터로 바꾸거나 다른 모델로 바꾸고 싶을 때, 아래 프롬프트를 복사해 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가 만든 코드도 이 원칙을 지켰는지 확인하세요.

Aa

용어 사전 — 비유로 보기Glossary

본문에서 점선 밑줄이 있는 단어를 누르면 같은 비유가 뜹니다. 여기서는 한꺼번에 훑어볼 수 있습니다.

본문에서 점선 밑줄이 있는 단어는 처음 나올 때마다 눌러서(또는 마우스를 올려서) 같은 비유를 볼 수 있습니다. 여기서는 한꺼번에 훑어볼 수 있습니다.

학습 과정

가중치

비유요리 레시피의 재료 비율. 소금을 두 배 넣으면 맛이 크게 바뀌듯, 가중치가 큰 입력이 판단을 크게 좌우합니다.

뜻입력 하나하나가 결과에 얼마나 영향을 주는지 나타내는 숫자. 학습이 찾아내는 대상입니다.

편향

비유체중계의 영점 나사. 아무것도 올리지 않았을 때 바늘이 가리키는 위치를 옮겨 줍니다.

뜻식 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에 씌우는 함수. 이것이 있어야 곡선 경계를 만들 수 있습니다.

ReLU

비유한쪽으로만 열리는 체크 밸브. 음수는 막고(0) 양수는 그대로 통과시킵니다.

뜻ReLU(z) = max(0, z).

tanh

비유양 끝이 막힌 시소. 아무리 밀어도 −1과 +1 사이에서만 움직입니다.

뜻값을 −1~1 사이로 누르는 S자 함수.

순전파

비유컨베이어 벨트. 원료가 첫 공정부터 마지막 공정까지 한 방향으로 흘러갑니다.

뜻입력에서 출력 방향으로 층을 차례로 계산하는 과정.

행렬 곱

비유반 학생 전체의 성적을 한 번에 채점하는 일괄 처리.

뜻퍼셉트론 여러 개의 w·x + b를 한꺼번에 계산하는 방법.

보편 근사 정리

비유레고 블록. 블록이 충분히 많으면 어떤 모양이든 흉내 낼 수 있습니다.

뜻은닉층의 뉴런이 충분하면 신경망이 어떤 연속 함수든 원하는 만큼 가깝게 흉내 낼 수 있다는 정리.

평가와 일반화

과적합

비유기출문제 답을 통째로 외운 학생. 기출은 만점이지만 처음 보는 문제는 못 풉니다.

뜻학습 데이터에는 잘 맞지만 새 데이터에서는 성능이 떨어지는 상태.

과소적합

비유교과서를 대충 훑어본 학생. 기출문제도, 새 문제도 못 풉니다.

뜻모델이 너무 단순해 학습 데이터조차 잘 맞히지 못하는 상태.

하이퍼파라미터

비유요리사가 미리 정하는 불 세기와 조리 시간. 재료(데이터)를 보고 저절로 정해지지 않습니다.

뜻학습 전에 사람이 정하는 설정값. k, 나무 깊이, C, γ, 학습률 등.

교차검증

비유문제지를 바꿔 가며 모의고사를 여러 번 보고 평균 내기. 한 번 운 좋게 잘 본 점수에 속지 않습니다.

뜻데이터를 k조각으로 나눠, 돌아가며 한 조각을 시험용으로 쓰고 점수를 평균 내는 평가 방법.

게으른 학습

비유시험 전에는 공부하지 않고, 문제를 받은 뒤에야 참고서를 뒤지는 학생.

뜻학습 단계에서는 계산하지 않고 예측할 때 계산하는 방식. KNN이 대표적입니다.

E-1 저자 소개

안상선 ((주)M-Robo 대표)

한국전기안전공사, 매일경제신문을 거쳐 현재 매일경제 사외벤처 (주)M-Robo를 창업해 대표로 재직하고 있다. (주)M-Robo는 언론사 사내 벤처로 시작한 미디어 벤처로, 국민일보에 로봇기자(스톡봇)을 서비스 했으며, 한국인터넷진흥원, 한국언론진흥재단, 한국방송통신전파진흥원 등에서 다수의 프로젝트를 진행했다. 이후 자체 A.I 뉴스 신문인 Money-Robo를 서비스 중이다. 대표 재직 중 아시아오픈 데이터 해커톤 우승, 데이터창업 분야 공로로 행정안전부 장관상을 2회 수상했으며, 인공지능 및 블록체인 분야에 대한 5개 특허 발명 및 등록자이다. 저서로는 “AI범죄와 자기방어”가 있으며, 핀테크분야, 통계학, 인공지능 분야에 대해서 한국기술교육대학교 온라인평생교육원 이러닝 콘텐츠 개발을 진행했다. 최종학위는 경제학 박사(동국대, 미시수리경제학)이다. 국민대학교, 호서대학교 등 여러 대학교에서 데이터 및 인공지능과 관련한 과목을 강의하고 있다. 자세한 프로필

강의

  • 안상선 (2025). 「비즈니스를 위한 데이터 과학」 강의안. 한국열린사이버대학교 인공지능융합학과.
  • 안상선 (2025). [K-디지털] 인공지능 자연어 처리. STEP(스마트직업훈련플랫폼), 한국기술교육대학교 온라인평생교육원.
  • 안상선 (2024). [K-디지털] 핀테크 데이터 분석 기초. STEP(스마트직업훈련플랫폼), 한국기술교육대학교 온라인평생교육원.

STEP 강의 바로가기: link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
사이트 개편으로 접속이 원활하지 않을 경우에는 www.step.or.kr로 접속 바랍니다.

논문과 발표

  • 안상선 (2025). 국민노후보장패널데이터를 활용한 가구지출 예측 모델 연구: 인공지능 모델 기반 접근. 「미래사회」, 16(2). 원문
  • 안상선 (2025). 국민노후보장패널데이터를 활용한 가구지출 예측 모델 연구: 인공지능 접근. 국민노후보장패널 학술대회 발표자료(2025.05.13), 국민연금공단 국민연금연구원. 발표자료
  • 안상선 (2025). SNS 텍스트 기반 마약 의심 거래 탐지 알고리즘에 대한 연구: 패턴 및 맥락 분석을 중심으로. 「미래사회」, 16(1). 원문
  • 안상선 (2024). 금융분야의 이상탐지 모델 보안을 위한 통계 기반의 적대적 데이터 대응 방안: 실증적 분석과 시뮬레이션 결과. 「미래사회」, 15(3). 원문
  • 안상선 (2024). 인공지능을 활용한 가상 캐릭터 특성 기반 SNS 포스팅 탐지 솔루션. 2024 Summer Newmedia Party 포스터 발표(2024.06.19), 서울미디어대학원대학교.
  • 안상선 (2024). 산업재해 패널 데이터를 활용한 머신러닝 모델. 제10회 산재보험패널 학술대회 포스터 발표(2024.05.17), 근로복지공단 근로복지연구원.
  • 안상선 (2024). 가상 자산 시계열 데이터의 분석과 예측: 시계열 모델 및 인공지능 모델의 비교, 개선점 제시. 「미래사회」, 15(1). 원문

수고하셨습니다!

「1 분류 모델은 모두 하나의 함수다」 편을 끝까지 읽었어요. 연구실 식구들이 한마디씩 정리해 드립니다.

박사
박사물고기 한 쌍을 여덟 모델로 갈라 봤어요.
  • 쉬운 짝(도미·빙어)은 여덟 모델 모두 시험 정확도 1.000이다
  • 어려운 짝(농어·로치)은 0.262(퍼셉트론)부터 0.792(MLP)까지, 기준선은 0.738이다
  • 두께를 세 번째 축으로 더하면 로지스틱 회귀가 0.785에서 0.852로 오른다
조수
조수쉬운 짝은 다 맞혔는데 어려운 짝은 기준선 근처라니!
초파리 연구원
초파리 연구원모델 탓만 하지 마. 꼬리 길이를 보라고.