-
혼공머신 Ch 01 나의 첫 머신러닝Study/머신러닝 딥러닝 2025. 9. 21. 16:10

머신러닝 첫걸음: k-최근접 이웃(k-NN)으로 생선 종류 구분하기
목차
- 들어가며: AI, 머신러닝, 딥러닝? 개념 잡고 시작하기
- 1단계: 데이터와 친해지기 (데이터 준비 및 분석)
- 2단계: 똑똑한 분류 모델 만들기 (k-최근접 이웃 알고리즘)
- 마치며: 첫 모델의 의미와 다음 단계
1. 들어가며: AI, 머신러닝, 딥러닝? 개념 잡고 시작하기

'인공지능', '머신러닝', '딥러닝'. 최근 뉴스나 기술 문서에서 정말 자주 보이는 단어들이지만,
많은 분들이 그 차이를 명확히 구분하기 어려워합니다. 본격적인 실습에 앞서, 이들의 관계를 간단히 정리하고 넘어가겠습니다.
- 인공지능 (Artificial Intelligence, AI):
가장 넓은 개념입니다. 인간의 학습, 추론, 지각 능력 등을 컴퓨터를 통해 구현하는 모든 기술을 의미합니다.
마치 사람처럼 생각하고 행동하는 기계를 만들려는 거대한 목표라고 할 수 있습니다. - 머신러닝 (Machine Learning, ML):
인공지능을 구현하는 하나의 방법입니다. 기
계에게 명시적인 규칙을 프로그래밍하는 대신, 데이터를 주고 스스로 학습하게 하여 특정 패턴이나 규칙을 찾아내게 하는 방식입니다. - 딥러닝 (Deep Learning, DL):
머신러닝의 한 분야로, 인간의 뇌 신경망을 모방한 '인공 신경망'을 깊게(Deep) 쌓아올려 학습하는 기술입니다.
특히 이미지나 음성 인식처럼 복잡하고 방대한 데이터 속에서 패턴을 찾아내는 데 아주 뛰어난 성능을 보입니다.
쉽게 말해 AI > 머신러닝 > 딥러닝 순으로 포함되는 관계입니다.
이 글에서는 인공지능을 구현하는 핵심 방법론인 머신러닝의 세계에 첫발을 내디뎌 보겠습니다.'도미'와 '빙어'라는 두 생선 데이터를 가지고, 데이터 준비부터 모델 훈련, 예측까지의 전 과정을 쉽고 재미있게 따라가 보겠습니다.
2. 1단계: 데이터와 친해지기 (데이터 준비 및 분석)
모든 머신러닝 프로젝트의 시작은 데이터를 이해하는 것입니다.
우리가 가진 데이터가 어떤 특징을 가지고 있는지 파악해야만 좋은 모델을 만들 수 있습니다.
2-1 데이터 준비: 특징(Features)과 정답(Target) 나누기
먼저, 분석에 사용할 도미와 빙어의 길이(length)와 무게(weight) 데이터를 준비합니다.
머신러닝에서는 모델이 학습해야 할 문제지, 즉 입력 특성(features)과 정답지인 정답 레이블(target)을 명확하게 구분해야 합니다.
- 입력 특성(Features): 생선의 길이와 무게
- 정답 레이블(Target): 생선의 종류 (도미 또는 빙어)
Pythonimport matplotlib.pyplot as plt # 도미(bream) 데이터 bream_length = [25.4, 26.3, 26.5, 27.0, 27.0, 27.0, 27.0, 27.5, 27.5, 27.7, 28.0, 28.0, 28.0, 28.5, 28.5, 28.7, 28.7, 29.0, 29.0, 29.0, 29.5, 29.5, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0] bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0, 650.0, 700.0, 750.0, 800.0, 820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0, 1000.0, 1000.0, 950.0] # 빙어(smelt) 데이터 smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0] smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]2-2 데이터 시각화: 산점도로 패턴 찾기
데이터를 눈으로 직접 확인하는 것만큼 확실한 방법은 없습니다.
산점도(Scatter plot)를 그려보면 길이와 무게에 따라 두 생선 그룹이 어떻게 분포하는지 한눈에 파악할 수 있습니다.
# 산점도 시각화 plt.scatter(bream_length, bream_weight) plt.scatter(smelt_length, smelt_weight) plt.xlabel('length') plt.ylabel('weight') plt.show()
위 그래프를 보면 두 생선 그룹이 길이와 무게에 따라 명확히 구분되는 것을 확인할 수 있습니다.
이런 데이터라면 머신러닝 모델이 아주 쉽게 분류를 해낼 수 있겠죠?
3. 2단계: 똑똑한 분류 모델 만들기 (k-최근접 이웃 알고리즘)
이제 준비된 데이터를 바탕으로 본격적으로 분류 모델을 만들어 보겠습니다.
3-1 k-최근접 이웃(k-NN) 알고리즘이란?
k-NN은 "주변의 가장 가까운 k개 데이터를 보고 내 정체를 결정한다"는 아주 간단하고 직관적인 원리를 가진 알고리즘입니다.
예를 들어, 새로운 생선 데이터가 주어졌을 때, 그 생선과 가장 가까운 거리에 있는 기존 생선 k개를 찾아봅니다.
그 k개 중에서 도미가 더 많으면 '도미', 빙어가 더 많으면 '빙어'라고 예측하는 방식이죠.
3-2 모델 훈련 및 평가
scikit-learn 라이브러리를 사용하면 k-NN 모델을 몇 줄의 코드로 간단히 구현할 수 있습니다. 먼저,
데이터를 scikit-learn이 이해할 수 있는 형태로 가공하고, 모델을 생성하여 훈련(fit)시킵니다.
from sklearn.neighbors import KNeighborsClassifier # 1. 데이터 합치기 및 scikit-learn 입력 형태로 변환 length = bream_length + smelt_length weight = bream_weight + smelt_weight # 입력 데이터: [[길이, 무게], [길이, 무게], ...] fish_data = [[l, w] for l, w in zip(length, weight)] # 정답 데이터: [1, 1, ..., 0, 0, ...] (도미=1, 빙어=0) fish_target = [1] * 35 + [0] * 14 # 2. k-NN 모델 생성 및 훈련 kn = KNeighborsClassifier() kn.fit(fish_data, fish_target) # 3. 모델 성능 평가 (정확도) score = kn.score(fish_data, fish_target) print(score) # 출력 결과: 1.0score() 메서드로 확인한 모델의 정확도(Accuracy)가 1.0, 즉 100%가 나왔습니다.
이는 모델이 우리가 가진 모든 훈련 데이터를 완벽하게 분류해냈다는 의미입니다.
3-3 새로운 데이터로 예측하기
이제 훈련된 모델이 실제로 잘 작동하는지 테스트해 볼 시간입니다.
예를 들어, 길이가 30cm이고 무게가 600g인 새로운 생선이 있다면 어떤 종류일까요?
predict() 메서드로 확인해 보겠습니다.
# 새로운 데이터 예측 prediction = kn.predict([[30, 600]]) print(prediction) # 출력 결과: [1]모델은 이 생선을 [1], 즉 도미라고 정확하게 예측했습니다.
우리의 첫 머신러닝 모델이 성공적으로 새로운 데이터를 분류해낸 순간입니다!
4. 마치며: 첫 모델의 의미와 다음 단계
오늘 우리는 도미와 빙어 데이터를 가지고 데이터 분석부터 모델 훈련, 평가, 예측에 이르는 머신러닝의 전체 과정을 경험했습니다.
비록 간단한 예제였지만, 이 과정을 통해 머신러닝이 데이터를 기반으로 어떻게 패턴을 학습하고 예측을 수행하는지에 대한 핵심적인 아이디어를 얻으셨을 겁니다.
물론, 실제 프로젝트에서는 데이터를 더 정교하게 다듬고, 다양한 알고리즘을 비교하며, 모델의 성능을 더욱 끌어올리는 과정이 필요합니다. 하지만 모든 위대한 여정은 첫걸음부터 시작하는 법이죠. 오늘 여러분이 내디딘 이 첫걸음이 앞으로 더 복잡하고 흥미로운 머신러닝의 세계를 탐험하는 훌륭한 시작점이 되기를 바랍니다.
코드 출처: https://github.com/rickiepark/hg-mldl2/blob/main/01-3.ipynb
hg-mldl2/01-3.ipynb at main · rickiepark/hg-mldl2
<혼자 공부하는 머신러닝+딥러닝(개정판)>(한빛미디어, 2025)의 코드 저장소입니다. Contribute to rickiepark/hg-mldl2 development by creating an account on GitHub.
github.com
자료 및 강의 출처:
https://www.youtube.com/watch?v=ImZwjGjwVqI&list=PLVsNizTWUw7E2RxZ4aspcR9vNamXccmFE&index=2
'Study > 머신러닝 딥러닝' 카테고리의 다른 글
혼공머신 CH 06 비지도 학습 (0) 2025.09.26 혼공머신 CH 05 트리 알고리즘 (0) 2025.09.25 혼공머신 Ch 04 다양한 분류 알고리즘 (0) 2025.09.24 혼공머신 Ch 03 회귀 알고리즘과 모델 규제 (0) 2025.09.23 혼공머신 Ch 02 데이터 다루기 (1) 2025.09.22