AI

2-1 훈련 세트와 테스트 세트

땅콩콩 2024. 12. 29. 19:14

머신러닝 알고리즘의 성능을 제대로 평가하기 위해서는 학습에 사용하는 훈련 데이터와 시험에 사용하는 테스트 데이터를 구분해서 사용해야 한다.

이를 위해 데이터를 적절히 가공하고 랜덤하게 골라 훈련데이터, 테스트데이터로 나눠보겠다.

import matplotlib.pyplot as plt

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]
                
fish_data = [[l, w] for l, w in zip(fish_length, fish_weight)]
fish_target = [1] * 35 + [0] * 14

 

우선 길이와 무게, 두 파이썬 리스트를 순회하며 각 생선의 길이와 무게를 하나의 리스트로 담은 2차원 리스트를 만든다.

그럼 총 49개의 샘플 리스트가 완성된다.

 

하지만 앞에서부터 35개는 도미, 뒤의 14개는 빙어 데이터이기 때문에 샘플링 편향이 발생할 수 있다.

적절한 훈련과 테스트를 위해 이 샘플을 무작위로 섞어서 훈련 세트/테스트세트로 나눠야 한다.

 

이를 위해서 0~48까지의 배열을 만들고, 이를 랜덤하게 섞어서 각각의 세트에 들어갈 샘플,타겟 세트의 인덱스를 정한다.

import numpy as np

input_arr = np.array(fish_data)
target_arr = np.array(fish_target)

np.random.seed(42)
index = np.arange(49)
np.random.shuffle(index)

train_input = input_arr[index[:35]]
train_target = target_arr[index[:35]]

test_input = input_arr[index[35:]]
test_target = target_arr[index[35:]]

 

그래서 인덱스를 무작위로 섞은 뒤, 앞의 35개는 훈련 세트, 뒤의 14개는 테스트세트로 사용한다.

 

import matplotlib.pyplot as plt

plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(test_input[:,0], test_input[:,1])

plt.xlabel("length")
plt.ylabel("weight")
plt.show()

 

산점도를 그려보면 훈련세트와 테스트세트가 골고루 섞인 것을 확인할 수 있다.

 

이제 훈련과 테스트를 시작해보면 1.0(100%)의 정확도로 테스트세트에 있는 모든 생선을 맞추는 것을 볼 수 있다.

kn.fit(train_input, train_target)
kn.score(test_input, test_target)

 

테스트 세트를 가지고 데이터를 예측해봐도, 테스트 타겟에 있는 리스트와 정확히 일치하는 데이터가 나온다.

 

'AI' 카테고리의 다른 글

1: K-최근접 이웃 알고리즘  (0) 2024.12.28