np.unique(y) 함수는 iris.target에 저장된 세 개의 고유한 클래스 레이블을 반환합니다. 결과에서 보듯이 붓꽃의 클래스 이름인 Iris-setosa, Iris-versicolor, Iris-virginica는 이미 정수로 저장되어 있습니다(여기서는 0, 1, 2). 사이킷런의 많은 함수와 클래스 메서드는 문자열 형태의 클래스 레이블을 다룰 수 있습니다.3 정수 레이블이 권장되는 이유는 사소한 실수를 피할 수 있고 작은 메모리 영역을 차지하므로 계산 성능을 향상시키기 때문입니다. 클래스 레이블을 정수로 인코딩하는 것은 대부분 머신 러닝 라이브러리들의 공통된 관례이기도 합니다.
처음 본 데이터에서 훈련된 모델 성능을 평가하기 위해 데이터셋을 훈련 데이터셋과 테스트 데이터셋으로 분할합니다. 6장에서 모델 평가와 관련된 모범 사례를 자세히 설명하겠습니다.
>>> from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=0.3, random_state=1, stratify=y)
사이킷런 model_selection 모듈의 train_test_split 함수를 사용해서 X와 y 배열을 랜덤하게 나눕니다. 30%는 테스트 데이터(45개의 샘플), 70%는 훈련 데이터(105개의 샘플)가 됩니다.4
train_test_split 함수가 분할하기 전에 데이터셋을 미리 섞습니다. 그렇지 않으면 클래스 0과 클래스 1에 있는 샘플이 모두 훈련 데이터셋에 들어가고 테스트 데이터셋은 클래스 2의 샘플 45개 만으로 구성됩니다.5 데이터셋을 분할 전 무작위로 섞기 위해 사용되는 유사 난수 생성기에 random_state 매개변수로 고정된 랜덤 시드(random_state=1)를 전달합니다. random_state를 고정하면 실행 결과를 재현할 수 있습니다.
3 역주 LabelEncoder 클래스를 사용하여 레이블을 0~n_classes - 1 사이의 정수로 바꾸거나 OvR 방식을 사용하는 경우 0, 1을 사용하는 이진 분류 문제로 만듭니다.
4 역주 train_test_split 함수의 test_size 매개변수 기본값은 0.25입니다.
5 역주 2장에서 UCI 서버에서 내려받은 데이터셋과 마찬가지로 세 개의 붓꽃 데이터가 순서대로 50개씩 나열되어 있습니다.