AI/Machine Learning

지도학습 vs 비지도학습, 과일로 이해하는 머신러닝의 핵심 개념

Somaz 2025. 10. 22. 08:56
728x90
반응형

Overview

머신러닝을 처음 접하는 사람이라면 "지도학습과 비지도학습이 뭐가 다른가요?" 라는 질문을 자주 하게 된다.



이 글에서는 과일 분류와 붓꽃(Iris) 데이터 예제를 통해

  • 지도학습(정답이 있는 데이터로 분류/예측)
  • 비지도학습(정답 없이 데이터 패턴만으로 그룹화)
  • 유사도(데이터 간의 닮은 정도)
  • 호환성(함께 있을 때의 조합 적합도)

 

등 머신러닝의 핵심 개념을 직관적으로 설명한다.

 

 

 

실제 Python 코드를 통해

  • DecisionTree, SVM, KNN, LogisticRegression 등 다양한 분류 알고리즘
  • KMeans 군집화, Cosine Similarity 등

 

을 실습하며, 지도학습과 비지도학습의 원리와 차이, 그리고 실전에서의 해석 방법까지 단계별로 경험할 수 있다.

 

 

 

 

 

 


 

 

 

 

 

머신러닝의 두 갈래: 지도학습과 비지도학습

 

 

지도학습(Supervised Learning) – “정답이 주어진다”

"이 과일은 사과입니다"
→ 정답(라벨)이 주어진 상태에서 학습하는 방식

 


특징 설명
입력값 과일의 색, 크기, 당도 등
출력값 라벨 (예: 사과, 바나나, 포도)
목적 주어진 입력을 보고 정답을 예측하는 모델 학습
예시 과일 이미지 → 사과/바나나/포도 예측

 

 

예시

입력: [색=빨강, 크기=작음, 당도=높음]  
출력: 사과 (label)

 

 

 

 

비지도학습(Unsupervised Learning) – “정답 없이 스스로 찾는다”

"이 과일들은 비슷해 보여. 같은 그룹일 거야!"
→ 정답이 없이, 데이터 간의 구조를 스스로 파악하는 방식

 


특징 설명
입력값 과일의 색, 크기, 당도 등
출력값 없음 (라벨 없이 군집만 찾음)
목적 유사한 데이터를 묶거나 특징을 추출
예시 과일을 색/크기에 따라 자동으로 군집화

 

예시

입력: 다양한 과일 특성 데이터  
출력: Cluster 1 = 사과 유사 그룹, Cluster 2 = 바나나 유사 그룹

 

 

 

 

 


 

 

 

 

 

유사도(Similarity) vs 호환성(Compatibility)

머신러닝에서 유사도와 호환성은 종종 비슷하게 느껴지지만, 실제론 목적과 계산 방식이 다르다.

 

 

 

유사도 (Similarity)

"사과와 배는 모양이 비슷하다."
→ 두 객체 간의 거리 또는 형태가 얼마나 가까운지를 측정

 

 

특징 설명
핵심 질문 얼마나 닮았는가? 
수학적 표현 Cosine Similarity, Euclidean Distance 등
사용 예 추천 시스템, 군집화, 유사 이미지 검색 등

 

 

  • 사과와 배의 색상/당도/크기 차이 → 거리 계산
  • 거리 0이면 거의 같은 과일

 

 

 

호환성 (Compatibility)

"사과는 꿀과 잘 어울리고, 바나나는 우유랑 잘 어울린다."
→ 두 개체가 함께 있을 때 조합이 얼마나 좋은지를 평가

 

 

특징 설명
핵심 질문 함께 있을 때 잘 맞는가?
수학적 표현 점수 기반 (상호작용 모델, co-occurrence 등) 
사용 예 커플 매칭, 상품 연관 추천, 음식 조합 추천 

 

  • 사과 + 꿀 조합 점수 = 9.1
  • 사과 + 된장 조합 점수 = 2.3

 

 

 

정리: 과일로 보는 머신러닝 주요 개념

구분 설명 예시
지도학습 정답을 보고 배우는 학습 과일 사진 → 사과인지 예측
비지도학습 정답 없이 스스로 그룹 찾기 유사한 과일끼리 묶기
유사도 얼마나 닮았는가? 사과 vs 배
호환성 함께 있을 때 잘 맞는가? 사과 + 꿀

 

 

 

 

 


 

 

 

 

 

 

