파이썬 머신러닝 완벽 가이드: 기초부터 실전 적용까지
머신러닝은 데이터를 기반으로 패턴을 학습하고 예측을 수행하는 기술로, 인공지능(AI)의 핵심 기술 중 하나입니다. 특히 파이썬(Python)은 강력한 라이브러리와 직관적인 문법을 제공하여 머신러닝 개발에 가장 널리 사용되는 언어입니다.
파이썬을 활용하면 데이터 전처리, 모델 학습, 평가, 하이퍼파라미터 튜닝, 모델 배포까지 모든 과정을 효율적으로 수행할 수 있습니다. Scikit-learn, TensorFlow, PyTorch와 같은 라이브러리를 사용하면 복잡한 알고리즘을 쉽게 구현할 수 있으며, Pandas, NumPy, Matplotlib을 활용하여 데이터를 분석하고 시각화할 수도 있습니다.
이번 글에서는 파이썬을 활용한 머신러닝 개발 방법을 기초부터 실전까지 상세히 설명하겠습니다. 기본 개념부터 주요 라이브러리, 머신러닝 모델 구현, 실전 프로젝트까지 단계별로 다룰 것입니다.
머신러닝이란?
머신러닝(Machine Learning)이란 컴퓨터가 데이터를 기반으로 학습하여 자동으로 패턴을 인식하고 의사 결정을 내리는 기술입니다. 머신러닝은 크게 지도 학습(Supervised Learning), 비지도 학습(Unsupervised Learning), 강화 학습(Reinforcement Learning)으로 구분됩니다.
- 지도 학습: 입력 데이터(X)와 정답(Y)이 주어진 상태에서 학습하는 방식
- 예: 이메일 스팸 필터링, 주가 예측
- 비지도 학습: 정답(Y) 없이 데이터의 패턴을 스스로 찾는 방식
- 예: 고객 군집 분석, 차원 축소
- 강화 학습: 보상을 기반으로 최적의 행동을 학습하는 방식
- 예: 게임 AI, 자율주행 자동차
파이썬 머신러닝 환경 설정
1. 필수 라이브러리 설치
파이썬에서 머신러닝을 구현하려면 여러 라이브러리를 설치해야 합니다.
pip install numpy pandas scikit-learn matplotlib seaborn
pip install tensorflow keras torch torchvision
2. 주요 라이브러리 소개
- NumPy: 수학적 연산 및 배열 계산
- Pandas: 데이터 분석 및 처리
- Matplotlib & Seaborn: 데이터 시각화
- Scikit-learn: 머신러닝 모델 구현
- TensorFlow & PyTorch: 딥러닝 모델 개발
데이터 전처리 및 분석
머신러닝의 성능을 높이려면 데이터 전처리가 필수적입니다.
1. 데이터 불러오기 및 탐색
import pandas as pd
# 데이터 불러오기
df = pd.read_csv('data.csv')
# 데이터 구조 확인
print(df.head())
print(df.info())
print(df.describe())
2. 결측값 처리
# 결측값 개수 확인
print(df.isnull().sum())
# 결측값 제거
df = df.dropna()
# 결측값을 평균값으로 대체
df.fillna(df.mean(), inplace=True)
3. 특성 선택 및 정규화
from sklearn.preprocessing import StandardScaler
# 데이터 정규화
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
머신러닝 모델 구축 및 학습
Scikit-learn을 사용하여 다양한 머신러닝 모델을 구축할 수 있습니다.
1. 데이터 분리
from sklearn.model_selection import train_test_split
X = df.drop('target', axis=1) # 특성 데이터
y = df['target'] # 라벨 데이터
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
2. 머신러닝 모델 학습
(1) 로지스틱 회귀 모델
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 모델 생성 및 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
print("정확도:", accuracy_score(y_test, y_pred))
(2) 랜덤 포레스트 모델
from sklearn.ensemble import RandomForestClassifier
# 모델 생성
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
# 예측 및 평가
y_pred = rf_model.predict(X_test)
print("랜덤 포레스트 정확도:", accuracy_score(y_test, y_pred))
(3) SVM(Support Vector Machine)
from sklearn.svm import SVC
# 모델 학습
svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)
# 예측 및 평가
y_pred = svm_model.predict(X_test)
print("SVM 정확도:", accuracy_score(y_test, y_pred))
모델 평가 및 성능 개선
모델 성능을 평가하고 최적화하는 것은 매우 중요합니다.
1. 혼동 행렬 및 정확도 평가
from sklearn.metrics import confusion_matrix, classification_report
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
2. 하이퍼파라미터 튜닝
GridSearchCV를 사용하여 최적의 하이퍼파라미터를 찾을 수 있습니다.
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid = GridSearchCV(SVC(), param_grid, cv=5)
grid.fit(X_train, y_train)
print("최적의 하이퍼파라미터:", grid.best_params_)
딥러닝 모델 구축 (TensorFlow & Keras)
1. 기본적인 인공신경망(ANN) 구축
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 모델 생성
model = Sequential([
Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid')
])
# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 모델 학습
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test))
실전 프로젝트 예제
1. 타이타닉 생존자 예측
from sklearn.ensemble import GradientBoostingClassifier
# 데이터 로드
titanic = pd.read_csv("titanic.csv")
titanic = titanic.dropna()
# 특성 선택
X = titanic[['Pclass', 'Age', 'Fare']]
y = titanic['Survived']
# 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = GradientBoostingClassifier()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
print("타이타닉 생존 예측 정확도:", accuracy_score(y_test, y_pred))
머신러닝 관련 FAQ
Q1. 파이썬에서 머신러닝을 배우기 좋은 방법은?
A1. Scikit-learn 공식 문서, Kaggle 튜토리얼, Coursera 등의 온라인 강의를 추천합니다.
Q2. 머신러닝과 딥러닝의 차이점은?
A2. 머신러닝은 데이터 기반 모델링을 포함하며, 딥러닝은 신경망을 활용한 머신러닝의 한 분야입니다.
Q3. Scikit-learn과 TensorFlow의 차이점은?
A3. Scikit-learn은 전통적인 머신러닝을, TensorFlow는 딥러닝을 주로 지원하는 라이브러리입니다.