콘텐츠로 건너뛰기

sklearn train test split 사용 방법

[

scikit-learn의 train_test_split을 사용하여 데이터셋 분할하기

지도 학습에서 핵심적인 요소 중 하나는 모델의 평가와 검증입니다. 모델의 예측 성능을 평가할 때는 공정한 과정이 필수적입니다. 데이터 과학 라이브러리인 scikit-learn의 train_test_split()을 사용하여 데이터셋을 분할하면 평가 및 검증 과정에서 편향을 최소화한 하위 데이터셋을 생성할 수 있습니다.

이 튜토리얼에서는 다음 내용을 배우게 됩니다:

  • 지도 학습에서 데이터셋을 분할해야 하는 이유
  • 모델 평가를 위해 필요한 데이터셋의 하위집합
  • 데이터를 분할하기 위해 train_test_split()을 활용하는 방법
  • train_test_split()을 예측 방법과 결합하는 방법

또한, sklearn.model_selection에서 제공되는 관련 도구에 대한 정보도 얻을 수 있습니다.

중요: 이 튜토리얼에서는 Python 3.6 이상 버전과 scikit-learn 0.24 이상 버전이 필요합니다.

데이터 분할의 중요성

지도 학습은 주어진 입력값(독립 변수 또는 예측 변수)과 해당 출력값(종속 변수 또는 응답 변수)을 정확하게 매핑하는 모델을 만드는 것입니다.

정확성을 측정하는 데 사용하는 수치적 값은 분야에 따라 다릅니다. Statistics By Jim, Quora 등에서 자세한 설명을 찾아볼 수 있습니다.

훈련, 검증 및 테스트 데이터셋

모델의 성능을 평가하기 위해서는 데이터셋을 훈련, 검증 및 테스트 데이터셋으로 적절하게 분할해야 합니다. 일반적으로 다음과 같은 방법으로 데이터를 분할합니다:

  • 훈련 데이터셋: 모델을 학습시키는 데 사용되는 데이터입니다. 모델이 예측을 수행할 수 있도록 입력값과 해당 출력값 간의 관계를 학습합니다.
  • 검증 데이터셋: 모델의 성능을 검증하기 위해 사용되는 데이터셋입니다. 이 데이터셋은 주로 모델의 하이퍼파라미터 튜닝에 사용되며, 모델의 예측 성능을 평가하기 위해 사용됩니다.
  • 테스트 데이터셋: 최종적으로 모델의 예측 성능을 평가하기 위해 사용되는 데이터셋입니다. 이 데이터셋은 모델이 학습하지 않은 새로운 입력값에 대한 예측 결과를 확인하는 데 사용됩니다.

이렇게 데이터를 분할하면 모델의 성능을 신뢰할 수 있게 평가할 수 있습니다. 검증 데이터셋은 모델의 학습에 직접적으로 관여하지 않으므로, 모델이 훈련 데이터에 과적합되는 것을 방지하고 일반화 능력을 향상시킵니다.

과소적합과 과대적합

과소적합은 모델이 주어진 데이터에서 적합한 학습을 하지 못할 때 발생하는 문제입니다. 이는 모델이 데이터의 복잡성을 충분히 반영하지 못하거나, 데이터셋이 작아서 모델이 적절한 패턴을 학습하기 어렵기 때문에 발생합니다. 이 경우 모델의 예측 성능이 낮아질 수 있습니다.

과대적합은 모델이 주어진 데이터에 매우 적합하게 학습되지만, 새로운 데이터에 대해서는 예측 성능이 떨어지는 현상입니다. 이는 모델이 훈련 데이터셋에 너무 많이 적응하여 입력값과 출력값 사이의 관계를 과도하게 학습하고, 실제 데이터에서 발생할 수 있는 노이즈나 변동성을 충분히 고려하지 못하기 때문에 발생합니다.

과소적합과 과대적합을 피하기 위해 데이터를 훈련, 검증 및 테스트 데이터셋으로 적절하게 분할하여 모델의 예측 능력을 평가해야 합니다. 이를 위해 train_test_split() 함수를 사용할 수 있습니다.

train_test_split() 사용을 위한 사전 요구사항

train_test_split()을 사용하기 위해 scikit-learn 라이브러리가 설치되어 있어야 합니다. scikit-learn은 일반적으로 데이터 과학 및 머신러닝 작업에 필요한 다양한 기능을 제공하는 라이브러리입니다. scikit-learn 라이브러리는 Anaconda 등에서 쉽게 설치할 수 있습니다.

또한, 다음과 같은 Python 패키지들이 설치되어 있어야 합니다:

  • NumPy: 다차원 배열을 다루는 데 사용되는 패키지입니다. NumPy는 scikit-learn에서 사용되는 기본 데이터 구조인 array를 지원합니다.
  • Pandas: 데이터 분석과 조작을 위한 패키지입니다. Pandas는 데이터셋을 로드하고 처리하는 데 유용합니다.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

train_test_split()의 응용

train_test_split() 함수를 사용하면 데이터셋을 훈련, 검증 및 테스트 데이터셋으로 적절하게 분할할 수 있습니다. 이 함수는 다음과 같은 인자를 받습니다:

  • arrays: 분할하려는 데이터셋을 나타내는 배열
  • test_size: 테스트 데이터셋의 크기를 나타내는 실수(0과 1 사이)
  • train_size: 훈련 데이터셋의 크기를 나타내는 실수(0과 1 사이)
  • random_state: 데이터셋을 분할할 때 사용되는 난수 시드 값

train_test_split() 함수는 주어진 데이터셋을 훈련, 검증 및 테스트 데이터셋으로 분할한 후, 해당 데이터셋을 반환합니다. 이제 train_test_split() 함수의 몇 가지 예제를 살펴보겠습니다.

Linear Regression의 최소 예제

from sklearn.linear_model import LinearRegression
# 데이터셋 생성
X = np.arange(10).reshape(-1, 1)
y = 2 * X + 1
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 테스트 데이터셋으로 모델 평가
score = model.score(X_test, y_test)
print(f"R-squared: {score}")

회귀 예제

from sklearn.linear_model import Ridge
# 데이터셋 로드
dataset = pd.read_csv("data.csv")
X = dataset.drop(["target"], axis=1)
y = dataset["target"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = Ridge(alpha=0.5)
model.fit(X_train, y_train)
# 테스트 데이터셋으로 모델 평가
score = model.score(X_test, y_test)
print(f"R-squared: {score}")

분류 예제

from sklearn.ensemble import RandomForestClassifier
# 데이터셋 로드
dataset = pd.read_csv("data.csv")
X = dataset.drop(["target"], axis=1)
y = dataset["target"]
# 데이터셋 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 테스트 데이터셋으로 모델 평가
score = model.score(X_test, y_test)
print(f"Accuracy: {score}")

다른 유효성 검사 기능

scikit-learn의 train_test_split() 함수는 데이터셋을 훈련 및 테스트 데이터셋으로 분할하는 기능을 제공합니다. 그러나 더 많은 유효성 검사 기능을 사용하고자 할 때에도 scikit-learn에는 다양한 도구들이 있습니다. 예를 들면:

  • 교차 검증: scikit-learn의 cross_validate() 함수를 사용하여 모델의 성능을 평가할 수 있습니다.
  • 그리드 서치: scikit-learn의 GridSearchCV() 함수를 사용하여 모델의 최적 하이퍼파라미터를 탐색할 수 있습니다.

이 밖에도 scikit-learn에는 다양한 유효성 검사 기능이 제공되므로, 필요에 따라 해당 기능들을 활용할 수 있습니다.

결론

지도 학습에서 모델의 성능 평가와 검증은 매우 중요합니다. 데이터셋을 훈련, 검증 및 테스트 데이터셋으로 적절하게 분할하여 모델의 성능을 평가하는 것은 모델이 일반적인 상황에서 예측을 얼마나 잘 수행할 수 있는지를 확인하는 데 도움이 됩니다. scikit-learn의 train_test_split() 함수를 사용하면 데이터셋을 손쉽게 분할할 수 있으며, 모델의 예측 능력을 개선하는 데 도움이 될 수 있는 다양한 유효성 검사 기능들도 함께 활용할 수 있습니다.

이제 이 튜토리얼에서 다룬 내용을 바탕으로 scikit-learn의 train_test_split() 함수를 사용하여 데이터셋을 분할하고, 모델의 성능을 평가하는 데 활용해 보세요!