실제 Python 코드 실습 (로컬에서 실행 가능)

 

 

실습 1:  과일 분류기 만들기 (Scikit-Learn)

https://github.com/somaz94/ml-basics/tree/main/intro

 

ml-basics/intro at main · somaz94/ml-basics

ml-basics. Contribute to somaz94/ml-basics development by creating an account on GitHub.

github.com

 

 

 

가상환경 생성 및 활성화(권장)

python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

 

 

 

 

의존성 설치

pip3 install -r requirements.txt

 

 

`requirements.txt`

scikit-learn
numpy
matplotlib

 

 

 

 

예제 실행

python3 fruit_ml_examples.py

 

 

 

`supervised_vs_unsupervised.py`

from sklearn.tree import DecisionTreeClassifier
from sklearn.cluster import KMeans
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import matplotlib.pyplot as plt

# --------------------------------
# 한글 폰트 설정
# --------------------------------
plt.rcParams['font.family'] = 'AppleGothic'  # macOS 한글 폰트
plt.rcParams['axes.unicode_minus'] = False

# -----------------------
# 지도학습: 과일 분류기
# -----------------------
print("📘 지도학습 - Decision Tree로 과일 예측")

# 과일의 [색, 크기, 당도]
X = [[1, 1, 9], [1, 2, 10], [3, 4, 3], [2, 4, 4], [4, 1, 8]]
y = [0, 0, 1, 1, 2]  # 0:사과, 1:바나나, 2:포도

clf = DecisionTreeClassifier()
clf.fit(X, y)

pred = clf.predict([[1, 1, 10]])
print("예측 결과 (라벨):", pred)

# -----------------------
# 비지도학습: 과일 군집화
# -----------------------
print("\n📘 비지도학습 - KMeans로 군집화")

kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)
print("군집 결과:", clusters)

# 시각화
plt.scatter([x[0] for x in X], [x[2] for x in X], c=clusters)
plt.xlabel("색상")
plt.ylabel("당도")
plt.title("KMeans 과일 군집화")
plt.show()

# -----------------------
# 유사도 비교 (Cosine)
# -----------------------
print("\n📘 유사도 - Cosine Similarity")

apple = np.array([[1, 1, 9]])
pear = np.array([[2, 1, 9]])
banana = np.array([[3, 4, 3]])

sim_apple_pear = cosine_similarity(apple, pear)
sim_apple_banana = cosine_similarity(apple, banana)

print("사과-배 유사도:", sim_apple_pear)
print("사과-바나나 유사도:", sim_apple_banana)

 

 

결과 확인

 

 

종료하면 아래와 같이 나온다.

python3 fruit_ml_examples.py 
📘 지도학습 - Decision Tree로 과일 예측
예측 결과 (라벨): [0]

📘 비지도학습 - KMeans로 군집화
군집 결과: [0 0 1 1 2]

📘 유사도 - Cosine Similarity
사과-배 유사도: [[0.9942395]]
사과-바나나 유사도: [[0.64003012]]

 

 

 

 

 


 

 

 

 

 

 

실습 1:  과일 분류기 만들기 (Scikit-Learn) 설명

 

지도학습 - Decision Tree로 과일 예측

  • 설명
    • 입력 데이터(X)는 과일의 [색, 크기, 당도] 특성이고, y는 과일의 종류(0:사과, 1:바나나, 2:포도) 이다.
    • DecisionTreeClassifier로 학습 후, [1, 1, 10] 특성을 가진 과일을 예측했다.

 

  • 결과
    • 예측 결과 (라벨): [0]

 

 

입력값이 사과(0)로 분류됨을 의미한다.

 

 

 

 

비지도학습 - KMeans로 군집화

  • 설명
    • 같은 과일 특성 데이터(X)를 KMeans 알고리즘으로 3개의 군집(클러스터)로 나눴다.
    • 군집화는 정답(y) 없이, 데이터의 패턴만 보고 자동으로 그룹을 나눈다.

 

  • 결과
    • 군집 결과: [0 0 1 1 2]

 

 

각 데이터가 어느 군집에 속하는지(0, 1, 2) 표시

