Scikit-learn 기초 완전 정복
파이썬 머신러닝 라이브러리 Scikit-learn의 기초부터 실전 활용까지. 데이터 전처리, 지도학습, 비지도학습, 모델 평가 등 핵심 개념을 단계별로 학습합니다.
학습 항목
본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
이미지 로딩 중...
Scikit-learn 소개 및 설치 완벽 가이드
파이썬 머신러닝의 필수 라이브러리인 Scikit-learn을 처음 시작하는 분들을 위한 가이드입니다. 설치부터 첫 번째 예제 실행까지 차근차근 알아봅니다.
목차
1. Scikit-learn이란 무엇인가?
김개발 씨는 최근 회사에서 새로운 프로젝트를 맡게 되었습니다. 고객 이탈을 예측하는 머신러닝 모델을 만들어야 하는데, 어디서부터 시작해야 할지 막막했습니다.
선배 박시니어 씨에게 조언을 구하자, 돌아온 대답은 간단했습니다. "Scikit-learn부터 배워보세요."
Scikit-learn은 파이썬에서 머신러닝을 가장 쉽게 구현할 수 있게 해주는 라이브러리입니다. 마치 요리사에게 잘 정리된 주방 도구 세트가 있는 것처럼, 개발자에게 Scikit-learn은 머신러닝의 모든 도구가 깔끔하게 정리된 도구 상자와 같습니다.
분류, 회귀, 클러스터링 등 다양한 알고리즘을 일관된 인터페이스로 사용할 수 있어서, 초보자도 빠르게 머신러닝을 시작할 수 있습니다.
다음 코드를 살펴봅시다.
# Scikit-learn의 기본 구조 이해하기
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 모든 모델이 동일한 패턴을 따릅니다
model = RandomForestClassifier() # 1. 모델 생성
model.fit(X_train, y_train) # 2. 학습
predictions = model.predict(X_test) # 3. 예측
score = accuracy_score(y_test, predictions) # 4. 평가
# 이 패턴만 기억하면 어떤 알고리즘이든 사용할 수 있습니다
김개발 씨는 입사한 지 6개월 된 주니어 개발자입니다. 웹 개발은 어느 정도 익숙해졌지만, 머신러닝이라는 단어만 들으면 왠지 어렵게 느껴졌습니다.
수학 공식도 많이 나올 것 같고, 복잡한 알고리즘을 직접 구현해야 할 것만 같았습니다. 그런 김개발 씨에게 박시니어 씨가 말했습니다.
"머신러닝이 어렵다고요? Scikit-learn을 쓰면 생각보다 훨씬 쉬워요.
복잡한 수학은 라이브러리가 다 처리해줍니다." 그렇다면 Scikit-learn이란 정확히 무엇일까요? 쉽게 비유하자면, Scikit-learn은 마치 레고 블록 세트와 같습니다.
레고로 집을 지을 때 벽돌을 직접 굽지 않아도 되듯이, Scikit-learn을 사용하면 복잡한 머신러닝 알고리즘을 직접 구현하지 않아도 됩니다. 이미 잘 만들어진 블록들을 조립하기만 하면 됩니다.
Scikit-learn이 없던 시절에는 어땠을까요? 개발자들은 머신러닝 알고리즘을 처음부터 직접 구현해야 했습니다.
경사하강법의 수학 공식을 코드로 옮기고, 최적화 과정을 일일이 작성해야 했습니다. 실수 하나면 모델 전체가 제대로 동작하지 않았습니다.
더 큰 문제는 각 알고리즘마다 사용법이 제각각이었다는 것입니다. 어떤 라이브러리는 fit 메서드를 쓰고, 어떤 것은 train을 썼습니다.
새로운 알고리즘을 배울 때마다 처음부터 다시 공부해야 했습니다. 바로 이런 문제를 해결하기 위해 Scikit-learn이 등장했습니다.
Scikit-learn의 가장 큰 장점은 일관된 API입니다. 어떤 알고리즘을 사용하든 fit으로 학습하고, predict로 예측합니다.
의사결정나무든, 랜덤포레스트든, 서포트벡터머신이든 모두 같은 방식으로 사용할 수 있습니다. 위의 코드를 살펴보면 이 패턴이 명확하게 드러납니다.
먼저 모델 객체를 생성합니다. 그 다음 fit 메서드로 데이터를 학습시킵니다.
마지막으로 predict 메서드로 새로운 데이터에 대한 예측을 수행합니다. 이 세 단계만 기억하면 Scikit-learn의 거의 모든 알고리즘을 사용할 수 있습니다.
실제 현업에서는 어떻게 활용할까요? 예를 들어 쇼핑몰에서 고객 이탈을 예측한다고 가정해봅시다.
고객의 구매 이력, 방문 빈도, 최근 접속일 등의 데이터를 수집합니다. 이 데이터를 Scikit-learn의 분류 모델에 학습시키면, 어떤 고객이 이탈할 가능성이 높은지 예측할 수 있습니다.
박시니어 씨가 덧붙였습니다. "Scikit-learn은 구글, 페이스북 같은 대기업에서도 프로토타입을 만들 때 많이 씁니다.
빠르게 아이디어를 검증하기에 최고예요." 김개발 씨는 고개를 끄덕였습니다. 머신러닝이 생각보다 접근하기 쉬운 분야라는 것을 깨달았습니다.
Scikit-learn이라는 든든한 도구가 있으니, 이제 첫 발을 내딛을 준비가 된 것 같았습니다.
실전 팁
💡 - Scikit-learn은 sklearn으로 import합니다 (scikit-learn이 아님)
- 공식 문서(scikit-learn.org)에 예제가 풍부하니 자주 참고하세요
- 모든 모델이 fit-predict 패턴을 따른다는 것을 기억하세요
2. Scikit-learn의 역사와 특징
김개발 씨는 Scikit-learn을 본격적으로 공부하기 전에, 이 라이브러리가 어떻게 시작되었는지 궁금해졌습니다. 왜 이름이 Scikit인지, 왜 이렇게 많은 개발자들이 사용하는지 알고 싶었습니다.
도구를 제대로 쓰려면 그 도구의 철학을 이해하는 것이 중요하다고 박시니어 씨가 항상 말했기 때문입니다.
Scikit-learn은 2007년 구글 썸머 오브 코드 프로젝트로 시작되었습니다. SciPy Toolkit의 줄임말인 Scikit에서 이름을 따왔으며, 현재는 전 세계에서 가장 널리 사용되는 머신러닝 라이브러리입니다.
오픈소스이면서도 상업적 사용이 자유로운 BSD 라이센스를 채택하고 있어, 스타트업부터 대기업까지 누구나 부담 없이 사용할 수 있습니다.
다음 코드를 살펴봅시다.
# Scikit-learn이 제공하는 다양한 기능들
from sklearn.linear_model import LinearRegression # 회귀
from sklearn.tree import DecisionTreeClassifier # 분류
from sklearn.cluster import KMeans # 클러스터링
from sklearn.decomposition import PCA # 차원축소
from sklearn.preprocessing import StandardScaler # 전처리
from sklearn.model_selection import cross_val_score # 교차검증
from sklearn.pipeline import Pipeline # 파이프라인
# 하나의 라이브러리에서 ML의 모든 것을 다룹니다
# 데이터 전처리부터 모델 학습, 평가까지 일관된 방식으로!
박시니어 씨가 커피를 한 잔 내려주며 이야기를 시작했습니다. "Scikit-learn의 역사를 알면 왜 이 라이브러리가 이렇게 설계되었는지 이해할 수 있어요." 2007년, 프랑스의 데이비드 쿠르나포가 구글 썸머 오브 코드 프로젝트로 이 라이브러리를 시작했습니다.
당시 목표는 단순했습니다. 파이썬에서 머신러닝을 쉽게 할 수 있는 도구를 만들자는 것이었습니다.
Scikit이라는 이름은 SciPy Toolkit에서 왔습니다. SciPy는 과학 계산을 위한 파이썬 라이브러리인데, 그 생태계를 확장하는 도구라는 의미를 담고 있습니다.
거기에 machine learning의 learn을 붙여서 Scikit-learn이 되었습니다. 처음에는 작은 프로젝트였지만, 점점 많은 개발자들이 참여하면서 성장했습니다.
INRIA(프랑스 국립 정보학 연구소)의 지원을 받으며 본격적인 오픈소스 프로젝트로 발전했습니다. Scikit-learn의 가장 큰 특징은 일관성입니다.
모든 모델이 같은 인터페이스를 따릅니다. fit 메서드로 학습하고, predict 메서드로 예측합니다.
transform 메서드로 데이터를 변환합니다. 이런 일관성 덕분에 새로운 알고리즘을 배우는 시간이 크게 줄어듭니다.
두 번째 특징은 문서화입니다. 공식 문서가 매우 잘 정리되어 있고, 각 알고리즘마다 실제 동작하는 예제 코드가 포함되어 있습니다.
튜토리얼도 풍부해서 독학하기에 최적화되어 있습니다. 세 번째 특징은 NumPy, Pandas와의 완벽한 호환입니다.
파이썬 데이터 과학 생태계의 표준 라이브러리들과 자연스럽게 연동됩니다. NumPy 배열을 그대로 입력으로 받고, 결과도 NumPy 배열로 반환합니다.
김개발 씨가 물었습니다. "그런데 딥러닝 시대에 Scikit-learn이 아직도 중요한가요?" 박시니어 씨가 고개를 끄덕였습니다.
"물론이죠. 모든 문제에 딥러닝이 필요한 건 아니에요.
정형 데이터를 다루는 대부분의 비즈니스 문제는 Scikit-learn의 전통적인 머신러닝 알고리즘으로 충분히 해결할 수 있습니다. 오히려 더 빠르고 해석하기도 쉽죠." 실제로 캐글 같은 데이터 사이언스 경진대회에서도 정형 데이터 문제는 XGBoost나 LightGBM 같은 트리 기반 모델이 여전히 강세입니다.
이런 라이브러리들도 Scikit-learn의 API를 따르고 있어서, Scikit-learn을 익히면 자연스럽게 사용할 수 있습니다. BSD 라이센스라는 점도 중요합니다.
상업적 사용에 제한이 없어서 회사 프로젝트에도 자유롭게 활용할 수 있습니다. 코드를 공개할 의무도 없습니다.
김개발 씨는 Scikit-learn이 단순한 라이브러리가 아니라, 15년 넘게 수많은 개발자들의 노력이 담긴 프로젝트라는 것을 알게 되었습니다. 그 역사와 철학을 이해하니, 더욱 신뢰가 갔습니다.
실전 팁
💡 - Scikit-learn은 딥러닝은 지원하지 않습니다. 딥러닝에는 TensorFlow나 PyTorch를 사용하세요
- GitHub에서 scikit-learn 저장소를 팔로우하면 최신 업데이트를 확인할 수 있습니다
3. pip으로 설치하기
이제 본격적으로 Scikit-learn을 설치할 시간입니다. 김개발 씨는 터미널을 열고 설치를 시작하려 했습니다.
파이썬 패키지 설치의 기본인 pip을 사용하면 간단하게 설치할 수 있다고 들었습니다. 하지만 막상 시작하려니 몇 가지 주의할 점이 있었습니다.
pip은 파이썬의 공식 패키지 관리자로, Scikit-learn을 설치하는 가장 기본적인 방법입니다. 명령어 한 줄로 Scikit-learn과 필요한 의존성 패키지들이 자동으로 설치됩니다.
다만 가상환경을 먼저 만들어서 프로젝트별로 패키지를 분리하는 것이 좋은 습관입니다.
다음 코드를 살펴봅시다.
# 1. 가상환경 생성 (프로젝트 폴더에서 실행)
python -m venv ml_env
# 2. 가상환경 활성화
# Windows:
ml_env\Scripts\activate
# macOS/Linux:
source ml_env/bin/activate
# 3. pip 업그레이드 (권장)
pip install --upgrade pip
# 4. Scikit-learn 설치
pip install scikit-learn
# 5. 관련 라이브러리도 함께 설치 (권장)
pip install numpy pandas matplotlib jupyter
김개발 씨가 터미널을 열었습니다. 박시니어 씨가 옆에서 조언했습니다.
"잠깐, 바로 설치하기 전에 가상환경부터 만들어요." 가상환경이란 무엇일까요? 마치 집 안에 여러 개의 방이 있는 것과 같습니다.
각 방에는 다른 가구를 둘 수 있듯이, 각 가상환경에는 다른 버전의 패키지를 설치할 수 있습니다. A 프로젝트에서는 Scikit-learn 1.2를 쓰고, B 프로젝트에서는 1.3을 쓸 수 있습니다.
가상환경 없이 설치하면 어떤 문제가 생길까요? 여러 프로젝트가 같은 패키지의 다른 버전을 필요로 할 때 충돌이 발생합니다.
한 프로젝트를 수정하다가 다른 프로젝트가 망가지는 상황이 생길 수 있습니다. 이런 문제를 의존성 지옥이라고 부릅니다.
박시니어 씨가 말했습니다. "먼저 python -m venv 명령어로 가상환경을 만들어요.
ml_env는 가상환경 이름인데, 원하는 대로 지어도 됩니다." 가상환경을 만들었으면 활성화해야 합니다. Windows에서는 Scripts 폴더 안의 activate를 실행하고, macOS나 Linux에서는 source 명령어를 사용합니다.
활성화되면 터미널 앞에 (ml_env) 같은 표시가 나타납니다. 다음으로 pip 자체를 최신 버전으로 업그레이드합니다.
pip install --upgrade pip 명령어를 실행하면 됩니다. 오래된 pip은 가끔 설치 오류를 일으키기 때문에, 이 단계를 거치는 것이 좋습니다.
이제 드디어 본격적인 설치입니다. pip install scikit-learn을 입력하면 설치가 시작됩니다.
Scikit-learn은 NumPy, SciPy, joblib 같은 패키지에 의존하는데, pip이 자동으로 이들도 함께 설치해줍니다. 김개발 씨가 물었습니다.
"그런데 numpy나 pandas는 따로 설치해야 하나요?" 박시니어 씨가 답했습니다. "Scikit-learn을 설치하면 NumPy는 자동으로 설치되지만, Pandas나 Matplotlib은 별도로 설치해야 해요.
데이터 분석을 제대로 하려면 이것들도 필요하니까 함께 설치하는 게 좋습니다." pip install numpy pandas matplotlib jupyter 명령어로 관련 라이브러리들을 한 번에 설치할 수 있습니다. Jupyter는 코드를 대화형으로 실행하고 결과를 바로 확인할 수 있어서 머신러닝 학습에 매우 유용합니다.
설치가 완료되면 Successfully installed 메시지가 나타납니다. 이제 Scikit-learn을 사용할 준비가 되었습니다.
실전 팁
💡 - 가상환경은 프로젝트마다 새로 만드는 것이 좋습니다
- pip freeze > requirements.txt로 설치된 패키지 목록을 저장해두세요
- 설치 중 오류가 나면 pip를 먼저 업그레이드해보세요
4. Anaconda 환경에서 설치
김개발 씨의 동료 이주니어 씨는 Anaconda를 사용하고 있었습니다. "나는 conda로 설치할 건데, 방법이 다른가요?" 이주니어 씨의 질문에 박시니어 씨가 Anaconda 환경에서의 설치 방법도 알려주기로 했습니다.
데이터 사이언스를 하는 사람들 사이에서 Anaconda는 매우 인기 있는 선택이기 때문입니다.
Anaconda는 데이터 사이언스에 필요한 패키지들을 한 번에 설치해주는 배포판입니다. Anaconda를 설치하면 Scikit-learn이 이미 포함되어 있어서 별도 설치가 필요 없는 경우가 많습니다.
만약 설치가 필요하다면 conda 명령어를 사용하면 됩니다. conda는 pip보다 의존성 관리가 더 철저해서 패키지 충돌이 적습니다.
다음 코드를 살펴봅시다.
# Anaconda 환경에서 Scikit-learn 설치하기
# 1. 새로운 conda 환경 생성
conda create -n ml_project python=3.10
# 2. 환경 활성화
conda activate ml_project
# 3. Scikit-learn 설치 (conda-forge 채널 사용 권장)
conda install -c conda-forge scikit-learn
# 4. 또는 기본 채널에서 설치
conda install scikit-learn
# 5. 관련 패키지 한 번에 설치
conda install numpy pandas matplotlib jupyter scikit-learn
이주니어 씨가 자신의 노트북 화면을 보여주었습니다. Anaconda Navigator가 설치되어 있었습니다.
박시니어 씨가 설명을 시작했습니다. "Anaconda를 쓰면 사실 Scikit-learn이 이미 설치되어 있을 거예요.
Anaconda는 데이터 사이언스에 필요한 250개 이상의 패키지를 기본으로 포함하거든요." Anaconda와 pip의 차이점은 무엇일까요? 마치 pip이 개별 재료를 하나씩 사는 것이라면, Anaconda는 요리에 필요한 모든 재료가 담긴 밀키트를 사는 것과 같습니다.
편리하지만 용량이 크고, 모든 재료가 다 필요하지 않을 수도 있습니다. Anaconda의 가장 큰 장점은 의존성 관리입니다.
conda는 패키지를 설치할 때 다른 패키지들과의 호환성을 미리 확인합니다. pip은 가끔 서로 맞지 않는 버전의 패키지를 설치해서 문제를 일으키지만, conda는 이런 충돌을 미리 방지합니다.
새로운 프로젝트를 시작할 때는 conda 환경을 새로 만드는 것이 좋습니다. conda create -n ml_project python=3.10 명령어로 파이썬 3.10을 사용하는 새 환경을 만듭니다.
ml_project는 환경 이름으로, 원하는 대로 지정할 수 있습니다. 환경을 만들었으면 conda activate ml_project로 활성화합니다.
터미널에 (ml_project)라는 표시가 나타나면 성공입니다. 이제 Scikit-learn을 설치해봅시다.
conda install scikit-learn 명령어를 사용합니다. 여기서 conda-forge 채널을 사용하면 더 최신 버전을 받을 수 있습니다.
conda-forge는 커뮤니티가 관리하는 패키지 저장소로, 공식 채널보다 업데이트가 빠릅니다. 이주니어 씨가 물었습니다.
"pip이랑 conda를 섞어서 써도 되나요?" 박시니어 씨가 주의를 주었습니다. "가능하지만 권장하지 않아요.
같은 환경에서 pip과 conda를 섞어 쓰면 의존성 추적이 꼬일 수 있거든요. conda 환경에서는 가급적 conda로만 설치하세요.
꼭 pip을 써야 한다면 conda로 설치할 수 있는 건 먼저 conda로 설치하고, 나머지만 pip으로 설치하세요." Anaconda Navigator를 사용하면 GUI로도 패키지를 관리할 수 있습니다. 터미널이 익숙하지 않은 분들에게는 이 방법도 좋은 선택입니다.
Environments 탭에서 환경을 선택하고, Not installed 목록에서 scikit-learn을 찾아 Apply 버튼을 누르면 됩니다. 이주니어 씨가 만족스러운 표정을 지었습니다.
"생각보다 간단하네요!"
실전 팁
💡 - Miniconda는 Anaconda의 경량 버전으로, 필요한 패키지만 설치하고 싶을 때 좋습니다
- conda list로 설치된 패키지 목록을 확인할 수 있습니다
- conda env export > environment.yml로 환경 설정을 저장해두세요
5. 설치 확인 및 버전 체크
설치가 끝났다고 안심하기엔 이릅니다. 김개발 씨는 예전에 패키지가 제대로 설치되지 않아서 한참을 헤맨 적이 있었습니다.
그래서 박시니어 씨는 항상 설치 후에 확인하는 습관을 강조했습니다. "설치했으면 확인까지 해야 진짜 끝난 거예요."
패키지 설치 후에는 반드시 제대로 설치되었는지 확인해야 합니다. Python 인터프리터에서 import 해보고, 버전을 출력해보는 것이 가장 확실한 방법입니다.
의존성 패키지들의 버전도 함께 확인하면 나중에 문제가 생겼을 때 디버깅하기 쉬워집니다.
다음 코드를 살펴봅시다.
# 설치 확인 및 버전 체크
import sklearn
print(f"Scikit-learn 버전: {sklearn.__version__}")
# 의존성 패키지 버전도 확인
import numpy as np
import scipy
print(f"NumPy 버전: {np.__version__}")
print(f"SciPy 버전: {scipy.__version__}")
# 더 자세한 시스템 정보 확인
sklearn.show_versions()
# 간단한 동작 테스트
from sklearn.datasets import load_iris
iris = load_iris()
print(f"Iris 데이터셋 로드 성공: {iris.data.shape}")
박시니어 씨가 말했습니다. "설치가 끝났으면 파이썬을 열어서 확인해봐요." 김개발 씨가 터미널에 python을 입력하고 파이썬 인터프리터를 실행했습니다.
그리고 import sklearn을 입력했습니다. 아무 에러 없이 다음 줄로 넘어갔습니다.
이것만으로도 기본적인 설치는 성공한 것입니다. 하지만 여기서 멈추면 안 됩니다.
sklearn.__version__을 출력해봅니다. 현재 설치된 Scikit-learn의 버전이 표시됩니다.
이 정보는 나중에 버그를 보고하거나, 특정 기능이 지원되는지 확인할 때 필요합니다. 박시니어 씨가 조언했습니다.
"버전 번호를 어딘가에 메모해두세요. 나중에 같은 환경을 재현해야 할 때 유용해요." 의존성 패키지들의 버전도 확인하는 것이 좋습니다.
Scikit-learn은 NumPy와 SciPy에 의존하는데, 이들의 버전이 맞지 않으면 예상치 못한 오류가 발생할 수 있습니다. 더 자세한 정보가 필요하다면 sklearn.show_versions() 함수를 사용합니다.
이 함수는 Scikit-learn뿐만 아니라 파이썬 버전, 운영체제, 관련 라이브러리들의 버전을 모두 한 번에 보여줍니다. 김개발 씨가 show_versions()를 실행해봤습니다.
화면에 시스템 정보가 쭉 출력되었습니다. "와, 이렇게 많은 정보가 나오네요." 박시니어 씨가 설명했습니다.
"문제가 생겨서 Stack Overflow에 질문할 때 이 정보를 붙여넣으면 답변을 받기가 훨씬 수월해요. 환경 정보 없이 질문하면 '버전이 뭐예요?'라는 역질문만 받거든요." 마지막으로 간단한 동작 테스트를 해봅니다.
Scikit-learn에는 연습용 데이터셋이 내장되어 있는데, 그중 가장 유명한 것이 Iris 데이터셋입니다. load_iris 함수로 이 데이터를 불러와봅니다.
iris.data.shape를 출력하면 (150, 4)라는 결과가 나옵니다. 150개의 샘플과 4개의 특성을 가진 데이터라는 뜻입니다.
이것이 정상적으로 출력되면 Scikit-learn이 완벽하게 동작하는 것입니다. 김개발 씨가 안도의 한숨을 내쉬었습니다.
"휴, 이제 진짜 준비가 끝났네요."
실전 팁
💡 - 버전 정보는 requirements.txt나 README에 기록해두세요
- 팀 프로젝트에서는 모든 팀원이 같은 버전을 사용하도록 맞추세요
- sklearn.show_versions() 출력은 버그 리포트에 필수입니다
6. 첫 번째 예제 실행하기
드디어 모든 준비가 끝났습니다. 김개발 씨의 손가락이 키보드 위에서 두근거렸습니다.
이론으로만 배웠던 머신러닝을 직접 실행해볼 시간입니다. 박시니어 씨가 가장 기본적이면서도 의미 있는 예제를 알려주기로 했습니다.
붓꽃의 종류를 예측하는 클래식한 문제입니다.
Iris 데이터셋은 머신러닝의 "Hello World"와 같습니다. 붓꽃의 꽃잎과 꽃받침 크기를 바탕으로 세 가지 품종을 분류하는 문제입니다.
이 예제를 통해 Scikit-learn의 기본 워크플로우인 데이터 로드, 분할, 모델 학습, 예측, 평가의 전체 과정을 경험할 수 있습니다.
다음 코드를 살펴봅시다.
# 첫 번째 머신러닝 예제: 붓꽃 품종 분류
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 1. 데이터 로드
iris = load_iris()
X, y = iris.data, iris.target
# 2. 학습용/테스트용 데이터 분할 (80% 학습, 20% 테스트)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 3. 모델 생성 및 학습
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
# 4. 예측 및 평가
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f"정확도: {accuracy:.2%}") # 출력: 정확도: 100.00%
박시니어 씨가 새 파이썬 파일을 열었습니다. "자, 이제 진짜 머신러닝을 해봅시다." 첫 번째 단계는 데이터를 로드하는 것입니다.
load_iris 함수를 호출하면 Scikit-learn에 내장된 붓꽃 데이터셋을 가져옵니다. 이 데이터셋에는 150개의 붓꽃 샘플이 있고, 각 샘플은 꽃잎 길이, 꽃잎 너비, 꽃받침 길이, 꽃받침 너비라는 4개의 특성을 가지고 있습니다.
김개발 씨가 물었습니다. "X와 y는 뭔가요?" 박시니어 씨가 설명했습니다.
"머신러닝에서 X는 입력 데이터, 즉 특성들을 의미해요. y는 정답, 즉 우리가 예측하고 싶은 값입니다.
붓꽃 예제에서 X는 꽃의 크기 정보이고, y는 품종입니다." 두 번째 단계는 데이터를 나누는 것입니다. 왜 데이터를 나눌까요?
마치 시험공부를 할 때 연습문제와 실전문제를 구분하는 것과 같습니다. 연습문제로 공부하고, 실전문제로 실력을 확인합니다.
머신러닝에서는 학습용 데이터로 모델을 훈련하고, 테스트용 데이터로 성능을 평가합니다. train_test_split 함수가 이 작업을 해줍니다.
test_size=0.2는 전체 데이터의 20%를 테스트용으로 사용한다는 뜻입니다. random_state=42는 매번 같은 방식으로 나누기 위한 시드 값입니다.
42는 개발자들 사이에서 관례적으로 많이 쓰는 숫자입니다. 세 번째 단계는 모델을 만들고 학습시키는 것입니다.
이 예제에서는 KNN(K-최근접 이웃) 알고리즘을 사용합니다. KNN은 가장 직관적인 알고리즘 중 하나입니다.
새로운 데이터가 들어오면 가장 가까운 K개의 이웃을 찾아서, 그 이웃들 중 다수결로 분류합니다. n_neighbors=3은 가장 가까운 3개의 이웃을 본다는 의미입니다.
모델을 만들었으면 fit 메서드로 학습시킵니다. X_train과 y_train을 넣어주면 모델이 데이터의 패턴을 학습합니다.
네 번째 단계는 예측하고 평가하는 것입니다. 학습된 모델에 테스트 데이터 X_test를 넣어 predict를 호출합니다.
모델이 각 테스트 샘플에 대해 품종을 예측합니다. 이 예측값을 실제 정답 y_test와 비교해서 정확도를 계산합니다.
김개발 씨가 코드를 실행했습니다. 화면에 "정확도: 100.00%"가 출력되었습니다.
"와, 100%요? 이게 맞나요?" 박시니어 씨가 미소 지었습니다.
"Iris 데이터셋은 패턴이 명확해서 간단한 알고리즘으로도 높은 정확도가 나와요. 실제 업무에서는 이렇게 깔끔한 데이터가 드물지만, 처음 연습하기엔 완벽한 예제입니다." 김개발 씨는 뿌듯함을 느꼈습니다.
방금 그가 작성한 10여 줄의 코드가 진짜 머신러닝이었습니다. 데이터를 학습하고, 새로운 데이터에 대해 예측을 수행했습니다.
복잡한 수학 공식 없이도 Scikit-learn이 모든 것을 처리해주었습니다. "이제 시작이에요." 박시니어 씨가 말했습니다.
"다른 알고리즘들도 이와 똑같은 패턴으로 사용할 수 있어요. fit하고 predict하는 것, 이것만 기억하세요."
실전 팁
💡 - random_state를 고정하면 결과를 재현할 수 있어 디버깅에 유용합니다
- 데이터 분할 비율은 보통 80:20 또는 70:30을 많이 사용합니다
- KNN 외에 DecisionTreeClassifier, RandomForestClassifier 등도 같은 방식으로 사용해보세요
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!