Train_set과 Test_set의 정의는 아래 포스팅을 참고하기 바랍니다.
https://math-love.tistory.com/9
2. 데이터 세트 분리
데이터 세트 분리는 말 그대로 데이터를 분리하는 것이다. 2개의 데이터로 분리할 수 있는데 하나는 train데이터, 나머지 하나는 test데이터이다. train데이터는 말 그대로 훈련 데이터인데, 우리가
math-love.tistory.com
훈련 및 테스트 세트를 통한 물고기 분류
우선 데이터를 가져와 보겠습니다.
본 데이터는 이전 포스팅을 참고합니다.
https://math-love.tistory.com/15
Ch 1. ML 실습을 위한 환경
1. 환경 설정 import matplotlib import matplotlib.pyplot as plt import numpy as np import pandas as pd # 임의값 속성 정의 np.random.seed(42) # 그래프 속성 정의 plt.rcParams['axes.labelsize'] = 14 plt.rcParams['xtick.labelsize'] = 12 plt.rc
math-love.tistory.com
fish_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0,
31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0,
35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0, 9.8,
10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
fish_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0,
500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0,
700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0, 6.7,
7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]
plt.scatter(fish_length, fish_weight)
plt.xlabel('Length')
plt.ylabel('Weight')
plt.show()

길이와 무게가 작은 물고기와
길이와 무게가 큰 물고기가 잘 분류되어 있는 모습입니다.
지난 포스팅에서 fish_length에 대한 정의를 살펴보겠습니다.
fish_length = a_length + b_length
fish_length는 a물고기와 b물고기의 길이의 합입니다.
fish_length[:35]까지는 a물고기의 정보가
fish_length[35:]까지는 b물고기의 정보가 담겨있음을 알 수 있습니다.
훈련 및 테스트 세트로 분리 (섞는 과정 x)
이제 물고기의 길이와 무게를 하나의 data 정보에 담아보겠습니다.
이후 데이터를 shuffle하지 않고 Train_set과 Test_set으로 분리해보겠습니다.
fish_data = [[l, w] for l, w in zip(fish_length, fish_weight)]
fish_target = [1] * 35 + [0] * 14 # 1 -> a물고기, 2 -> b물고기
지난번과 마찬가지로 a물고기를 '1', b물고기를 '0'이라고 하겠습니다.
이제 섞는 과정 없이 데이터를 Train_set과 Test_set으로 분리하겠습니다.
# Train set
train_input = fish_data[:35]
train_target = fish_target[:35]
# Test set
test_input = fish_data[35:]
test_target = fish_target[35:]
이제 sklearn을 통해 학습을 시켜보겠습니다.
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier() #객체 생성
kn.fit(train_input, train_target)
Train set을 fit 시켜 model을 학습시켰습니다.
이제 Test set을 통해 model을 evaluate 해보겠습니다.
kn.score(test_input, test_target)
-> 0.0
0점이 나온 것을 확인할 수 있습니다.
아마 데이터를 섞지 않고 있는 그대로 Train set과 Test set을 분리시켰기 때문인 것 같습니다.
이제 Train set과 Test set의 shuffle을 통해 데이터를 섞고 분리해보겠습니다.
훈련 및 테스트 세트로 분리 (섞는 과정 o)
shuffle을 사용하기 위해서는 numpy패키지를 사용해야합니다.
우선 각각의 data를 numpy의 array로 변환합니다.
input_arr = np.array(fish_data)
target_arr = np.array(fish_target)
총 49개의 index만들고 shuffle 해보겠습니다.
np.random.seed(42) # random state 고정
index = np.arange(49)
np.random.shuffle(index)
Train set과 Test set을 설정합니다.
train_input = fish_data[index[:35]]
train_target = fish_target[index[:35]]
test_input = fish_data[index[35:]]
test_target = fish_target[index[35:]]
이제 model 객체를 만들고 학습시켜보겠습니다.
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(train_input, train_target)
Test set을 이용해 model 평가를 진행해 보겠습니다.
kn.score(test_input, test_target)
-> 1.0
sklearn을 통한 DataSet 분리
sklearn모듈을 이용해서도 DataSet을 분리할 수 있습니다.
from sklearn.model_selection import train_test_split
# test_size = 0.2 -> Test set의 크기 지정
train_input, test_input, train_target, test_target = train_test_split(fish_data, fish_target, test_size = 0.2, random_state = 42)
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(train_input, train_target)
kn.score(test_input, test_target)
-> 1.0
model에 대한 평가가 위와 같은 결과로 나옵니다.
'데이터 사이언스 > 하계 AI 중급과정' 카테고리의 다른 글
Ch 4. Polynomial Regression (다항회귀) (0) | 2023.07.12 |
---|---|
Ch 3. Linear Regression(선형회귀) (0) | 2023.07.12 |
Ch 1. ML 실습을 위한 환경 (0) | 2023.07.10 |
2. 데이터 세트 분리 (0) | 2023.06.30 |
1. Linear Regression (선형 회귀) (0) | 2023.06.29 |