예를 들어, 첫 번째/두 번째 과일은 0번 군집, 세 번째/네 번째는 1번, 다섯 번째는 2번 군집에 속함

 

 

 

 

유사도 - Cosine Similarity

  • 설명
    • 사과, 배, 바나나의 특성 벡터(색, 크기, 당도)를 비교하여,

 

코사인 유사도

(두 벡터의 방향이 얼마나 비슷한지)를 계산한다.

 

 

  • 결과
    • 사과-배 유사도: [[0.9942395]]

 

사과와 배는 특성이 매우 비슷함(1에 가까울수록 유사)

 

 

  • 사과-바나나 유사도: [[0.64003012]]

사과와 바나나는 덜 비슷함(0.6 정도)

 

 

 

 

요약

  • 지도학습
    • 정답(라벨)이 있는 데이터로 분류/예측
    • 예: 사과/바나나/포도 분류

 

  • 비지도학습
    • 정답 없이 데이터 패턴만으로 그룹화
    • 예: 과일 특성만 보고 자동으로 군집 나누기

 

  • 유사도 비교
    • 두 데이터(과일)의 특성이 얼마나 비슷한지 수치로 계산
    • 예: 사과와 배는 매우 비슷, 사과와 바나나는 덜 비슷

 

 

 

 

 

 


 

 

 

실습 2 : 붓꽃(Iris) 데이터 분류/군집화

https://github.com/somaz94/ml-basics/tree/main/iris_classification

 

ml-basics/iris_classification at main · somaz94/ml-basics

ml-basics. Contribute to somaz94/ml-basics development by creating an account on GitHub.

github.com

 

 

 

가상환경 생성 및 활성화(권장)

python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

 

 

 

 

의존성 설치

pip3 install -r requirements.txt

 

 

`requirements.txt`

scikit-learn
numpy
matplotlib
pandas

 

 

 

 

예제 실행

python3 iris_classification.py

 

 

 

 

결과 확인

 

 

 

 

종료하면 아래와 같이 나온다.

python3 iris_classification.py

📘 지도학습 - SVM, KNN, LogisticRegression로 품종 분류
SVM 정확도: 1.000
KNN 정확도: 1.000
LogisticRegression 정확도: 1.000

📘 비지도학습 - KMeans로 군집화 및 실제 품종과 비교
KMeans 군집 결과(0~2): [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 0 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 0 0 0 0 2 0 0 0 0
 0 0 2 2 0 0 0 0 2 0 2 0 2 0 0 2 2 0 0 0 0 0 2 0 0 0 0 2 0 0 0 2 0 0 0 2 0
 0 2]
