머신러닝 알고리즘의 학습 원리를 한 번에 정리했어요. 지도·비지도·강화학습 구분부터 선형회귀·결정트리·K-means·SVM의 직관, 손실함수→경사하강법→역전파로 이어지는 ‘학습의 실체’, 과적합 처방전, 그리고 전부 무료로 공부하는 법까지 담았습니다.
머신러닝 알고리즘, model.fit() 한 줄이면 되는데 원리를 왜 알아야 할까요?
“요즘 누가 수식 보면서 공부해요, Scikit-learn 다섯 줄이면 모델 돌아가는데”라고 생각하셨다면, 절반만 맞는 얘기예요. 모델이 돌아가는 것과 모델이 왜 그렇게 예측했는지 설명하는 것은 완전히 다른 문제거든요. 면접에서, 장애 대응에서, 성능 개선 회의에서 갈리는 지점은 언제나 후자였습니다.
머신러닝 독학 연재 4화입니다. 지난 스타 3.2k GitHub 자료집 로드맵 정리에서 7단계 중 3단계로 소개했던 ‘ML 알고리즘 원리’를 이번 화에서 본격적으로 풀어볼게요. 이 글만 읽어도 완결되도록 구성했습니다. 😊
⚡ 이 글의 핵심만 먼저 보기 (Key Takeaways)
- 학습 방식 구분: 정답(라벨)이 있으면 지도학습, 없으면 비지도학습, 보상으로 배우면 강화학습 — 이 한 줄이 전체 지도의 뼈대예요.
- 5대 알고리즘 직관: 선형회귀는 ‘선 긋기’, 로지스틱은 ‘확률 문턱’, 결정트리는 ‘스무고개’, KNN은 ‘이웃 투표’, K-means는 ‘무리 짓기’로 기억하면 안 잊혀요.
- 학습의 실체: 손실함수로 틀린 정도를 재고, 경사하강법으로 내리막을 찾고, 역전파로 책임을 나눠 갖는 3단계가 딥러닝까지 관통합니다.
- 과적합 처방전: 훈련 점수 99%·검증 점수 70%면 암기한 것 — 정규화와 교차검증이 기본 처방이에요.
- 0원 학습 루트: Andrew Ng 코세라 강의는 ‘청강(Audit)’ 모드로 무료, 실습은 Scikit-learn 공식 튜토리얼 5줄 코드로 바로 시작할 수 있어요.
📌 목차
- 지도·비지도·강화학습, 표 한 장으로 끝내기
- 머신러닝 알고리즘 5가지, 수식 없이 직관으로
- 모델이 ‘학습된다’는 것의 실체: 손실함수→경사하강법→역전파
- 과적합·과소적합과 처방전: 정규화와 교차검증
- 전부 무료로 공부하는 법: Andrew Ng 청강 + 5줄 실습
- 이런 분들께 적극 추천합니다
- 자주 묻는 질문 (FAQ)
1. 지도·비지도·강화학습, 표 한 장으로 끝내기
구분 기준은 딱 하나, 정답표(라벨)의 유무예요. 문제집에 답지가 붙어 있으면 지도학습, 답지 없이 데이터끼리 묶어보면 비지도학습, 시행착오의 보상으로 배우면 강화학습입니다.
| 구분 | 배우는 방식 | 대표 알고리즘 | 현업 예시 |
|---|---|---|---|
| 지도학습 | 정답이 달린 데이터로 학습 | 선형/로지스틱 회귀, 결정트리, KNN, SVM | 스팸 분류, 가격 예측, 이탈 예측 |
| 비지도학습 | 정답 없이 구조·패턴 발견 | K-means, PCA | 고객 세그먼트, 이상 탐지 |
| 강화학습 | 행동→보상 피드백으로 학습 | Q-learning, PPO | 게임 AI, 추천 최적화, RLHF |
여기서 핵심이 있어요. 실무 문제의 8할은 지도학습이고, 나머지 대부분이 비지도학습이에요. 그래서 입문 단계에서는 지도학습 알고리즘의 직관을 잡는 데 시간을 가장 많이 쓰는 게 효율적입니다.
2. 머신러닝 알고리즘 5가지, 수식 없이 직관으로
① Linear / Logistic Regression — 선 긋기와 확률 문턱
선형회귀는 점들 사이에 가장 그럴듯한 직선 하나를 긋는 일이에요. “평수가 1평 늘면 집값이 얼마 오르는가”처럼 숫자를 예측합니다. 로지스틱 회귀는 그 직선 결과를 0~1 사이 확률로 구부려서 “스팸일 확률 92% → 스팸”처럼 분류로 바꾼 거고요. 이름에 ‘회귀’가 붙었지만 실제로는 분류에 쓰인다는 게 입문자들이 가장 많이 헷갈리는 포인트예요.
직접 5줄로 돌려보면 감이 옵니다. 먼저 pip install scikit-learn으로 설치하면 별도 데이터 파일 없이 내장 데이터셋으로 바로 실습할 수 있어요.
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=0)
model = LogisticRegression(max_iter=5000).fit(X_tr, y_tr)
print(model.score(X_te, y_te)) # 0.95 안팎
load_breast_cancer는 유방암 진단 데이터(악성/양성)라 로지스틱 회귀로 바로 이진 분류가 됩니다. .fit()으로 학습하고 .score()로 정확도를 확인하는 이 흐름이 거의 모든 scikit-learn 모델에 똑같이 반복돼요. 데이터를 train_test_split으로 나눠 ‘본 적 없는’ 테스트셋에서 점수를 재는 것까지가 한 세트입니다.
② Decision Tree / KNN — 스무고개와 이웃 투표
결정트리는 스무고개예요. “나이가 30 이상인가? → 예 → 연소득이 5천 이상인가?”처럼 질문을 거듭해 답에 도달합니다. 규칙이 눈에 보여서 설명이 쉬운 대신, 깊어질수록 훈련 데이터를 통째로 암기하는 경향이 있어요. KNN은 더 단순해서, 새 데이터가 오면 가장 가까운 이웃 K명에게 물어보고 다수결로 정합니다. 학습이라 할 게 거의 없는 대신 데이터가 커지면 예측이 느려져요.
둘 다 클래스명만 바꾸면 똑같이 돌아가요. 붓꽃 데이터(load_iris)로 결정트리와 KNN을 나란히 세워보면 .fit() → .predict() → .score() 흐름이 손에 익습니다.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=0)
for clf in (DecisionTreeClassifier(max_depth=3), KNeighborsClassifier(n_neighbors=5)):
clf.fit(X_tr, y_tr)
print(type(clf).__name__, clf.predict(X_te[:3]), clf.score(X_te, y_te))
모델 객체만 바꿔 끼우면 나머지 코드는 그대로라는 게 scikit-learn의 핵심 설계예요. 알고리즘을 갈아 끼우는 비용이 거의 0이라, 여러 개를 같은 데이터에 돌려 점수를 비교하는 습관을 들이기 좋습니다.
③ K-means / SVM — 무리 짓기와 경계선 긋기
K-means는 정답 없이 데이터를 K개의 무리로 묶어요. 중심점을 찍고 → 가까운 점들을 배정하고 → 중심을 다시 옮기는 과정을 반복하는 것뿐입니다. SVM은 두 집단 사이에 경계선을 긋되, 양쪽에서 가장 여유 있게(마진 최대) 긋는 알고리즘이에요. 데이터가 적고 차원이 높을 때 의외로 강해서, 딥러닝 이전 시대의 챔피언이었습니다.
| 알고리즘 | 강한 상황 | 약한 상황 | 대표 파라미터 |
|---|---|---|---|
| 로지스틱 회귀 | 선형 분리·계수 해석이 필요할 때 | 복잡한 비선형 경계 | C(정규화 강도) |
| 결정트리 | 규칙 설명·범주형 혼합 피처 | 단독 사용 시 과적합 | max_depth |
| KNN | 소규모·저차원 데이터 | 대용량·고차원(예측 느림) | n_neighbors |
| K-means | 라벨 없는 군집 탐색 | 군집 수 미지·비구형 분포 | n_clusters |
| SVM | 표본 적고 차원 높을 때 | 대용량(학습 느림) | C, kernel |
알고리즘마다 어떤 데이터에 강하고 약한지를 표로 정리해두는 습관이 실전에서 제일 큰 자산이 되더라고요. 저는 새 알고리즘을 배울 때마다 ‘강한 상황 / 약한 상황 / 대표 파라미터’ 세 칸짜리 표를 하나씩 추가하고 있어요.
3. 모델이 ‘학습된다’는 것의 실체: 손실함수→경사하강법→역전파
1) Loss → Gradient Descent → Backpropagation — 3단계 큰 그림
모든 학습형 머신러닝 알고리즘은 결국 이 루프 하나입니다.
예측하기 → 손실함수로 "얼마나 틀렸나" 측정
→ 경사하강법으로 "어느 방향으로 고칠까" 결정
→ 역전파로 "누구 책임이 얼마인가" 배분
→ 가중치 업데이트 → (반복)
손실함수는 채점표, 경사하강법은 안개 낀 산에서 발밑 경사만 보고 한 걸음씩 내려가는 하산법, 역전파는 팀 프로젝트가 망했을 때 각자의 기여도만큼 책임을 나누는 회고예요. 학습률(learning rate)은 보폭이라, 너무 크면 계곡을 건너뛰고 너무 작으면 하산에 하세월이 걸립니다. 이 그림 하나가 선형회귀부터 GPT까지 그대로 이어진다는 게 놀라운 부분이에요.
학습률(learning rate)을 바꿔가며 직접 돌려보면 ‘보폭’의 의미가 체감돼요. SGDClassifier의 eta0를 극단적으로 키우거나 줄여 점수가 어떻게 무너지는지 확인해보세요.
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_val_score
X, y = load_breast_cancer(return_X_y=True)
for lr in (1e-5, 1e-2, 10.0):
m = SGDClassifier(eta0=lr, learning_rate="constant", max_iter=1000)
print(lr, cross_val_score(m, X, y, cv=5).mean())
학습률이 너무 작으면 수렴이 덜 돼 점수가 낮고, 너무 크면 최소점을 건너뛰어 점수가 요동칩니다. 손실이 발산할 때 가장 먼저 학습률을 10분의 1로 줄여보라는 조언이 왜 정석인지 코드로 바로 확인되는 지점이에요.
4. 과적합·과소적합과 처방전: 정규화와 교차검증
1) Overfitting vs Underfitting — 암기와 백지
과적합은 기출문제를 통째로 암기해서 모의고사는 만점, 수능은 폭망하는 학생이에요. 훈련 정확도 99%에 검증 정확도 70%라면 이 상태입니다. 과소적합은 반대로 공부량 자체가 부족해서 둘 다 낮은 상태고요. 진단은 간단해요. 훈련 점수와 검증 점수의 간격을 보면 됩니다.
2) Regularization & Cross-Validation — 두 가지 기본 처방
정규화(L1/L2)는 가중치가 지나치게 커지면 벌점을 줘서 모델이 ‘외우지 못하게’ 막는 장치예요. 교차검증(K-Fold)은 데이터를 K조각으로 나눠 돌아가며 시험 보게 해서, 운 좋게 쉬운 문제만 걸린 점수에 속지 않게 해줍니다. 이게 생각보다 중요한 이유가 있어요. 캐글이든 실무든, 리더보드 점수와 실제 배포 성능의 괴리는 대부분 검증 설계 실패에서 나오거든요.
과적합은 말보다 숫자로 보면 확실해요. 결정트리의 max_depth를 키우면 훈련 점수는 1.0에 붙는데 교차검증 점수는 오히려 떨어지는 걸 직접 볼 수 있습니다.
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
X, y = load_breast_cancer(return_X_y=True)
for d in (1, 3, 10, None):
m = DecisionTreeClassifier(max_depth=d, random_state=0)
print(d, cross_val_score(m, X, y, cv=5).mean())
깊이를 무작정 늘릴수록 교차검증 점수가 정점을 찍고 내려오는 지점, 그게 과적합이 시작되는 경계예요. cross_val_score 한 줄이 리더보드 점수와 실제 성능의 괴리를 미리 잡아주는 안전장치가 됩니다.
5. 전부 무료로 공부하는 법: Andrew Ng 청강 + 5줄 실습
1) Andrew Ng Coursera — 결제 화면에서 ‘Audit’을 찾으세요
이 파트의 정석은 여전히 Andrew Ng의 Machine Learning Specialization이에요. 코세라 등록 화면에서 결제 대신 하단의 ‘Audit the course(청강)’를 선택하면 강의와 자료를 무료로 볼 수 있습니다(수료증만 유료). 영어가 부담이면 김성훈 교수님의 ‘모두를 위한 머신러닝/딥러닝’이 같은 내용을 한국어로 다뤄요. 개념 그림은 3Blue1Brown과 StatQuest 영상으로 보충하면 완벽합니다.
2) Scikit-learn — 알고리즘마다 5줄씩 직접 돌려보기
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
model = LogisticRegression()
print(cross_val_score(model, X, y, cv=5).mean())
오늘 배운 알고리즘을 이 틀에서 클래스명만 바꿔가며(DecisionTreeClassifier, KNeighborsClassifier, KMeans, SVC) 같은 데이터에 돌려보세요. 점수 차이가 눈에 보이는 순간, “어떤 데이터에 어떤 머신러닝 알고리즘이 강한가”가 몸으로 이해됩니다. 이론 1시간 + 실습 20분 조합이 이론만 3시간보다 확실히 오래 남더라고요. 🙂
강의(청강)로 개념을 듣고, 그 자리에서 위 5줄 틀에 클래스명만 바꿔 같은 데이터로 점수를 비교하는 게 가장 빠른 학습 루프예요. Andrew Ng 강의에서 로지스틱 회귀 단원을 들은 날 load_breast_cancer에 LogisticRegression과 DecisionTreeClassifier를 나란히 돌려보면, ‘어떤 데이터에 뭐가 강한가’가 이론이 아니라 손끝의 경험으로 남습니다.
6. 이런 분들께 적극 추천합니다
- Scikit-learn 코드는 돌릴 줄 알지만 “왜 되는지”는 설명 못 해 불안한 주니어 개발자
- ML 면접에서 경사하강법·과적합 질문에 막혀본 취업 준비생
- PyTorch·TensorFlow로 넘어가기 전에 기초 원리를 다지고 싶은 독학러
- 모델 결과를 비즈니스 언어로 해석해야 하는 데이터 분석가
- 부트캠프 비용 없이 0원으로 커리큘럼을 짜고 싶은 직무 전환 준비생
- 팀원에게 ML 기초를 설명할 비유가 필요한 스터디 리더
7. 자주 묻는 질문 (FAQ)
Q. 수학을 못하는데 알고리즘 원리 공부가 가능한가요?
A. 수식 증명부터 시작하면 어렵지만, 이 글처럼 직관 먼저 잡으면 충분히 가능해요. 순서는 직관(비유) → 코드 실습 → 필요할 때 수식 순입니다. 벡터·미분·확률 기초만 있으면 입문 단계는 문제없고, 부족한 부분은 3Blue1Brown 영상으로 그때그때 채우면 됩니다.
Q. 딥러닝 시대에 SVM·KNN 같은 고전 알고리즘을 배울 필요가 있나요?
A. 시간 낭비 같아 보이지만 오히려 반대예요. 정형 데이터(표 형태)에서는 지금도 트리 계열이 딥러닝을 이기는 경우가 흔하고, 손실함수·경사하강 개념은 고전 알고리즘에서 배운 게 딥러닝에 그대로 이어집니다. 작은 모델에서 원리를 익히는 게 가장 빠른 지름길이에요.
Q. Andrew Ng 강의 청강이 정말 무료인가요?
A. 네, 강의 시청과 읽기 자료는 무료입니다. 코세라 등록 시 결제 화면에서 ‘Audit the course’를 선택하면 되고, 유료인 건 수료증과 채점형 과제뿐이에요. 과제는 Scikit-learn 튜토리얼로 직접 대체하면 학습 효과는 오히려 더 좋습니다.
✍️ 글을 마치며
머신러닝 알고리즘 공부의 핵심은 종류를 외우는 게 아니라, 손실을 줄이는 방향으로 조금씩 움직인다는 학습의 큰 그림 하나를 잡는 거예요. 그 그림 위에 알고리즘별 ‘강한 데이터/약한 데이터’ 표를 쌓아가면 프레임워크는 도구일 뿐이라는 게 보이기 시작합니다.
저는 오늘 소개한 5줄 실습 틀로 같은 데이터에 알고리즘 4개를 돌려 점수를 비교하는 것부터 해볼 것 같아요. 이론과 직관이 연결되는 가장 빠른 순간이 바로 거기서 나오거든요.
여러분은 어떤 알고리즘 비유가 가장 와닿으셨나요? 댓글로 자유롭게 의견 남겨주세요! 😊