콘텐츠로 이동

Chapter 5: 데이터가 없으면 머신러닝도 없다

한 줄 요약: 머신러닝은 데이터로 배운다. 데이터를 불러오고, 특성과 정답을 구분하는 법을 익혀보자.


🎯 이 장에서 배우는 것

  • [ ] 머신러닝에서 데이터의 역할을 설명할 수 있다
  • [ ] CSV 파일을 불러와 데이터프레임으로 확인할 수 있다
  • [ ] 데이터의 특성(feature)과 정답(label)을 구분할 수 있다
  • [ ] 붓꽃 데이터셋의 구조를 이해하고 탐색할 수 있다

💡 왜 이걸 배우나요?

머신러닝의 핵심은 "데이터"

"인공지능이 대단하다"는 말, 많이 들어봤지? 그런데 정작 인공지능(특히 머신러닝)이 어떻게 똑똑해지는지 아는 사람은 많지 않아.

비밀을 알려줄게: 데이터야.

머신러닝 모델은 마법처럼 스스로 똑똑해지는 게 아니야. 수많은 데이터를 보면서 패턴을 찾고, 그 패턴을 기억해두는 거지. 마치 우리가 문제집을 많이 풀수록 시험을 잘 보는 것처럼!

┌─────────────────────────────────────────────────────────┐
│                    머신러닝의 비밀                        │
├─────────────────────────────────────────────────────────┤
│                                                         │
│    📚 문제집 많이 풀기  →  🎯 시험 잘 보기               │
│         (학습)              (예측)                       │
│                                                         │
│    📊 데이터 많이 보기  →  🤖 새 데이터 잘 맞추기        │
│         (훈련)              (추론)                       │
│                                                         │
│    ─────────────────────────────────────────────────    │
│    결론: 좋은 데이터 없이는 좋은 AI도 없다!              │
└─────────────────────────────────────────────────────────┘

이 장을 배우면

  1. AI가 어떻게 학습하는지 원리를 이해하게 돼
  2. 실제 데이터를 다루는 법을 배워서, 나중에 내 프로젝트에 적용할 수 있어
  3. 특성과 정답의 구분이라는 머신러닝의 핵심 개념을 익히게 돼

데이터를 이해하지 못하면 머신러닝도 이해할 수 없어. 오늘은 그 첫걸음을 내딛는 날이야!


📚 핵심 개념

개념 1: 데이터 - 머신러닝의 교과서

비유로 시작: 데이터는 마치 문제집과 같아. 시험 전에 문제집을 풀면서 "아, 이런 유형은 이렇게 풀면 되는구나"를 배우잖아? 머신러닝 모델도 데이터(문제집)를 보면서 패턴을 배워.

정확한 정의: 데이터(Data)는 머신러닝 모델이 학습하는 데 사용하는 정보의 집합이야. 보통 표(table) 형태로 되어 있어서, 엑셀 시트처럼 행(row)과 열(column)로 구성돼.

예시로 확인:

┌──────────────────────────────────────────────────────────────────┐
│                      붓꽃(Iris) 데이터셋                          │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│    꽃잎 길이    꽃잎 너비    꽃받침 길이    꽃받침 너비    품종    │
│    ────────    ────────    ──────────    ──────────    ─────    │
│      5.1         3.5          1.4           0.2       setosa    │
│      4.9         3.0          1.4           0.2       setosa    │
│      7.0         3.2          4.7           1.4     versicolor  │
│      6.3         3.3          6.0           2.5     virginica   │
│      ...         ...          ...           ...        ...      │
│                                                                  │
│    → 150개의 붓꽃 데이터, 4개의 측정값 + 1개의 품종 정보          │
└──────────────────────────────────────────────────────────────────┘

쉽게 말하면: 데이터는 AI가 공부하는 문제집이야. 문제(특성)와 정답(레이블)이 쌍으로 들어있어!


개념 2: 특성(Feature) - "무엇을 보고 판단할까?"

비유로 시작: 특성은 마치 시험 문제의 조건과 같아. "키가 180cm, 몸무게가 75kg인 사람의 BMI는?"에서 키와 몸무게가 조건이잖아? 머신러닝에서는 이런 조건을 '특성'이라고 불러.

정확한 정의: 특성(Feature)은 모델이 예측을 하기 위해 참고하는 입력 변수야. 데이터의 각 열(column)이 하나의 특성이 돼. X라고도 표기해.

예시로 확인:

붓꽃 분류 문제의 특성들:
┌──────────────────────────────────────────────────┐
│ 특성 1: 꽃받침 길이 (sepal_length) - 단위: cm    │
│ 특성 2: 꽃받침 너비 (sepal_width)  - 단위: cm    │
│ 특성 3: 꽃잎 길이   (petal_length) - 단위: cm    │
│ 특성 4: 꽃잎 너비   (petal_width)  - 단위: cm    │
└──────────────────────────────────────────────────┘

       꽃받침                    꽃잎
    (sepal) 🌿               (petal) 🌸
         │                       │
    ┌────┴────┐             ┌────┴────┐
    │         │             │         │
   길이     너비            길이     너비

