마지막으로 stratify = y를 통해 계층화(stratification) 기능을 사용합니다. 여기에서 계층화는 train_test_split 함수가 훈련 데이터셋과 테스트 데이터셋의 클래스 레이블 비율을 입력 데이터셋과 동일하게 만든다는 의미입니다. 넘파이 bincount 함수를 사용하여 배열에 있는 고유한 값의 등장 횟수를 헤아릴 수 있습니다. 계층화가 잘 되었는지 확인해 보죠.
>>> print('y의 레이블 카운트:', np.bincount(y))
y의 레이블 카운트: [50 50 50]
>>> print('y_train의 레이블 카운트:', np.bincount(y_train))
y_train의 레이블 카운트: [35 35 35]
>>> print('y_test의 레이블 카운트:', np.bincount(y_test))
y_test의 레이블 카운트: [15 15 15]
2장 경사 하강법 예제에서 보았던 것처럼 많은 머신 러닝 알고리즘과 최적화 알고리즘은 최상의 성능을 위해 특성 스케일 조정이 필요합니다. 여기에서는 사이킷런의 preprocessing 모듈의 StandardScaler 클래스를 사용하여 특성을 표준화하겠습니다.
>>> from sklearn.preprocessing import StandardScaler
>>> sc = StandardScaler()
>>> sc.fit(X_train)
>>> X_train_std = sc.transform(X_train)
>>> X_test_std = sc.transform(X_test)