Python과 머신러닝: scikit-learn 기초

Python과 머신러닝: scikit-learn 기초


목차

  1. 서론
  2. 머신러닝이란?
  3. scikit-learn 소개
  4. 데이터 준비
    1. 데이터셋 불러오기
    2. 데이터 전처리
  5. 모델 학습
    1. 데이터 분할
    2. 모델 선택
    3. 모델 훈련
  6. 모델 평가
    1. 모델 예측
    2. 평가 지표
  7. 하이퍼파라미터 튜닝
  8. 모델 저장 및 불러오기
  9. 실습 예제: 붓꽃 데이터 분류
  10. 결론
  11. 추천 태그

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와 함께 사용하면 데이터 전처리부터 모델 학습까지 모든 과정을 손쉽게 처리할 수 있습니다.

다음 이전