Python과 머신러닝: scikit-learn 기초
목차
- 서론
- 머신러닝이란?
- scikit-learn 소개
- 데이터 준비
- 데이터셋 불러오기
- 데이터 전처리
- 모델 학습
- 데이터 분할
- 모델 선택
- 모델 훈련
- 모델 평가
- 모델 예측
- 평가 지표
- 하이퍼파라미터 튜닝
- 모델 저장 및 불러오기
- 실습 예제: 붓꽃 데이터 분류
- 결론
- 추천 태그
1. 서론
머신러닝은 데이터로부터 학습하여 패턴을 인식하고, 이를 바탕으로 예측이나 의사 결정을 수행하는 기술입니다. Python은 다양한 머신러닝 라이브러리를 제공하며, 그 중에서도 scikit-learn은 가장 널리 사용되는 라이브러리 중 하나입니다. 이번 포스팅에서는 초보 개발자도 쉽게 이해할 수 있도록 scikit-learn을 사용하여 머신러닝 모델을 구축하는 방법을 설명하겠습니다.
2. 머신러닝이란?
머신러닝은 데이터로부터 규칙이나 패턴을 학습하여 예측하거나 분류하는 알고리즘입니다. 머신러닝은 주로 회귀(Regression), 분류(Classification), 클러스터링(Clustering) 등으로 구분됩니다. 회귀는 연속적인 값을 예측하는 데 사용되고, 분류는 주어진 데이터가 어떤 클래스에 속하는지 예측하며, 클러스터링은 유사한 데이터끼리 그룹화합니다.
3. scikit-learn 소개
scikit-learn은 Python의 오픈 소스 머신러닝 라이브러리로, 다양한 머신러닝 모델과 도구를 제공합니다. 설치는 pip
를 사용하여 간단하게 할 수 있습니다.
pip install scikit-learn
scikit-learn의 주요 기능은 다음과 같습니다:
- 다양한 머신러닝 알고리즘 제공
- 데이터 전처리 도구
- 모델 평가 및 선택 도구
- 하이퍼파라미터 튜닝 도구
4. 데이터 준비
4.1 데이터셋 불러오기
scikit-learn은 다양한 내장 데이터셋을 제공합니다. 이번 예제에서는 붓꽃(Iris) 데이터셋을 사용하겠습니다.
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
print("Features:", X[:5])
print("Labels:", y[:5])
4.2 데이터 전처리
머신러닝 모델을 학습시키기 전에 데이터를 전처리해야 합니다. scikit-learn의 StandardScaler
를 사용하여 데이터를 정규화할 수 있습니다.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print("Scaled Features:", X_scaled[:5])
5. 모델 학습
5.1 데이터 분할
데이터를 학습용(train)과 테스트용(test)으로 분할하여 모델을 평가합니다.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
print("Training data shape:", X_train.shape)
print("Testing data shape:", X_test.shape)
5.2 모델 선택
scikit-learn은 다양한 머신러닝 모델을 제공합니다. 이번 예제에서는 k-최근접 이웃(k-NN) 알고리즘을 사용하겠습니다.
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)
5.3 모델 훈련
학습 데이터를 사용하여 모델을 훈련시킵니다.
model.fit(X_train, y_train)
print("Model trained successfully")
6. 모델 평가
6.1 모델 예측
테스트 데이터를 사용하여 모델의 성능을 평가합니다.
y_pred = model.predict(X_test)
print("Predictions:", y_pred)
6.2 평가 지표
scikit-learn은 다양한 평가 지표를 제공합니다. 이번 예제에서는 정확도(accuracy)를 사용하여 모델을 평가하겠습니다.
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
7. 하이퍼파라미터 튜닝
하이퍼파라미터 튜닝을 통해 모델의 성능을 향상시킬 수 있습니다. scikit-learn의 GridSearchCV
를 사용하여 최적의 하이퍼파라미터를 찾을 수 있습니다.
from sklearn.model_selection import GridSearchCV
param_grid = {'n_neighbors': [3, 5, 7, 9]}
grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print("Best parameters:", grid_search.best_params_)
print("Best score:", grid_search.best_score_)
8. 모델 저장 및 불러오기
훈련된 모델을 저장하고 나중에 다시 사용할 수 있습니다. scikit-learn의 joblib
을 사용하여 모델을 저장하고 불러올 수 있습니다.
import joblib
# 모델 저장
joblib.dump(model, 'knn_model.pkl')
# 모델 불러오기
loaded_model = joblib.load('knn_model.pkl')
print("Model loaded successfully")
9. 실습 예제: 붓꽃 데이터 분류
붓꽃 데이터셋을 사용하여 머신러닝 모델을 학습시키고 평가하는 전체 예제를 작성해보겠습니다.
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import joblib
# 데이터 로드 및 전처리
iris = load_iris()
X = iris.data
y = iris.target
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 모델 학습
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
# 모델 평가
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 모델 저장
joblib.dump(model, 'knn_model.pkl')
# 모델 불러오기
loaded_model = joblib.load('knn_model.pkl')
print("Model loaded successfully")
# 불러온 모델 평가
loaded_pred = loaded_model.predict(X_test)
loaded_accuracy = accuracy_score(y_test, loaded_pred)
print("Loaded model accuracy:", loaded_accuracy)
10. 결론
이번 포스팅에서는 scikit-learn을 사용하여 머신러닝 모델을 구축하고 평가하는 방법을 살펴보았습니다. scikit-learn은 다양한 머신러닝 알고리즘과 도구를 제공하여 데이터 분석과 예측 작업을 쉽게 수행할 수 있습니다. Pandas와 함께 사용하면 데이터 전처리부터 모델 학습까지 모든 과정을 손쉽게 처리할 수 있습니다.