우리에게는 150개의 붓꽃 데이터가 있습니다. 만약 150개 데이터 전체를 가지고 모델을 만든다면, 이 모델을 평가해볼 수가 없습니다. 따라서 150개의 데이터를 모델을 만들 데이터와 모델을 평가할 데이터로 나누도록 하겠습니다. 모델을 만드는데 사용되는 데이터를 training set, 모델을 평가하는데 사용되는 데이터를 test set 라고 부릅니다. 일반적으로 전체 데이터의 25%를 test set 으로 사용합니다.
다행히 사이킷런 패키지에는 알아서 training set 과 test set 을 나눠주는 함수가 있습니다. train_test_split 이라는 함수입니다. 한번 사용해봅시다. 아래와 같은 형식으로 사용합니다. 함수를 따로 import 해주어야 합니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
md=load_iris() #key:value 형태의 bunch 클래스, 딕셔너리와 비슷함
train_test_split(md['data'],md['target'],random_state=0)
데이터(꽃잎폭,꽃잎길이,꽃받침폭,꽃받침길이)와, 타겟(붓꽃종류)를 넣어줍니다. random_state에 특정 숫자를 입력하면, 해당 숫자를 입력하는 한 항상 같은 결과가 출력됩니다. R의 set.seed 와 같은 역할입니다.
결과를 여기 쓰지는 않겠습니다. 배열 네개를 포함한 리스트가 반환됩니다. 이 배열들은 각각 아래와 같습니다.
data_train
data_test
target_train
target_test
변수 이름을 아래와 같이 지정하면 각 변수에 배열이 저장됩니다.
data_train,data_test,target_train,target_test=train_test_split(md['data'],md['target'],random_state=0)
각각을 일부만 출력해봅시다.
>>> data_train[:3]
array([[5.9, 3. , 4.2, 1.5],
[5.8, 2.6, 4. , 1.2],
[6.8, 3. , 5.5, 2.1]])
>>> data_test[:3]
array([[5.8, 2.8, 5.1, 2.4],
[6. , 2.2, 4. , 1. ],
[5.5, 4.2, 1.4, 0.2]])
>>> target_train[:3]
array([1, 1, 2])
>>> target_test[:3]
array([2, 1, 0])
train set과 test set 의 개수를 비교해봅시다.
>>> target_train.shape
(112,)
>>> target_test.shape
(38,)
150개의 25%는 37.5인데 반올림하면 38입니다. 잘 배분되었습니다.
<참고문헌>
https://link.coupang.com/a/kHGzo
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'머신러닝 (지도학습) > k최근접 이웃' 카테고리의 다른 글
[파이썬 머신러닝, k최근접 이웃] 4. 모델 학습과 평가 (0) | 2022.03.24 |
---|---|
[파이썬 머신러닝, k최근접 이웃] 3. 산점도행렬 그려보기 (0) | 2022.03.17 |
[파이썬 머신러닝, k최근접 이웃] 1. Iris 데이터 살펴보기 (0) | 2022.03.10 |
댓글