Scikit-learn(흔히 sklearn이라고 불림)은 Python에서 머신러닝 알고리즘을 구현하기 위해 사용되는 대표적인 오픈소스 라이브러리입니다. 통계 모델링에 필요한 다양한 도구를 제공하며, 분류(Classification), 회귀(Regression), 클러스터링(Clustering), 차원 축소(Dimensionality Reduction) 등 폭넓은 기능을 강력하고 안정적인 인터페이스로 지원합니다.
이 라이브러리는 NumPy, SciPy, Matplotlib 위에 구축되어 있어 과학 컴퓨팅 생태계와 자연스럽게 연동됩니다.
데이터셋을 학습/테스트로 나누는 이유
입력 데이터를 머신러닝 알고리즘에 전달하기 전에는 반드시 학습(training) 데이터셋과 테스트(test) 데이터셋으로 분할해야 합니다.
선택한 모델에 데이터를 학습시키면, 모델은 학습 데이터로부터 패턴을 익히고 새로운 데이터에 일반화(generalize)하는 능력을 갖추게 됩니다. 이때 테스트 데이터셋은 학습 과정에서 절대 사용되지 않습니다.
모든 하이퍼파라미터가 튜닝되고 최적의 가중치가 설정된 후, 비로소 테스트 데이터셋이 모델에 제공됩니다. 테스트 데이터셋은 알고리즘이 처음 보는 새로운 데이터에 얼마나 잘 일반화되는지 성능을 평가하는 용도로 활용됩니다.
그럼 scikit-learn 라이브러리를 사용해 데이터를 분할하는 방법을 살펴보겠습니다.
코드 예제
from sklearn.datasets import load_iris
my_data = load_iris()
X = my_data.data
y = my_data.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size = 0.2, random_state = 2
)
print("학습 데이터 특징(feature)의 차원 ")
print(X_train.shape)
print("테스트 데이터 특징(feature)의 차원 ")
print(X_test.shape)
print("학습 데이터 타깃(target) 값의 차원 ")
print(y_train.shape)
print("테스트 데이터 타깃(target) 값의 차원 ")
print(y_test.shape)실행 결과
학습 데이터 특징(feature)의 차원 (120, 4) 테스트 데이터 특징(feature)의 차원 (30, 4) 학습 데이터 타깃(target) 값의 차원 (120,) 테스트 데이터 타깃(target) 값의 차원 (30,)
코드 설명
- 필요한 패키지들을 임포트합니다.
- 예제에 필요한 아이리스(Iris) 데이터셋을 환경에 로드합니다.
- 데이터셋에서 입력 특징(X)과 타깃 값(y)을 분리합니다.
train_test_split함수를 사용해 학습 데이터와 테스트 데이터를 각각 80%, 20% 비율로 분할합니다.- 즉, 전체 데이터의 20%는 모델이 새로운 데이터에 얼마나 잘 일반화되는지 확인하는 데 사용됩니다.
test_size=0.2는 테스트 비율을,random_state=2는 재현 가능한 결과를 위해 난수 시드를 고정하는 역할을 합니다.- 분할된 각 데이터셋과 그 차원(shape)이 콘솔에 출력됩니다.
전체 150개 샘플 중 120개가 학습에, 30개가 테스트에 사용되었으며, 각 샘플은 4개의 특징(sepal length, sepal width, petal length, petal width)으로 구성되어 있음을 결과에서 확인할 수 있습니다.