이번 포스팅에선 Scikit-learn으로 K-최근접 이웃(KNN)과 Keras(TensorFlow)로 MLP 두 가지 예제를 합쳐서
1) 모델 학습의 공통 흐름
2) 코드 구성 방식
3) 주요 포인트
를 정리해볼게요.
머신러닝·딥러닝 모델을 학습할 때 기본적으로 거치는 단계는 크게 다음과 같아요.
아래에서 두 가지 대표 예제를 보면서, 각 단계에서 무엇을 해야 하는지 차근차근 살펴보게요.
# Scikit-learn 예제용
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
# Keras(TensorFlow) 예제용
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.utils import to_categorical
iris = load_iris()
X, y = iris.data, iris.target
# 데이터프레임으로 미리보기 (선택)
df = pd.DataFrame(X, columns=iris.feature_names)
df['species'] = y
# 훈련/테스트 분리
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 스케일링 (거리 기반 알고리즘은 필수!)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 데이터 로드
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 정규화 (픽셀값 0~1로)
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
# 원-핫 인코딩 (10가지 클래스)
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# 이미지일 땐 정규화 필수!
model = KNeighborsClassifier(n_neighbors=3)
model = Sequential([
Flatten(input_shape=(28, 28)), # 28×28 → 784 벡터
Dense(128, activation='relu'), # 은닉층 128개 노드
Dense(10, activation='softmax') # 출력층 10개 클래스
])
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy']
)
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)
.fit()
# 거리 기반이라 추가 하이퍼파라미터 튜닝 별도 고려
history = model.fit(
X_train, y_train,
epochs=5,
batch_size=32,
validation_split=0.1,
verbose=2
)
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")
print(classification_report(y_test, y_pred, target_names=iris.target_names))
print(confusion_matrix(y_test, y_pred))
# 정확도, 정밀도/재현율/F1, 혼동 행렬로 성능 전반 확인
loss, accuracy = model.evaluate(X_test, y_test, verbose=0)
print(f"테스트 정확도: {accuracy:.4f}")
print(f"테스트 손실: {loss:.4f}")
이제 Scikit-learn과 Keras 예제를 활용해, 프로젝트에 맞게 데이터➜모델➜학습➜평가 플로우를 자유롭게 응용해보세요
작성일:2025.07.08
작성자:발라