훈련세트와 테스트 세트

Jaeseok Han·2024년 4월 12일

머신러닝&딥러닝

목록 보기
3/22

지도 학습과 비지도 학습

머신러닝은 크게 지도 학습과 비지도 학습으로 나눌 수 있다.

1. 지도 학습

지도 학습에서 데이터정답입력(input)타킷(target)이라고 하고, 이 둘을 합쳐 훈련 데이터라고 부른다.

입력에는 여러가지의 특성을 가진다. (길이, 무게)

2. 비지도 학습

타깃 데이터가 없고 예측하는 것이 아닌 입력 데이터에서 어떤 특성을 찾는데 사용된다.

훈련 세트와 테스트 세트

머신러닝 모델을 학습하고 평가하는 데 사용되는 데이터의 일부분을 나타낸다.

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

from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()

# 훈련 세트 
train_input = fish_data[:35] # 입력값 0~34번 인덱스
train_target = fish_target[:35] # 타깃값 0~34번 인텍스

# 테스트 세트
test_input = fish_data[35:] # 입력값 35에서 마지막 인덱스
test_target = fish_target[35:] # 타깃값 35에서 마지막 인덱스

# 모델 훈련
kn.fit(train_input, train_target)
kn.score(test_input, test_target)
# 출력 0.0

데이터가 클래스 간에 불균형하게 분포되어 있기때문에 *샘플링 편향으로 해당 모델의 성능이 0.0이 출력된다.

💡 샘플링 편향
샘플링 편향은 훈련 세트와 테스트 세트가 대표적인 데이터를 포함하지 않을 때 발생한다.

1. 넘파이

넘파이는 다차원 배열을 다루는 파이썬 라이브러리로, 행렬 연산과 같은 작업을 효율적으로 수행할 수 있다.

넘파이를 활용하여 데이터를 배열로 변환하고 배열을 조작하여 훈련 세트와 테스트 세트를 구성한다.

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:]]

numpy를 사용하여 데이터를 무작위로 고르게 분포하게 하여 샘플링 편향을 해결한다.

2. 분포 확인

#훈련 세트와 테스트 세트의 데이터가 고르게 분포하였는지 확인
import matplotlib.pyplot as plt
plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(test_input[:,0], test_input[:,1])
plt.xlabel('lenth')
plt.ylabel('weight')
plt.show()

# k-최근접 이웃 모델 훈련
kn.fit(train_input, train_target)
kn.score(test_input, test_target)

# 예측
kn.predict(test_input)
# 출력 array([0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0])

훈련 세트 : 파랑
테스트 세트 : 주황

0개의 댓글