실제 품종 라벨(0~2): [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
군집-실제 라벨 혼동 행렬:
 [[ 0 50  0]
 [ 3  0 47]
 [36  0 14]]

 

 

 

 

 

 


 

 

 

 

 

실습 2 : 붓꽃(Iris) 데이터 분류/군집화 설명

 

 

지도학습 - SVM, KNN, LogisticRegression로 품종 분류

  • 설명
    • SVM, KNN, LogisticRegression 세 가지 분류 알고리즘으로 붓꽃의 품종(0: setosa, 1: versicolor, 2: virginica)을 예측했다.
    • 데이터셋을 학습/테스트로 나누고, 각 모델의 정확도를 평가했다.

 

  • 결과
    • SVM 정확도: 1.000
    • KNN 정확도: 1.000
    • LogisticRegression 정확도: 1.000

 

 

모두 100% 정확도로 테스트셋의 품종을 완벽하게 분류했다.

  • 붓꽃 데이터는 특성이 잘 분리되어 있어, 대표적인 분류 알고리즘들이 모두 높은 성능을 보인다.

 

 

 

비지도학습 - KMeans로 군집화 및 실제 품종과 비교

  • 설명
    • KMeans 알고리즘으로 라벨(정답) 없이 데이터를 3개의 군집으로 나눴다.
    • 군집 결과와 실제 품종 라벨을 비교하여, 군집화가 실제 품종 분류와 얼마나 일치하는지 확인한다.

 

  • 결과
    • KMeans 군집 결과(0~2): ...

 

→ 각 데이터가 어느 군집(0, 1, 2)에 속하는지 배열로 표시

  • 실제 품종 라벨(0~2): ...

 

→ 실제 붓꽃 품종(0: setosa, 1: versicolor, 2: virginica)

  • 군집

 

 

 

혼동 행렬(Confusion Matrix) 해석

  • 행: 실제 품종(0, 1, 2)
  • 열: KMeans가 할당한 군집(0, 1, 2)
  군집0 군집1  군집2
실제0(setosa) 0 50 0
실제1(versicolor) 3 0 47
실제2(virginica) 36 0 14
  • 실제 setosa(0): 모두 군집1로 잘 묶임 (50개)
  • 실제 versicolor(1): 대부분 군집2(47개), 일부 군집0(3개)
  • 실제 virginica(2): 군집0(36개), 군집2(14개)로 분산

 

 

 

요약

  • KMeans는 setosa(0)는 완벽하게 구분하지만, versicolor(1)와 virginica(2)는 일부 혼동이 있다.
  • 이는 비지도학습(정답 없이 패턴만 보고 그룹화)의 한계이자, 실제 데이터의 분포 특성 때문이다.
  • 지도학습(분류): 정답(라벨)이 있을 때, SVM/KNN/LogisticRegression 모두 100% 정확도로 품종을 예측할 수 있다.
  • 비지도학습(군집화): 정답 없이 데이터 패턴만으로 그룹을 나누면, 일부 품종(setosa)은 잘 구분되지만, 나머지는 혼동이 발생할 수 있다.
  • 혼동 행렬을 통해 군집화 결과와 실제 라벨의 일치/불일치를 정량적으로 확인할 수 있다.

 

 

더 쉽게 얘기해보자면,

  • K-Means는 답을 모르고, 꽃의 모양(데이터 패턴)만 보고 종류를 나누는 방법이다.
    → 이 방식으로는 Setosa는 확실히 구분되지만, 나머지 두 품종은 헷갈릴 수 있다.

 

  • 반면 SVM, KNN, 로지스틱 회귀 같은 방법은 답(품종 이름)을 알고 배우기 때문에
    세 품종 모두 아주 정확하게 맞출 수 있다.

 

 

 

 


 

 

 

실습 3 : 와인 품질 데이터 분류/회귀/군집화 실습

 

기본설정은 실습 1,2와 동일하다. 아래의 Repo를 참고하길 바란다.

https://github.com/somaz94/ml-basics/tree/main/wine_quality

 

ml-basics/wine_quality at main · somaz94/ml-basics

ml-basics. Contribute to somaz94/ml-basics development by creating an account on GitHub.

github.com

 

 

 

 

예제 실행

python3 wine_quality.py
...
와인 품질 데이터 로드 중...
데이터 shape: (1599, 11), 타겟 shape: (1599,)

📘 지도학습 - RandomForest로 와인 품질 등급 분류
RandomForest 분류 정확도: 0.665

📘 지도학습 - LinearRegression으로 와인 품질 점수 예측
LinearRegression MSE: 0.411

📘 비지도학습 - KMeans로 와인 군집화
KMeans 군집 결과(0~2): [855 504 240]
실제 품질 등급 분포: [  0   0   0  10  53 681 638 199  18]

 

 

 

 

 

 

 

 

이외에도 다양한 실습을 할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

궁금한 점: 왜 지도학습과 비지도학습 둘 다 필요할까요?

 

 

지도 학습이 필요한 이유

 

 

1. 정확한 예측이 필요한 경우

  • 예시: 의료 진단
    • 입력: 환자의 증상, 검사 결과
    • 정답: 실제 진단 결과 (암/정상)
    • 목적: 새로운 환자의 진단을 정확히 예측

 

비지도학습의 한계 : 증상만 보고 "비슷한 그룹"으로 나눌수는 있지만, "이 환자가 암인지 아닌지"는 정확히 알 수 없다.

 

 

 

2. 명확한 목표가 있는 비즈니스 문제

  • 예시: 신용카드 사기 탐지
    • 입력: 거래 패턴, 금액, 시간 등
    • 정답: 실제 사기 여부(사기/정상)
    • 목적: 새로운 거래의 사기 여부를 정확히 판단

 

비지도 학습의 한계: "이상한 패턴"은 찾을 수 있지만, "정말 사기인지"는 확신할 수 없다.

 

 

 

 

3. 라벨링턴 데이터가 충분한 경우

  • 예시: 이미지 분류
    • 입력: 고양이/강아지 사진
    • 정답: 실제 동물 종류
    • 목적: 새로운 사진의 동물 종류 예측

 

 

 

비지도 학습이 필요한 이유

 

 

1. 라벨링된 데이터가 없는 경우

  • 실제 상황: 대부분의 데이터는 라벨이 없음
    • 웹사이트 방문 로그
    • 소셜미디어 포스트
    • 센서 데이터
    • 고객 구매 기록

 

지도 학습의 한계: 라벨이 없으면 학습할 수 없다.

 

 

 

 

2. 숨겨진 패턴을 발견하고 싶은 경우

  • 예시: 연구 데이터 분석
    • 입력: 복잡한 실험 데이터
    • 목적: 데이터의 구조와 관계 파악
    • 결과: 예상치 못한 패턴 발견

 

 

 

 

실제 프로젝트에서의 활용

 

 

단계별 접근법

  • 1단계: 비지도학습으로 데이터 탐색 → "어떤 패턴이 있나?" 파악
  • 2단계: 지도학습으로 정확한 예측 → "이 패턴이 무엇을 의미하냐?" 학습

 

 

예시: 온라인 쇼핑몰

  • 비지도학습: 고객 구매 패턴 분석
    • "이 고객들은 비슷한 상품을 산다"
    • "이 그룹은 주로 주말에 구매한다"

 

  • 지도학습: 구매 예측 모델
    • "이 고객이 다음에 무엇을 살 확률이 높다"
    • "이 고객이 이탈할 확률이 높다" 

 

 

 

 각각의 장단점 비교

구분 지도학습  비지도학습
장점 정확한 예측 가능명확한 목표 라벨 불필요새로운 패턴 발견
단점 라벨링된 데이터 필요비용과 시간 소요 정확도 보장 어려움해석이 주관적
적합한 상황 정확한 예측이 중요한 경우 데이터 탐색이 목적인 경우

 

 

 

지도학습은 "정답을 알려주는 것"이 아니라, "정답을 바탕으로 미래를 예측하는 것"이다. 비지도학습은 "정답 없이 패턴을 찾는 것"이다.

둘 다 각자의 역할이 있고, 함께 사용할 때 가장 강력하다.

 

 

 

 

 

 

 


 

 

 

 

 

 

UCI Machine Learning Repository란?

 

  • 미국 캘리포니아 대학교 어바인(UCI)에서 운영하는 공개 데이터셋 저장소이다.
  • 머신러닝(Machine Learning)데이터 사이언스(Data Science) 분야의 연구자들과 학습자들이 가장 많이 참고하는 대표적인 데이터셋 모음이다.
  • 공식 사이트: https://archive.ics.uci.edu/ml

 

 

 

주요 특징

  • 다양한 분야의 데이터셋 제공
    예: 건강, 금융, 생물학, 문자 분류, 이미지 인식 등
  • 정답(Label)이 있는 데이터셋 위주
    → 분류(Classification), 회귀(Regression) 문제를 연습하기에 적합
  • 논문, 강의, 튜토리얼에서 자주 사용됨
    → 알고리즘 성능 비교(벤치마크)나 실습에 활용됨
  • 무료로 누구나 접근 가능

 

 

 

 

 

 

 

 


 

 

 

 

 

마무리

머신러닝의 세계는 “정답이 있는가, 없는가”에서 출발한다.

  • 지도학습은 정답(라벨)이 있는 데이터로부터 예측 모델을 만들고,
  • 비지도학습은 정답 없이 데이터의 숨겨진 구조나 패턴을 찾아낸다.

 

 

실습을 통해 알 수 있듯,

  • 지도학습은 높은 정확도로 분류가 가능하지만,
  • 비지도학습은 데이터의 특성에 따라 군집이 완벽히 일치하지 않을 수 있다.

 

 

또한,

  • 유사도는 데이터 간의 닮은 정도를 수치로 표현하고,
  • 호환성은 두 개체가 함께 있을 때의 조합 적합도를 평가한다.

 

 

이처럼 머신러닝의 다양한 개념을 실제 데이터와 코드로 실습해보면,

이론적 정의뿐 아니라 실제 데이터에서의 한계와 해석까지 자연스럽게 이해할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Reference

 

 

 

 

 

728x90
반응형