* 모델은 이 4가지 측정값을 보고 품종을 판단해!

쉽게 말하면: 특성은 "AI야, 이걸 보고 판단해!"라고 알려주는 정보야.


개념 3: 정답/레이블(Label) - "무엇을 맞춰야 할까?"

비유로 시작: 레이블은 마치 문제집 뒷장의 정답과 같아. 문제를 풀고 나서 정답을 확인하면서 "아, 이게 답이구나" 배우잖아? 모델도 레이블을 보면서 자기가 맞았는지 틀렸는지 확인해.

정확한 정의: 레이블(Label) 또는 타겟(Target)은 모델이 예측해야 하는 정답이야. y라고도 표기해. 학습할 때는 레이블을 알려주고, 실제로 사용할 때는 레이블 없이 특성만 주면서 "맞춰봐!"라고 해.

예시로 확인:

┌────────────────────────────────────────────────────────┐
│              학습 데이터 (정답 있음)                    │
├────────────────────────────────────────────────────────┤
│                                                        │
│    특성들 (X)                    레이블 (y)            │
│    ──────────────────           ─────────────         │
│    [5.1, 3.5, 1.4, 0.2]    →    "setosa"              │
│    [7.0, 3.2, 4.7, 1.4]    →    "versicolor"          │
│    [6.3, 3.3, 6.0, 2.5]    →    "virginica"           │
│                                                        │
│    모델: "아~ 꽃잎이 길면 virginica구나!"              │
└────────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────────┐
│              새 데이터 (정답 모름)                      │
├────────────────────────────────────────────────────────┤
│                                                        │
│    특성들 (X)                    레이블 (y)            │
│    ──────────────────           ─────────────         │
│    [5.8, 2.7, 5.1, 1.9]    →    ???                   │
│                                                        │
│    모델: "음... 배운 패턴으로 보면... versicolor!"     │
└────────────────────────────────────────────────────────┘

쉽게 말하면: 레이블은 "정답은 이거야!"라고 알려주는 거야. 모델은 이걸 보면서 배워.


개념 4: 특성과 레이블의 관계

┌─────────────────────────────────────────────────────────────────┐
│                    특성 vs 레이블 완벽 정리                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│         특성 (Feature)              레이블 (Label)              │
│         ─────────────              ───────────────             │
│         입력값                      출력값 (정답)               │
│         X로 표기                    y로 표기                    │
│         여러 개 가능                보통 1개                    │
│         모델에게 주는 정보          모델이 맞춰야 할 것          │
│                                                                 │
│    ┌─────────────────────┐      ┌─────────────────────┐        │
│    │  꽃받침 길이: 5.1   │      │                     │        │
│    │  꽃받침 너비: 3.5   │  →   │   품종: setosa      │        │
│    │  꽃잎 길이: 1.4     │      │                     │        │
│    │  꽃잎 너비: 0.2     │      └─────────────────────┘        │
│    └─────────────────────┘                                      │
│          특성 (X)                      레이블 (y)               │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│  💡 기억법: "특성을 보고 → 레이블을 맞추는 게 머신러닝!"        │
└─────────────────────────────────────────────────────────────────┘

개념 5: 데이터프레임 - 데이터를 담는 그릇

비유로 시작: 데이터프레임은 마치 엑셀 시트와 같아. 행과 열로 이루어진 표 형태로 데이터를 깔끔하게 정리해놓은 거지.

정확한 정의: 데이터프레임(DataFrame)은 pandas 라이브러리가 제공하는 2차원 표 형태의 데이터 구조야. 행(row)은 각 데이터 샘플, 열(column)은 특성을 나타내.

예시로 확인:

# 데이터프레임의 구조
import pandas as pd

#            열(column) = 특성
#            ↓
#    ┌───────────────────────────────────────────┐
#    │  sepal_length  sepal_width  ...  species  │
#    ├───────────────────────────────────────────┤
# 행 │      5.1          3.5       ...   setosa  │ ← 첫 번째 꽃
# ↓  │      4.9          3.0       ...   setosa  │ ← 두 번째 꽃
#    │      7.0          3.2       ... versicolor│ ← 세 번째 꽃
#    └───────────────────────────────────────────┘

쉽게 말하면: 데이터프레임은 파이썬에서 데이터를 담아두는 '엑셀 시트'야!


🔨 따라하기

Step 1: 붓꽃 데이터셋 불러오기

목표: scikit-learn에서 제공하는 붓꽃(Iris) 데이터셋을 불러와보자.

📦 데이터셋 선택지 - 붓꽃(Iris) 데이터: 가장 유명한 머신러닝 입문 데이터 (이 장에서 사용) - 와인 품질 데이터: 와인의 화학 성분으로 품질 예측 - 펭귄 데이터: 펭귄의 신체 측정치로 종 분류

어떤 걸 써도 특성/레이블 개념은 동일하게 적용