[Zero to ML Master #11] 머신러닝에 수학이 왜 필요할까? — 라면과 요리로 보는 AI 수학 공부법 (파이썬 20줄 맛보기)

오톨로리즘·3일 전
post-thumbnail

요즘은 코드 세 줄이면 분류 AI가 돌아갑니다. model.fit() 한 줄이면 학습 끝이죠. 그런데 이런 순간이 반드시 옵니다. 😰 "정확도가 50%에서 안 올라가요." "손실이 nan이 됐어요." "학습률을 바꿨더니 폭발했어요."

라면 봉지 뒷면의 레시피만 따라도 맛있는 라면은 나오지만, 물이 넘치거나 면이 불었을 때 왜 그런지는 알려 주지 않습니다. 01권의 첫 글에서는 AI에 왜 수학이 필요한지, 어떤 순서로 공부하면 되는지 정리하고, 00권 여섯 장을 20줄 코드로 다시 맛봅니다.

📘 이 글은 위키독스 도서 Zero to 머신러닝 딥러닝 Master 의 01-01 왜 수학인가? — 요리를 배울 것인가? 라면만 끓이다 갈 것인가! 을 블로그용으로 다듬은 글입니다.
💻 실습 코드: GitHub · 🏠 mldict.net · ✍️ 기술 블로그

💻 이 글의 코드: 01-01-why-math · Open in Colab — 핵심 코드와 실제 실행 결과는 글 아래 💻 GitHub 실습 섹션에 있습니다.

⬅️ 이전 글: #10 SVD 추천 시스템부터 미니 신경망(XOR)까지 — 수포자 수학 6개 장 총정리 (2부) \
➡️ 다음 글: #12 머신러닝 수식 읽는 법 — 그리스 문자·수학 기호 사전과 읽기 규칙 10가지 (ML 공식 100선, 1부)

TL;DR — 3줄 요약

  • model.fit()은 라면 끓이기입니다. 훌륭한 시작이지만, 문제가 생겼을 때 진단하려면 원리를 알아야 합니다.
  • 공부 순서는 운전 → 계기판 읽기 → 보닛 열기 → 정비입니다. 엔진부터 뜯지 않고, 궁금해질 때 한 겹씩 엽니다.
  • 이 책을 관통하는 습관은 수식 → 파이썬 코드 → 실행으로 검증입니다. 무섭게 생긴 수식도 결국 코드 한 줄이에요.

📚 01권 소개 — 수포자들을 위한 머신러닝 수학 완전기초와 파이썬 맛보기

📐 입문 기초 수학

수학이 두렵다고요? 괜찮아요! 이 챕터는 덧셈·뺄셈부터 시작해서
머신러닝에 꼭 필요한 수학까지 차근차근 안내합니다.
그리스 문자부터
벡터·
행렬·
미분·
적분·
통계까지 —
*인공지능을 위한 기초수학*(이상구·이재화) 교재와 함께 학습합니다.
전 13챕터 · 완전 입문

📋 챕터 목록

  • 01-01 왜 수학인가? — AI와 수학의 연결 → #11
  • 01-02 그리스 문자와 수학 기호 — ML 수식의 알파벳 → #12 · #13
  • 01-03 벡터 — 방향과 크기를 가진 화살표 → #14
  • 01-04 행렬 — 숫자를 표로 정리하기 → #15
  • 01-05 행렬내적·외적·유사도 행렬 → #16
  • 01-06 연립방정식·행렬식·역행렬 → #18
  • 01-07 고유값·고유벡터·대각화·SVD → #22
  • 01-08 함수와합성함수 — 딥러닝의 구조 → #23
  • 01-09 미분기초 — 순간 변화율과 경사 → #24
  • 01-10 편미분· 그래디언트 ·경사하강법 → #25 · #26
  • 01-11 적분 — 넓이와 확률의 수학 → #27 · #28
  • 01-12 확률과통계기초 — 불확실성을 숫자로 → #29 · #30
  • 01-13 ML 수학 연결 총정리 — 모든 것을 이어서! → #31 · #32


✏️ 꼭 알아야 할 TIP

🎯 이 책의 목표: 여러분을 수학자로 만드는 것이 아닙니다. AI 코드를 읽다가 만나는 수식 앞에서 "아, 이건 내적이구나"라고 알아보게 만드는 것입니다.

🍜 한 줄 비유: model.fit() 한 줄로 AI를 돌리는 것은 라면 끓이기입니다. 훌륭한 시작이죠. 하지만 면이 불었을 때 왜 그런지 알려면 조금 더 알아야 합니다.

🔑 이 책 전체를 관통하는 한 가지 습관:

수학 공식  ⟶  파이썬 코드  ⟶  실행으로 검증\text{수학 공식} \;\longrightarrow\; \text{파이썬 코드} \;\longrightarrow\; \text{실행으로 검증}

모든 장에서 손으로 유도한 식을 코드로 옮기고, 그 결과가 맞는지 확인합니다. 이 사이클이 몸에 배면 어떤 논문도 두렵지 않습니다.

⏱️ 필요한 것: 초등학교 수준의 사칙연산과 파이썬을 설치할 의지. 그게 전부입니다.

🚗 학습 순서: 운전 → 계기판 읽기 → 보닛 열기 → 정비. 처음부터 엔진을 뜯지 않습니다. 2단계에서 자세히 안내합니다.

📋 선행지식 (Prerequisites)

  • ➕ 사칙연산(더하기·빼기·곱하기·나누기) — 정말로 이것만 있으면 됩니다
  • 🔢 괄호와 분수를 읽을 수 있는 정도 — 예: 34\frac{3}{4}, (2+3)×4(2+3)\times4
  • 💻 컴퓨터에 프로그램을 설치해본 경험 — 없어도 4단계에서 처음부터 안내합니다
  • 🚫 필요 없는 것: 고등학교 미적분, 대학 선형대수, 프로그래밍 경력

💬 ※ "수포자였다"는 분들을 기준으로 쓰인 책입니다. 모르는 기호가 나오면 그 자리에서 바로 설명합니다.

🎯 학습 목표

☐ 🍜 AI를 배우는 데 왜 수학이 필요한지 라면과 요리의 비유로 설명할 수 있다 🟢 초급

☐ 🚗 운전 → 정비의 4단계 학습 로드맵에서 자신의 현재 위치를 말할 수 있다 🟢 초급

☐ 🗺️ 여섯 개 장이 각각 무엇을 다루고 어떻게 이어지는지 설명할 수 있다 🟢 초급 ⭐

☐ 🛠️ 파이썬과 NumPy 환경을 설치하고 정상 동작을 확인할 수 있다 🟢 초급

☐ 🔬 이 책의 핵심 습관인 "수식 → 코드 → 검증" 사이클을 직접 한 번 돌려볼 수 있다 🔵 중급 ⭐

☐ 🎬 여섯 장의 내용을 20줄짜리 코드 한 편으로 미리 맛보고, 각 줄이 어느 장 내용인지 짚을 수 있다 🔵 중급 🚀

📊 핵심 학습 내용

단계학습 내용핵심 질문결과
1️⃣🍜 라면과 요리왜 수학이 필요한가?배움의 동기가 생긴다
2️⃣🚗 운전에서 정비까지어떻게 공부할 것인가?4단계 로드맵을 얻는다
3️⃣🗺️ 여섯 개의 재료무엇을 배우게 되는가?전체 지도를 갖는다
4️⃣🛠️ 부엌 차리기무엇을 준비하는가?파이썬·NumPy가 돌아간다
5️⃣🎬 20줄 맛보기수식이 코드가 되는가?여섯 장을 미리 체험한다

📍 01-01-A · 1단계 — 🍜 왜 수학이 필요한가: 라면과 요리

🔎 ① 핵심 질문 — 라이브러리만 쓰면 안 되나요?\
요즘은 코드 세 줄이면 이미지 분류 AI가 돌아갑니다.

🐍 Python — "라면 끓이기" 수준의 코드

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()      # 모델 준비
model.fit(X_train, y_train)       # 학습 — 이 한 줄이 전부!
print(model.score(X_test, y_test))  # 정확도 확인

🔗 GitHub에서 코드 보기 — 01_01_why_math.py L12–L16

이것만으로도 대단합니다. 진심으로요. 😊 그런데 이런 순간이 반드시 옵니다.

  • 😰 "정확도가 50%에서 안 올라가요. 뭘 고쳐야 하죠?"
  • 😵 "손실이 nan이 됐어요. nan이 뭐죠?"
  • 🤔 "논문에 ∂L∂w\frac{\partial L}{\partial w}라고 쓰여 있는데 이게 코드 어디죠?"
  • 😱 "학습률을 0.1에서 1.0으로 바꿨더니 갑자기 폭발했어요."

이 질문들에 답하려면 레시피 뒷면에 없는 것을 알아야 합니다.

💜 더 쉽게 이해하기 — 🍜 라면과 요리

라면 봉지 뒷면에는 이렇게 쓰여 있습니다.\
"물 550ml를 끓인 후 면과 스프를 넣고 4분 30초간 더 끓입니다." 🍜

이 레시피만 따라도 맛있는 라면이 나옵니다. 훌륭하죠. 그런데 이런 일들이 생깁니다.

🌊 물이 넘쳤다 → 왜 넘치지? 불을 줄여야 하나, 뚜껑을 열어야 하나?\
🍝 면이 불었다 → 4분 30초를 지켰는데 왜?\
🥚 계란을 넣고 싶다 → 언제 넣어야 하지? 처음? 마지막?\
👥 3인분을 끓여야 한다 → 물도 3배? 시간도 3배?

레시피에는 "물 550ml"만 있지, "왜 550ml인지"는 없습니다. 하지만 "면이 물을 흡수해 전분이 풀리는 데 필요한 양"이라는 원리를 알면, 3인분일 때 물을 정확히 얼마 넣을지 스스로 판단할 수 있습니다. 🧠

요리를 할 줄 아는 사람은 레시피가 없어도 냉장고 속 재료로 새 음식을 만듭니다. 👨‍🍳 그 차이가 이 책이 채우려는 간격입니다.

📖 비유를 AI에 그대로 대입하면

단계🍜 라면 / 요리에서🤖 AI에서필요한 지식
① 레시피 따라하기물 550ml, 4분 30초model.fit() 호출없음 (튜토리얼만)
② 미세 조정"면발 꼬들하게" 30초 덜 끓임학습률·에폭 수 조정🌫️ 미분 (00-04)
③ 문제 진단물이 넘치는 원인을 앎손실이 nan인 이유를 앎🏥 확률·수치안정성 (00-05)
④ 재료 이해계란을 언제 넣을지 앎층·활성화 함수 선택📋 행렬 (00-02)
⑤ 새 요리 창작레시피 없이 요리함논문 구현·손실 함수 설계🎒 여섯 장 전부

⚠️ 오해하지 마세요 — "라면은 나쁘다"는 말이 절대 아닙니다.\
바쁜 날엔 저도 라면을 끓입니다. 🍜 실무에서도 대부분의 시간은 라이브러리를 씁니다. 매번 신경망을 NumPy로 짜는 사람은 없습니다.\
\
핵심은 "라면만 끓일 줄 아는 사람"과 "요리도 할 줄 아는데 오늘은 라면을 끓이는 사람"의 차이입니다. 평소엔 똑같아 보이지만, 문제가 생겼을 때 완전히 달라집니다. 🔧

💡 직관적 의미\
수학은 AI의 "성분표"이자 "조리 원리"입니다. 몰라도 먹을 수는 있지만, 알면 맛을 조절할 수 있습니다. 그리고 이 책이 다루는 여섯 가지는 소금·설탕·불 조절 수준의 가장 기초적인 재료일 뿐입니다. 미슐랭 셰프가 될 필요는 없습니다. 😊

🛠️ 실습 1 🟢 — 종이와 펜만 있으면 됩니다

① 최근에 AI/코딩을 하다가 "왜 이렇게 되지?"라고 막혔던 순간을 하나 적어보세요.\
② 그것이 위 표의 ①~⑤ 중 어느 단계의 문제였는지 표시해보세요.\
③ 그 단계에 필요한 장(00-02, 00-04, 00-05 …)을 확인하고, 책갈피를 꽂아두세요. 📑\
→ 이 책을 다 읽은 뒤 그 문제로 돌아오면, 답이 보일 것입니다.

📍 01-01-B · 2단계 — 🚗 어떻게 공부할 것인가: 운전에서 정비까지

🔎 ① 핵심 질문 — 어디서부터 시작해야 하나요?\
수학책을 펴자마자 1페이지부터 순서대로 읽으려다 3일 만에 포기한 경험, 있으신가요? 😅 그건 여러분 잘못이 아닙니다. 순서가 틀렸기 때문입니다.

💜 더 쉽게 이해하기 — 🚗 아무도 엔진부터 배우지 않는다

운전을 배울 때를 떠올려보세요. 운전학원에서 첫날부터 엔진 실린더의 압축비를 가르치던가요? 🔧

아닙니다. 핸들 잡는 법, 브레이크 밟는 법부터 배웁니다. 자동차가 어떻게 굴러가는지 몰라도 운전은 할 수 있으니까요. 🚙

그런데 운전을 오래 하다 보면 자연스럽게 더 알고 싶어집니다.\
🔴 "이 경고등은 무슨 뜻이지?" → 계기판을 배우게 되고\
🔊 "이상한 소리가 나는데?" → 보닛을 열어보게 되고\
⚡ "출력을 더 올리고 싶은데?" → 정비와 튜닝을 배우게 됩니다

수학도 똑같습니다. AI를 먼저 굴려보고, 궁금해질 때 그 부분의 원리를 배우는 것 — 그게 가장 빠른 길입니다. 이 책은 그 순서로 쓰였습니다. 🛣️

🔢 진행 과정 — 4단계 학습 로드맵

운전면허에서 정비사까지 — 4단계 학습 로드맵

📖 각 단계에서 실제로 무엇을 하나

단계🚗 자동차에서🤖 AI에서대응 장
🚙 ① 운전핸들·페달 조작 목적지까지 감데이터를 숫자로 정리하고 모델에 넣어 돌려봄00-01 벡터 00-02 행렬
🔴 ② 계기판경고등이 뜨면 무슨 문제인지 앎손실이 안 줄면 학습률, nan이면 발산을 의심00-03 최소제곱 00-04 미분
🔍 ③ 보닛엔진·변속기 구조 부품의 역할을 앎소프트맥스·역전파를 직접 구현해봄00-05 확률 00-06 SVD·종합
🔧 ④ 정비부품 교체·튜닝 내 차를 개조새 아키텍처 설계 논문 구현·LoRA이후 권 (DeZero·PyTorch)

🧭 지금 내 위치는? — 자가 진단

☐ 튜토리얼을 따라 치면 돌아가지만, 값을 바꾸면 무서워진다 → ①에서 ②로 가는 중\
☐ 하이퍼파라미터를 감으로 바꿔가며 실험한다 → ② 단계, 00-04가 큰 도움이 됩니다\
☐ 에러 메시지는 읽지만 왜 그런지는 모른다 → ②~③, 00-05의 수치 안정성 파트 추천\
☐ 논문의 수식을 보면 코드로 옮길 자신이 없다 → ③, 이 책 전체가 그 훈련입니다\
☐ 위 어느 것도 해당 없고 아직 아무것도 안 해봤다 → 완벽합니다! ①부터 편하게 시작하세요 😊

🍜 두 비유가 만나는 지점

라면 비유는 "왜"를, 자동차 비유는 "어떻게"를 말합니다.

🍜 왜 배우나? — 레시피만으로는 물이 넘칠 때 대처할 수 없으니까\
🚗 어떻게 배우나? — 엔진부터가 아니라 운전부터, 궁금해질 때 한 겹씩

그래서 이 책은 "장바구니(00-01) → 성적표(00-02) → 영수증(00-03) → 등산(00-04) → 병원 검사(00-05) → 책 요약(00-06)"처럼 이미 아는 일상에서 출발합니다. 새 지식을 넣는 게 아니라, 이미 하고 있던 생각에 이름표를 붙이는 것입니다. 🏷️

🛠️ 실습 2 🟢

① 위 자가 진단에서 자신의 위치를 하나 골라보세요.\
② 그 단계에 해당하는 장을 먼저 읽어도 됩니다. 이 책은 순서대로 읽는 것을 권하지만, 급한 불부터 끄는 것도 좋은 전략입니다. 🔥\
③ 하루에 한 단계씩, 6일이면 완주할 수 있는 분량입니다. 캘린더에 표시해보세요. 📅

🐞 공부하다 흔히 빠지는 함정

❌ 함정 ① "수학을 다 끝내고 코딩하자"\
왜 실패하나? 수학은 끝이 없습니다. 그리고 쓸 일이 없는 지식은 반드시 잊힙니다. 수정: 한 개념을 배우면 그날 바로 코드로 돌려보세요. 이 책의 모든 장이 그렇게 구성되어 있습니다.

❌ 함정 ② 증명을 전부 이해하려 함\
왜 실패하나? 엔진 설계도를 다 읽어야 운전할 수 있는 건 아닙니다. 수정: "이 식이 무엇을 계산하는가"를 먼저 잡고, 증명은 필요할 때 돌아오세요. 이 책은 유도를 보여주되 외우라고 하지 않습니다.

❌ 함정 ③ 눈으로만 읽기\
왜 실패하나? 요리책을 읽는다고 요리 실력이 늘지 않습니다. 🍳 수정: 코드를 직접 타이핑하고, 숫자를 바꿔가며 실행하세요. "학습률을 10배로 하면?"을 직접 해보는 5분이 설명 10페이지보다 낫습니다.

❌ 함정 ④ 막히면 자책하기\
왜 실패하나? 처음 보는 기호에 막히는 건 당연합니다. ∑\sum, ∇\nabla, ∂\partial — 전부 그냥 약속된 줄임말일 뿐입니다. 수정: 이 책은 기호가 나올 때마다 변수 정의를 붙여둡니다. 막히면 그 박스로 돌아오세요. 📦

📍 01-01-C · 3단계 — 🗺️ 여섯 개의 재료: 전체 지도

🔎 ① 핵심 질문 — 무엇을 배우게 되나요?\
AI를 요리에 비유하면, 이 책은 여섯 가지 기본 재료를 다룹니다. 각각이 일상의 한 장면에서 출발하고, 마지막에 전부 합쳐 신경망 하나를 만듭니다. 🍳

💜 더 쉽게 이해하기 — 🧺 장바구니에서 신경망까지

🛒 00-01 마트에서 사과 3개, 바나나 2개를 샀습니다 → 벡터\
📋 00-02 반 전체의 과목별 성적표를 만듭니다 → 행렬\
🧾 00-03 영수증 두 장으로 사과와 바나나 가격을 역추적합니다 → 연립방정식\
🌫️ 00-04 안개 낀 산에서 발밑 경사만으로 내려옵니다 → 미분\
🏥 00-05 정확도 99% 검사에서 양성인데 실제 환자일 확률은 2% → 확률\
📚 00-06 300페이지 소설을 3페이지로 요약합니다 → SVD·PCA

🤖 그리고 00-06의 마지막에서, 이 여섯 가지를 전부 써서 NumPy만으로 신경망을 만들어 학습시킵니다. 흩어진 조각이 하나의 그림이 되는 순간이죠. 🧩✨

🗺️ 시각화 ② — 여섯 장이 이어지는 흐름

🗺️ 시각화 ② — 여섯 장이 이어지는 흐름

📖 각 장의 핵심 수식과 코드 한 줄\
지금은 이해할 필요가 전혀 없습니다. 😊 다만 "수식 하나가 코드 한 줄이 된다"는 감각만 눈에 담아두세요.

장일상 비유핵심 수식코드 한 줄
🛒 00-01장바구니a⋅b=∑aibi\mathbf{a}\cdot\mathbf{b}=\sum a_ib_ia @ b
📋 00-02성적표Cij=∑kAikBkjC_{ij}=\sum_k A_{ik}B_{kj}A @ B
🧾 00-03영수증x^=(A⊤A)−1A⊤b\hat{x}=(A^{\top}A)^{-1}A^{\top}bnp.linalg.lstsq(A, b)
🌫️ 00-04안개 산x←x−ηf′(x)x \leftarrow x-\eta f'(x)x -= lr * df(x)
🏥 00-05병원 검사y^i=ezi∑jezj\hat{y}_i=\dfrac{e^{z_i}}{\sum_j e^{z_j}}np.exp(z)/np.exp(z).sum()
📚 00-06책 요약A=UΣV⊤A=U\Sigma V^{\top}np.linalg.svd(A)

🔗 장들이 서로를 어떻게 부르는가

이 여섯 장은 독립된 여섯 과목이 아닙니다. 뒤 장이 앞 장을 계속 불러 씁니다.\
\
• 00-02 행렬 곱셈은 사실 00-01 내적의 반복입니다\
• 00-03 정규방정식은 00-02의 전치·역행렬로 만들어집니다\
• 00-04 경사하강법은 00-03과 같은 답에 다른 길로 도착합니다\
• 00-05 손실의 기울기 y^−y\hat{y}-y는 00-03의 잔차와 형태가 같습니다\
• 00-06 PCA는 00-03의 A⊤AA^{\top}A와 같은 구조를 고유값 분해한 것입니다\
• 그리고 마지막 신경망은 이 여섯을 한 바퀴 안에서 전부 씁니다\
\
📌 그래서 본문에는 🔗 표시가 자주 나옵니다. "이건 00-01에서 배운 그거예요"라는 신호입니다. 앞 장이 기억나지 않으면 그때 돌아가면 됩니다. 😊

📍 01-01-D · 4단계 — 🛠️ 부엌 차리기: 환경 준비

🔎 ① 무엇이 필요한가?\
요리를 하려면 냄비와 불이 필요하듯, 우리에게는 파이썬(불)과 NumPy(냄비)가 필요합니다. 딱 두 개면 이 책 전체를 따라올 수 있습니다. 🍳

❓ NumPy가 왜 필요한가?\
파이썬 기본 리스트로도 계산은 됩니다. 그런데 느립니다. 🐢 NumPy는 같은 종류의 숫자를 메모리에 빽빽하게 붙여 저장하고 C로 컴파일된 코드로 한 번에 처리하기 때문에, 수백만 개도 순식간에 계산합니다. 🚄 (00-01 심화에서 실제로 100배 차이를 측정해봅니다.)

🔢 진행 과정 — 세 갈래 중 하나만 고르세요

방법설치추천 대상
🌐 Google Colab불필요 — 브라우저만 있으면 됨⭐ 처음이라면 이것! 설치 실패 걱정 없음
🐍 Anaconda설치 프로그램 하나로 전부내 컴퓨터에서 계속 쓸 사람
⌨️ pippip install numpy이미 파이썬이 깔려 있는 사람

💻 코드 구현 — 부엌이 제대로 차려졌는지 확인\
아래 코드를 그대로 복사해 실행해보세요. 오류 없이 끝까지 출력되면 준비 완료입니다. ✅

🐍 Python — 환경 점검 스크립트

import sys
import numpy as np      # 관례적으로 np라는 짧은 별칭을 씁니다

print("파이썬 버전:", sys.version.split()[0])
print("NumPy 버전 :", np.__version__)

# 첫 벡터를 만들어봅니다 (00-01에서 자세히 배웁니다)
v = np.array([3.0, 4.0])

print("\n첫 벡터 :", v)
print("모양     :", v.shape)      # (2,) → 숫자가 2개인 1차원
print("자료형   :", v.dtype)      # float64 (실수)
print("길이(노름):", np.linalg.norm(v))   # √(3²+4²) = 5.0

print("\n✅ 여기까지 출력되면 준비 완료입니다!")

🔗 GitHub에서 코드 보기 — 01_01_why_math.py L20–L34

📘 코드 이해 — 한 줄씩

코드하는 일
import numpy as npNumPy를 불러오고 np라는 별명을 붙임 — 전 세계 공통 관례
np.array([3.0, 4.0])파이썬 리스트를 계산 가능한 배열로 변환
v.shape모양을 튜플로 반환 — (2,)는 "1차원이고 원소 2개"
v.dtype담긴 숫자의 자료형 — 3.0처럼 점을 찍었으니 float64
np.linalg.norm(v)벡터의 길이 32+42=5\sqrt{3^2+4^2}=5 — 00-01에서 배울 내용 미리보기

🧩 코드 설명 — Python 기초

• import ... as ... — 라이브러리를 불러오며 짧은 별명을 붙입니다. np는 전 세계가 쓰는 관례라 다른 이름은 쓰지 마세요.\
\
• .(점) 문법 — np.array는 "np라는 도구상자 안의 array라는 도구"라는 뜻입니다. np.linalg.norm은 "np → linalg(선형대수) 서랍 → norm 도구"입니다. 🧰\
\
• 3.0 vs 3 ⚠️ — 점을 찍으면 실수, 안 찍으면 정수입니다. 이 차이가 나중에 계산 결과를 조용히 망가뜨리는 흔한 버그의 원인입니다. 수치 계산에서는 점을 찍는 습관을 들이세요.\
\
• \n — 줄바꿈 문자입니다. 출력을 보기 좋게 나눌 때 씁니다.\
\
• (2,)의 쉼표 — 파이썬에서 원소가 하나인 튜플은 (2,)로 써야 숫자 (2)와 구분됩니다.

✅🟩 실행 결과 (버전 숫자는 환경마다 다릅니다)

파이썬 버전: 3.12.3
NumPy 버전 : 2.4.4

첫 벡터 : [3. 4.]
모양     : (2,)
자료형   : float64
길이(노름): 5.0

✅ 여기까지 출력되면 준비 완료입니다!

🎉 축하합니다! 방금 첫 벡터를 만들고 그 길이까지 구했습니다. 32+42=5\sqrt{3^2+4^2}=5 — 중학교 때 배운 피타고라스 정리가 그대로 쓰인 것입니다. 📐 여러분은 이미 이 책의 첫 수학을 사용했습니다. 😊

🐞 설치가 안 될 때 — 증상별 처방

에러 메시지원인과 해결
ModuleNotFoundError: numpyNumPy 미설치 → pip install numpy 실행
SyntaxError오타 — 괄호·따옴표 짝이 맞는지 확인
IndentationError들여쓰기 문제 — 파이썬은 공백이 문법입니다. 스페이스 4칸으로 통일
'python' is not recognized경로 문제 → Google Colab으로 갈아타는 것이 가장 빠릅니다 🌐

💬 중요: 설치에서 30분 이상 막히면 고민하지 말고 Colab을 쓰세요. 이 책의 목표는 설치 전문가가 되는 게 아니라 수학을 이해하는 것입니다. 🎯

📍 01-01-E · 5단계 — 🎬 맛보기: 여섯 장을 20줄로

🔎 ① 이 절의 목적\
지금부터 나올 코드는 이해하지 않아도 됩니다. 목적은 딱 하나입니다 — "수학 공식이 파이썬 한 줄로 바뀌는 순간"을 직접 실행해서 눈으로 보는 것. 🔬

여섯 장의 핵심을 각각 두세 줄씩만 뽑았습니다. 지금은 "아, 이런 걸 배우겠구나" 정도면 충분합니다. 이 책을 다 읽고 다시 돌아오면 전부 읽힐 것입니다. 📖

💜 더 쉽게 이해하기 — 🍽️ 코스 요리의 애피타이저

레스토랑에서 여섯 코스가 나온다면, 셰프는 종종 한 접시에 여섯 가지를 조금씩 담은 애피타이저를 먼저 내옵니다. 🍽️

배를 채우려는 게 아니라 "오늘 이런 맛들이 나옵니다"를 미리 알려주기 위해서죠. 아래 코드가 정확히 그 애피타이저입니다. 한 입씩만 맛보세요. 😋

🔬 수학공식 ① — 여섯 장의 핵심 식을 한자리에

🛒 00-01 벡터 — 같은 자리끼리 곱해서 더하기 (총액 계산)

a⋅b=∑iaibi\mathbf{a}\cdot\mathbf{b} = \sum_{i} a_i b_i

📋 00-02 행렬 — 행과 열을 짝지어 내적 (여러 계산을 한 번에)

Cij=∑kAikBkjC_{ij} = \sum_k A_{ik}B_{kj}

🧾 00-03 최소제곱 — 완벽한 답이 없을 때 오차가 최소인 답

x^=(A⊤A)−1A⊤b\hat{\mathbf{x}} = (A^{\top}A)^{-1}A^{\top}\mathbf{b}

🌫️ 00-04 경사하강법 — 기울기 반대로 한 걸음씩

x←x−η f′(x)x \leftarrow x - \eta\,f'(x)

🏥 00-05 소프트맥스 — 아무 숫자를 합이 1인 확률로

y^i=ezi∑jezj\hat{y}_i = \frac{e^{z_i}}{\sum_j e^{z_j}}

📚 00-06 SVD — 어떤 행렬이든 세 조각으로 분해

A=UΣV⊤A = U\Sigma V^{\top}

기호 안내 (지금 외울 필요 없습니다 😊)\
• ∑\sum — "전부 더하라"는 뜻의 줄임말 (시그마)\
• ⋅\cdot — 내적 (00-01에서 배웁니다)\
• A⊤A^{\top} — 전치, 행과 열을 맞바꿈 (00-02)\
• f′(x)f'(x) — 미분, 순간 기울기 (00-04)\
• η\eta — 학습률, 한 걸음의 보폭 (00-04)

💻 코드 구현 — 위 여섯 식을 그대로 파이썬으로

🐍 Python — 여섯 장 맛보기 (그대로 복사해 실행해보세요)

import numpy as np
np.set_printoptions(suppress=True)   # 지수 표기 끄기 (보기 편하게)

# ═══ 🛒 00-01 벡터: 장바구니 총액 = 내적 ═══
# 수식: a·b = Σ aᵢbᵢ
basket = np.array([3, 2, 1])           # 사과3, 바나나2, 우유1
price  = np.array([2000, 1500, 3000])  # 각 단가
print("00-01 총액:", basket @ price, "원")   # @ 가 내적!

# ═══ 📋 00-02 행렬: 행과 열을 짝지어 곱하기 ═══
# 수식: Cᵢⱼ = Σₖ AᵢₖBₖⱼ
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print("00-02 행렬곱:\n", A @ B)          # 같은 @ 기호를 행렬에!

# ═══ 🧾 00-03 최소제곱: 점 3개에 가장 가까운 직선 ═══
# 수식: x̂ = (AᵀA)⁻¹Aᵀb
X = np.array([1., 2., 3.])
Y = np.array([2., 3., 5.])
M = np.column_stack([X, np.ones(3)])       # 1로 채운 열 = 절편용
w = np.linalg.lstsq(M, Y, rcond=None)[0]
print(f"00-03 직선: y = {w[0]:.4f}x + {w[1]:.4f}")

# ═══ 🌫️ 00-04 경사하강법: 골짜기 바닥 찾기 ═══
# 수식: x ← x - η·f'(x)
df = lambda x: 2*x - 4                 # f(x)=x²-4x+5 의 미분
x = 10.0
for _ in range(30):
    x = x - 0.1 * df(x)                ← 이 한 줄이 AI 학습의 전부!
print(f"00-04 30스텝 후 x = {x:.6f}  (정답 2)")

# ═══ 🏥 00-05 소프트맥스: 점수를 확률로 ═══
# 수식: ŷᵢ = exp(zᵢ) / Σ exp(zⱼ)
z = np.array([3.5, 1.2, 0.8])         # 강아지/고양이/토끼 점수
e = np.exp(z - z.max())                  # max 빼기 = 안전장치
p = e / e.sum()
print("00-05 확률:", p.round(4), "합계:", round(float(p.sum()), 4))

# ═══ 📚 00-06 SVD: 행렬을 세 조각으로 ═══
# 수식: A = UΣVᵀ
D = np.array([[1., 2, 3, 4], [2, 3, 4, 5],
              [3, 4, 5, 6], [4, 5, 6, 7]])
S = np.linalg.svd(D, compute_uv=False)      # 특잇값만 뽑기
print("00-06 특잇값:", S.round(4))
print(f"     첫 조각 하나로 정보의 {S[0]**2/np.sum(S**2):.1%} 를 담는다")

🔗 GitHub에서 코드 보기 — 01_01_why_math.py L38–L82

📘 코드 이해 — 수식이 코드의 어느 줄이 되었나

장수학공식파이썬 코드읽는 법
🛒 00-01∑iaibi\sum_i a_ib_ibasket @ price"짝지어 곱해서 전부 더해라"
📋 00-02∑kAikBkj\sum_k A_{ik}B_{kj}A @ B"내적을 모든 행·열 짝에 반복"
🧾 00-03(A⊤A)−1A⊤b(A^{\top}A)^{-1}A^{\top}\mathbf{b}np.linalg.lstsq(M, Y)"오차가 가장 작은 답을 다오"
🌫️ 00-04x←x−ηf′(x)x \leftarrow x-\eta f'(x)x = x - 0.1*df(x)"기울기 반대로 한 걸음"
🏥 00-05ezi∑jezj\frac{e^{z_i}}{\sum_j e^{z_j}}np.exp(z)/np.exp(z).sum()"양수로 만들고 합을 1로"
📚 00-06A=UΣV⊤A=U\Sigma V^{\top}np.linalg.svd(D)"세 조각으로 쪼개라"

📌 보이시나요? 무섭게 생긴 수식이 전부 한 줄짜리 코드가 되었습니다. 이 책이 하는 일은 왼쪽 열과 오른쪽 열을 이어주는 것, 딱 그것입니다. 🌉

🧩 코드 설명 — 지금 알아두면 좋은 것 세 가지

• @ 기호 ⭐ — 파이썬에서 내적·행렬곱 전용 연산자입니다. 놀랍게도 벡터에 쓰면 내적, 행렬에 쓰면 행렬곱이 됩니다. 왜 같은 기호일까요? 행렬곱이 내적의 반복이기 때문입니다 — 00-02에서 확인합니다! 🔗\
⚠️ *(별표)는 완전히 다른 연산(성분별 곱)입니다. 이 둘을 혼동하는 것이 초보자의 1순위 버그입니다.\
\
• lambda x: 2*x - 4 — 이름 없는 한 줄 함수입니다. def df(x): return 2*x-4과 완전히 같습니다.\
\
• for _ in range(30) — 밑줄 _은 "반복 횟수만 필요하고 값은 안 쓴다"는 관례적 표시입니다. AI 학습은 이렇게 같은 일을 수없이 반복하는 과정입니다. 🔁

✅🟩 실행 결과

00-01 총액: 12000 원
00-02 행렬곱:
 [[19 22]
 [43 50]]
00-03 직선: y = 1.5000x + 0.3333
00-04 30스텝 후 x = 2.009904  (정답 2)
00-05 확률: [0.8566 0.0859 0.0576] 합계: 1.0
00-06 특잇값: [17.1652  1.1652  0.      0.    ]
     첫 조각 하나로 정보의 99.5% 를 담는다

🔍 결과를 하나씩 음미해봅시다

🛒 12,000원 — 3×2000+2×1500+1×30003\times2000 + 2\times1500 + 1\times3000을 사람이 계산하는 방식 그대로 컴퓨터가 했습니다. 이게 내적이고, 신경망 뉴런 하나가 하는 일과 정확히 같습니다.

🧾 y=1.5x+0.333y=1.5x+0.333 — 점 (1,2),(2,3),(3,5)(1,2), (2,3), (3,5)는 한 직선 위에 있지 않습니다. 그런데도 컴퓨터가 "가장 덜 억울한 직선"을 찾아냈습니다. 이것이 머신러닝의 원형입니다.

🌫️ 10 → 2.009904 — 10에서 출발해 30번 조금씩 움직였더니 정답 2에 거의 도착했습니다. 정답을 알려준 적이 없는데도 말이죠! 이것이 학습입니다. 🤯

🏥 [0.8566, 0.0859, 0.0576] — 의미 없던 점수 [3.5,1.2,0.8][3.5, 1.2, 0.8]이 "강아지 85.7%"라는 말이 됐고, 합계가 정확히 1.0입니다. AI가 확률로 대답하는 원리입니다.

📚 99.5% — 4×4 행렬 16개 숫자를 조각 하나로 줄였는데 정보의 99.5%가 남았습니다. 넷플릭스 추천과 이미지 압축이 이 원리로 돌아갑니다.

🔬 이 책의 핵심 습관 — "수식 → 코드 → 검증"

위 코드에서 가장 중요한 부분은 주석입니다. 각 블록 위에 # 수식: ...이 적혀 있죠.

이 책의 모든 장은 같은 3단계로 진행됩니다.\
① 수식을 손으로 유도한다 (왜 그런지 이해)\
② 코드로 한 줄씩 옮긴다 (수식↔코드 대응표 제공)\
③ 실행해서 검증한다 (손계산 결과와 일치하는지 확인)

특히 ③이 핵심입니다. 예를 들어 00-04에서는 손으로 유도한 미분을 수치미분으로 채점하고, 00-06에서는 PCA 결과를 SVD 결과와 대조합니다. "내가 맞았는지 스스로 확인하는 법"을 배우는 것 — 그것이 이 책이 주려는 가장 큰 선물입니다. 🎁

🛠️ 실습 3 🔵 — 숫자를 직접 바꿔보세요

① 00-01: basket을 [5, 1, 2]로 바꾸면 총액이 얼마인가요? (정답: 17,500원)\
② 00-04: 학습률 0.1을 0.5로 바꿔보세요. 놀랍게도 1스텝 만에 정답 2에 도착합니다! 왜일까요? → 00-04에서 유도합니다\
③ 00-04: 이번엔 1.1로 바꿔보세요. ⚠️ 숫자가 폭발합니다(약 1901). 이것이 발산입니다\
④ 00-05: z를 [1.0, 1.0, 1.0]으로 바꾸면? (정답: 셋 다 0.3333 — 아무 정보가 없으면 균등 확률)\
⑤ 00-05: z - z.max()에서 - z.max()를 지우고 z = np.array([1000., 1001., 1002.])로 해보세요. 💥 nan이 나옵니다 — 왜 안전장치가 필요한지 00-05에서 증명합니다

🐞 실수하기 쉬운 부분 — 지금부터 조심할 것

❌ 실수 ① @와 * 혼동 ⭐ 1순위 버그\
A @ B는 행렬곱, A * B는 성분별 곱입니다. 둘 다 에러 없이 실행되지만 값이 다릅니다. 확인법: 결과가 이상하면 print(결과.shape)부터 찍어보세요.

❌ 실수 ② 정수와 실수 혼동\
np.array([3, 4])는 정수라 소수 계산에서 값이 잘립니다. 수정: 수치 계산에는 [3.0, 4.0]처럼 점을 찍으세요.

❌ 실수 ③ 결과를 눈으로만 확인\
"대충 맞는 것 같다"는 가장 위험한 판단입니다. 수정: 작은 예제로 손계산과 대조하세요. 이 책은 매 장에서 그 방법을 알려줍니다.

✅ 가장 좋은 습관: 새 코드를 쓰면 제일 작은 예제(2×2 행렬, 데이터 3개)로 먼저 돌려보고 손으로 검산하세요. 큰 데이터에서 틀리면 어디서 틀렸는지 절대 못 찾습니다. 🛡️

📝 연습문제

🧠 개념 문제

Q1 🟢 "라이브러리만 쓰면 되지 않나?"라는 질문에 라면 비유로 답해보세요.

Q2 🟢 자동차 비유의 4단계를 순서대로 쓰고, 이 책이 담당하는 범위를 말하세요.

Q3 🔵 "수식 → 코드 → 검증" 중 세 번째 단계가 왜 중요한가요?

🧮 계산 문제

Q4 🟢 사과 2개(1000원), 우유 3개(2000원)의 총액을 내적 형태로 쓰고 계산하세요.

Q5 🟢 벡터 (6,8)(6, 8)의 길이를 피타고라스 정리로 구하세요.

💻 구현 문제

Q6 🟢 환경 점검 코드를 실행하고, 벡터를 (6,8)(6,8)로 바꿔 길이가 Q5의 답과 같은지 확인하세요.

Q7 🔵 맛보기 코드의 00-04 부분에서 반복 횟수를 5회로 줄이면 xx가 얼마가 되나요?

🚀 사고 확장 문제

Q8 🔵 00-04에서 "정답을 알려주지 않았는데 정답을 찾았다"고 했습니다. 그럼 컴퓨터는 무엇을 단서로 찾아간 걸까요?

Q9 🔵🚀 00-01의 @와 00-02의 @가 같은 기호인 이유를 추측해보세요.

✅ 해설

A1. 라면 봉지 뒷면대로 끓이면 맛있는 라면이 나오지만, 물이 넘치거나 면이 불었을 때 원인을 알 수 없습니다. 라이브러리도 마찬가지로, 잘 돌아갈 때는 문제없지만 정확도가 안 오르거나 손실이 nan일 때 대처할 수 없습니다. 다만 "라면이 나쁘다"는 뜻은 아닙니다 — 요리를 아는 사람도 평소엔 라면을 끓입니다. 🍜

A2. ① 운전(일단 돌려보기) → ② 계기판 읽기(경고등의 의미 알기) → ③ 보닛 열기(엔진 구조 보기) → ④ 정비·튜닝(개조하기). 이 책은 ①~③을 담당하고, ④는 이후 권(DeZero·PyTorch)에서 다룹니다. 🚗

A3. 수식을 잘못 유도했거나 코드로 잘못 옮겼어도, 실행하면 그럴듯한 숫자가 나와서 틀린 줄 모르고 넘어가기 때문입니다. 손계산·다른 방법과 대조해야 비로소 확신할 수 있습니다. 실제로 이 책에서는 미분을 두 방법으로, PCA를 두 경로로 계산해 교차 검증합니다. 🔬

A4. (2,3)⋅(1000,2000)=2×1000+3×2000=2000+6000=8,000(2, 3)\cdot(1000, 2000) = 2\times1000 + 3\times2000 = 2000+6000 = \mathbf{8{,}000}원.\
코드로는 np.array([2,3]) @ np.array([1000,2000])입니다.

A5. 62+82=36+64=100=10\sqrt{6^2+8^2} = \sqrt{36+64} = \sqrt{100} = \mathbf{10}

A6. v = np.array([6.0, 8.0])로 바꾸면 np.linalg.norm(v)가 10.0을 출력합니다. 손계산과 일치하죠 — 이것이 바로 "검증"입니다! ✅

A7. range(30)을 range(5)로 바꾸면 약 4.62가 나옵니다. 정답 2까지 아직 멀죠. 5번으로는 부족하고 30번은 충분하다는 것 — "몇 번 반복할지"가 중요한 선택임을 보여줍니다. 00-04에서 자세히 다룹니다.

A8. 기울기입니다. 🌫️ 안개 속에서 목적지는 안 보이지만 발밑 경사는 느낄 수 있듯, 컴퓨터는 "지금 위치에서 어느 쪽이 내리막인가"만 알고 그 방향으로 반복해서 걸었습니다. 전체 지도 없이 국소 정보만으로 최적점에 도달한 것이죠. 이것이 AI 학습의 본질입니다.

A9. 행렬 곱셈이 사실은 내적의 반복이기 때문입니다. 행렬 CC의 (i,j)(i,j)칸은 "AA의 ii번째 행과 BB의 jj번째 열의 내적"입니다. 즉 행렬곱 = 내적을 모든 행·열 짝에 대해 반복한 것. 그래서 파이썬은 같은 @ 기호를 씁니다. 00-02에서 직접 확인합니다! 🔗

✨ 이번 장에서 배운 내용

🎯 개념 요약

🍜 왜 배우나 — 레시피만으로는 문제를 진단할 수 없다\
🚗 어떻게 배우나 — 운전 → 계기판 → 보닛 → 정비\
🗺️ 무엇을 배우나 — 일상 비유로 출발하는 여섯 재료\
🛠️ 준비물 — 파이썬 + NumPy (또는 Colab)\
🔬 핵심 습관 — 수식 → 코드 → 검증\
🎬 맛보기 — 여섯 수식이 각각 코드 한 줄이 됨

📌 핵심 문장 3가지

① 🍜 라면도 훌륭한 시작이다. 다만 물이 넘칠 때 대처하려면 원리를 알아야 한다.\
\
② 🚗 엔진부터 배우지 않는다. 먼저 굴려보고, 궁금해질 때 한 겹씩 열어본다.\
\
③ 🔬 무섭게 생긴 수식도 결국 코드 한 줄이다. 이 책은 그 둘을 잇는 다리다.

☑️ 개념 체크리스트 (성취 기준)

☐ 라이브러리만 쓸 때의 한계를 라면 비유로 설명할 수 있다 🟢\
☐ "라면은 나쁘다"가 아니라는 것을 설명할 수 있다 🟢\
☐ 자동차 비유의 4단계를 순서대로 말할 수 있다 🟢⭐\
☐ 자가 진단에서 내 현재 위치를 짚을 수 있다 🟢\
☐ 여섯 장의 일상 비유를 하나씩 연결할 수 있다 🟢\
☐ 장들이 서로를 어떻게 부르는지 한 가지 예를 들 수 있다 🔵\
☐ 파이썬·NumPy 환경에서 첫 코드를 실행했다 🟢⭐\
☐ 벡터 (3,4)(3,4)의 길이가 5임을 손과 코드로 확인했다 🟢\
☐ 맛보기 코드를 실행하고 여섯 결과를 모두 확인했다 🔵⭐\
☐ @와 *가 다르다는 것을 알고 있다 🔵\
☐ "수식 → 코드 → 검증"이 이 책의 핵심 습관임을 설명할 수 있다 🔵⭐

🚫 공부 시작 전 마음가짐 체크리스트

☐ 모르는 기호가 나와도 자책하지 않기 — 전부 그 자리에서 설명합니다\
☐ 증명을 다 이해하려 하지 않기 — "무엇을 계산하는가"가 먼저\
☐ 눈으로만 읽지 않기 — 코드는 반드시 직접 타이핑하고 실행\
☐ 숫자를 바꿔가며 실험하기 — 실습 문제는 5분이면 됩니다\
☐ 설치에 30분 이상 쓰지 않기 — 막히면 Colab으로\
☐ 하루 한 장이면 충분 — 6일이면 완주입니다 📅\
☐ 앞 장이 기억 안 나면 돌아가기 — 🔗 표시를 따라가면 됩니다

📚 추가 학습

🌐 Colab 익히기 — 셀 실행 단축키 Shift+Enter만 알면 충분합니다\
🐍 파이썬 기초 — 변수·리스트·for문·함수 정의까지만 훑어두면 편합니다\
✏️ 맛보기 코드 변형 — 실습 3의 다섯 문항을 전부 실행해보세요\
📓 학습 노트 만들기 — 각 장의 수식↔코드 대응표만 따로 모아두면 최고의 요약본이 됩니다\
🤔 질문 목록 만들기 — 읽다가 막힌 부분을 적어두고, 해당 장을 읽은 뒤 다시 보세요

➡️

🔮 다음 장 예고 — 01-02. 그리스 문자와 수학 기호 — ML 수식의 알파벳 🔤

부엌이 차려졌으니 이제 레시피를 읽는 법부터 배웁니다. 머신러닝 수식이 어려운 가장 큰 이유는 내용이 아니라 처음 보는 기호입니다. θ\theta, Σ\Sigma, ∇\nabla, ∥x∥\|x\| …

다음 장에서는 그리스 문자와 연산 기호를 소리 내어 읽는 법으로 익히고, ML 공식 100개를 한국어 문장으로 낭독해 봅니다. 기호가 읽히면 01-03 벡터부터는 수식이 문장처럼 들어옵니다.


💻 GitHub 실습 — 코드로 직접 확인하기

📂 이 장의 코드 폴더: book/01-ml-math-basics-python/01-01-why-math

책에 실린 코드를 장(절)별로 모아 둔 폴더입니다. 아래 파일을 열어 보거나, Colab에서 바로 실행해 보세요.

파일용도링크
01_01_why_math.py책의 코드 블록 3개를 순서대로 모은 실행 스크립트 (# %% 셀 구분)코드 보기
01_01_why_math.ipynb같은 코드를 블록당 셀 1개로 담은 주피터 노트북보기 · Colab
README.md코드 블록 목록 · 실행 방법 · 검증 결과보기
🎬 medium-series/10-why-math/Medium 시리즈 예제 — 같은 주제를 블로그용으로 다듬은 실습폴더 · Colab

🧪 저장소 검증 상태: 🧩 문맥 필요(조각) — X_train 이(가) 이 절 안에서 정의되지 않습니다 — 데이터·변수·클래스를 미리 준비했다고 가정한 설명용 코드 조각입니다.

🔑 핵심 코드 1 — 환경 점검 — 파이썬·NumPy 버전과 첫 벡터

📄 01_01_why_math.py L20–L34 · Block 2 (📍 01-01-D · 4단계 — 🛠️ 부엌 차리기: 환경 준비)

import sys
import numpy as np      # 관례적으로 np라는 짧은 별칭을 씁니다

print("파이썬 버전:", sys.version.split()[0])
print("NumPy 버전 :", np.__version__)

# 첫 벡터를 만들어봅니다 (00-01에서 자세히 배웁니다)
v = np.array([3.0, 4.0])

print("\n첫 벡터 :", v)
print("모양     :", v.shape)      # (2,) → 숫자가 2개인 1차원
print("자료형   :", v.dtype)      # float64 (실수)
print("길이(노름):", np.linalg.norm(v))   # √(3²+4²) = 5.0

print("\n✅ 여기까지 출력되면 준비 완료입니다!")

▶ 실행 결과 — 위 코드를 실행한 출력 (직접 실행: Windows · Python 3.11.2 · numpy 2.4.6 · scipy 1.17.1 · sklearn 1.9.1, 앞 블록부터 순서대로 실행)

파이썬 버전: 3.11.2
NumPy 버전 : 2.4.6

첫 벡터 : [3. 4.]
모양     : (2,)
자료형   : float64
길이(노름): 5.0

✅ 여기까지 출력되면 준비 완료입니다!

🔑 핵심 코드 2 — 여섯 장을 20줄로 — 최소제곱·경사하강법·소프트맥스·SVD

📄 01_01_why_math.py L53–L82 · Block 3 (📍 01-01-E · 5단계 — 🎬 맛보기: 여섯 장을 20줄로)

# ═══ 🧾 00-03 최소제곱: 점 3개에 가장 가까운 직선 ═══
# 수식: x̂ = (AᵀA)⁻¹Aᵀb
X = np.array([1., 2., 3.])
Y = np.array([2., 3., 5.])
M = np.column_stack([X, np.ones(3)])       # 1로 채운 열 = 절편용
w = np.linalg.lstsq(M, Y, rcond=None)[0]
print(f"00-03 직선: y = {w[0]:.4f}x + {w[1]:.4f}")

# ═══ 🌫️ 00-04 경사하강법: 골짜기 바닥 찾기 ═══
# 수식: x ← x - η·f'(x)
df = lambda x: 2*x - 4                 # f(x)=x²-4x+5 의 미분
x = 10.0
for _ in range(30):
    x = x - 0.1 * df(x)  # ← 이 한 줄이 AI 학습의 전부!
print(f"00-04 30스텝 후 x = {x:.6f}  (정답 2)")

# ═══ 🏥 00-05 소프트맥스: 점수를 확률로 ═══
# 수식: ŷᵢ = exp(zᵢ) / Σ exp(zⱼ)
z = np.array([3.5, 1.2, 0.8])         # 강아지/고양이/토끼 점수
e = np.exp(z - z.max())                  # max 빼기 = 안전장치
p = e / e.sum()
print("00-05 확률:", p.round(4), "합계:", round(float(p.sum()), 4))

# ═══ 📚 00-06 SVD: 행렬을 세 조각으로 ═══
# 수식: A = UΣVᵀ
D = np.array([[1., 2, 3, 4], [2, 3, 4, 5],
              [3, 4, 5, 6], [4, 5, 6, 7]])
S = np.linalg.svd(D, compute_uv=False)      # 특잇값만 뽑기
print("00-06 특잇값:", S.round(4))
print(f"     첫 조각 하나로 정보의 {S[0]**2/np.sum(S**2):.1%} 를 담는다")

▶ 실행 결과 — 위 코드를 실행한 출력 (직접 실행: Windows · Python 3.11.2 · numpy 2.4.6 · scipy 1.17.1 · sklearn 1.9.1, 앞 블록부터 순서대로 실행)

00-03 직선: y = 1.5000x + 0.3333
00-04 30스텝 후 x = 2.009904  (정답 2)
00-05 확률: [0.8566 0.0859 0.0576] 합계: 1.0
00-06 특잇값: [17.1652  1.1652  0.      0.    ]
     첫 조각 하나로 정보의 99.5% 를 담는다

📝 실행 메모

  • Block 1 은(는) 단독 실행되지 않습니다: NameError: name 'X_train' is not defined — 앞 절에서 만든 변수·클래스를 가정한 책의 설명용 코드 조각입니다

☁️ Colab에서 바로 실행

👉 Open in Colab — 01_01_why_math.ipynb · 설치 없이 브라우저에서 셀을 위에서부터 순서대로 실행하세요.

🖥️ 내 컴퓨터에서 실행하기

git clone https://github.com/otoloism/Zero_to_ML_Master.git
cd Zero_to_ML_Master
python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r book/requirements.txt   # 책 전체용 (PyTorch 등 포함, 용량 큼)
# 이 장만 실행한다면 이것만으로 충분합니다: pip install numpy scikit-learn
cd book/01-ml-math-basics-python/01-01-why-math
python 01_01_why_math.py

⭐ GitHub Star / Fork

⭐ 코드가 도움이 되셨다면 GitHub 저장소에 Star를 눌러 주세요. 새 장의 코드가 올라올 때 가장 먼저 알 수 있습니다.
🍴 직접 고쳐 보며 실험하고 싶다면 Fork 해서 내 저장소에서 마음껏 바꿔 보세요. 오류 제보·개선 제안은 Issues로 환영합니다!


🔮 다음 글 예고

다음 글은 01-02 그리스 문자와 수학 기호 — ML 수식의 알파벳 (예제 100선) 🔤 입니다. 머신러닝 수식이 어려운 가장 큰 이유는 내용이 아니라 처음 보는 기호입니다. θ\theta, Σ\Sigma, ∇\nabla, ∥x∥\lVert x \rVert … 그리스 문자와 연산 기호를 소리 내어 읽는 법부터 익히고, ML 공식 100개를 한국어 문장으로 읽어 봅니다.

⬅️ 이전 글: #10 SVD 추천 시스템부터 미니 신경망(XOR)까지 — 수포자 수학 6개 장 총정리 (2부) \
➡️ 다음 글: #12 머신러닝 수식 읽는 법 — 그리스 문자·수학 기호 사전과 읽기 규칙 10가지 (ML 공식 100선, 1부)


📚 더 깊이 공부하고 싶다면

이 시리즈는 수학을 놓았던 비전공자가 AI를 직접 구현하기까지의 공부 기록을 그대로 옮긴 연재입니다. 원문 책, 코드, 개념 사전을 함께 보면 훨씬 빨리 늡니다. 🚀

바로가기이런 분께
📘 책 (위키독스, 무료)Zero to 머신러닝 딥러닝 Master5권 · 20개 장 · 163개 절 전체를 순서대로 읽고 싶은 분
📄 이 글의 원문01-01 왜 수학인가? — 요리를 배울 것인가? 라면만 끓이다 갈 것인가!연습문제·해설까지 전부 보고 싶은 분
💻 실습 코드 (GitHub)otoloism/Zero_to_ML_Master.py·.ipynb를 Colab에서 바로 돌려보고 싶은 분
🏠 머신러닝 백과사전mldict.net본문 속 핵심 개념을 카드로 다시 확인하고 싶은 분
✍️ 기술 블로그wikidocs.net/blog/@mldict새 글 알림을 가장 먼저 받고 싶은 분

⭐ 도움이 되셨다면 velog 팔로우와 GitHub Star를 눌러 주세요. 다음 글을 쓰는 가장 큰 힘이 됩니다. 궁금한 점은 댓글로 편하게 남겨 주세요! 🙌

profile
자유주의자

0개의 댓글