이 절에서는 세 단계로 나누어 데이터셋을 읽고 훈련 데이터셋과 테스트 데이터셋으로 분할하겠습니다.
1. pandas를 사용하여 UCI 서버에서 직접 데이터셋을 읽어 들입니다.
>>> import pandas as pd
>>> df = pd.read_csv('https://archive.ics.uci.edu/ml/'
... 'machine-learning-databases'
... '/breast-cancer-wisconsin/wdbc.data',
... header=None)
2. 그다음 30개의 특성을 넘파이 배열 X에 할당합니다. LabelEncoder 객체를 사용하여 클래스 레이블을 원본 문자열 표현('M'과 'B')에서 정수로 변환합니다.1
>>> from sklearn.preprocessing import LabelEncoder
>>> X = df.loc[:, 2:].values
>>> y = df.loc[:, 1].values
>>> le = LabelEncoder()
>>> y = le.fit_transform(y)
>>> le.classes_
array(['B', 'M'], dtype=object)
클래스 레이블(진단 결과)을 배열 y에 인코딩하면 악성(malignant) 종양은 클래스 1로 표현되고 양성(benign) 종양은 클래스 0으로 각각 표현됩니다. 두 개의 더미 클래스 레이블 샘플로 LabelEncoder 객체의 transform 메서드를 호출해서 이 매핑을 다시 확인해 보죠.
>>> le.transform(['M', 'B'])
array([1, 0])
3. 다음 절에서 첫 번째 모델 파이프라인을 구성하기 전에 데이터셋을 훈련 데이터셋(전체 데이터의 80%)과 별도의 테스트 데이터셋(전체 데이터의 20%)으로 나눕니다.
>>> from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = \
>>> train_test_split(X, y,
... test_size=0.20,
... stratify=y,
... random_state=1)
1 역주 LabelEncoder는 레이블을 알파벳 순서대로 정렬하기 때문에 'B'가 0, 'M'이 1로 매핑됩니다.