좌충우돌 개발자의 길

4강 : 훈련 세트와 테스트 세트 본문

STUDYING/머신러닝&딥러닝

4강 : 훈련 세트와 테스트 세트

sustronaut 2021. 7. 14. 22:23

지난 3장의 머신러닝 모델 문제점

  • 마치 수학 연습 문제에서 나왔던 문제가 그대로 수학시험 문제로 나오는 것과 동일하다!!

머신러닝 분류

  1. 지도 학습 : 입력과 타깃 데이터를 사용해 학습하는 알고리즘
    • 훈련데이터에 입력, 타깃이 포함됨
  2. 비지도 학습 : 타깃 데이터만 있고 입력은 없을 때
  3. 강화 학습 : 모델이 어떤 행동을 수행한 후 주변의 환경에서 피드백을 받아 개선해 나감

평가를 위한 데이터 만들기

  • 또다른 데이터 준비하기
  • 이미 준비된 데이터 중 일부 떼어내서 활용하기 ( 일반적으로 가장 많이 사용되는 유형)
    • 테스트 세트(평가에 사용하는 데이터)와 훈련 세트(훈련에 사용되는 데이터)로 나눠서 구하기
#슬라이싱으로 데이터 나눠서 훈련과 테스트 데이터로 나누기
train_input = fish_data[:35]
train_target = fish_target[:35]
test_input = fish_data[35:]
test_target = fish_target[35:]


# k-최근접 이웃을 구현한 것을 import함 
from sklearn.neighbors import KNeightborsClassifier

#클래스 객체를 kn으로 저장 (kn을 머신러닝 모델이라고 함)
kn = KNeightborsClassifier()

#fit으로 훈련데이터 집어넣기
kn.fit(train_input, train_target)

#얼마만큼 잘 학습되었는지 테스트 데이터로 확인(어느 정도 정확한지)하기 위해 score 사용함
kn.score(test_data, test_target)

#서로 다른 데이터라서 겹치는 일이 없다

 

샘플링 편향

  • 하지만 위에 처럼 데이터를 나눠서 하게 되면 훈련세트에는 도미만 들어가고 테스트 세트에는 빙어만 들어가 잘못도니 훈련 데이터가 만들어질 수 있다
  • 그러므로 numpy를 이용해서 훈련세트에 도미와 빙어 둘다 넣고 테스트 세트에도 도미와 빙어 둘다 넣으면 됨 → 넘파이를 사용하자!

 

넘파이 사용하기

  • 1차원 배열 == 벡터 ( 혼동주의 : 사진에 있는 1차원 배열을 7차원 벡터라고 부르는 경우가 있다)
  • 2차원 배열 == 행렬 ( 행과 열로 되어있음 )
  • 넘파이 배열에는 다른 타입의 데이터를 같이 넣을 수 없음
# 생선 데이터를 2차원 넘파이 배열로 변환하기(아직 데이터 섞지는 않음)

import numpy as np

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

print(input_arr)

 

데이터 섞기

  • 입력과 타깃이 함께 섞여서 이동해야함

#0~48까지 하나씩 증가하면서 리스트 만들고 index라는 이름 지어주기
index = np.arrange(49)
#만들어진 index를 섞기
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]]
  • 배열 슬라이싱 : 인덱스가 담긴 배열을 넣어서 원소를 선택하는 방식, 여러 개의 인덱스로 한 번에 여러 개의 원소를 선택할 수 있음
    • a = np.array([5,6,7,8]) → a[[1,3]] → 6,7이 값으로 나옴
    • input_arr[[1,3]] → [[26.3 290.] [29. 363.]]
  • np.random.seed() 는 교육용으로 학습자가 교재와 동일한 내용이 나오게 하기 위해서 설정해둔 것 뿐이다. 실제로 뭘 만들때는 사용하지 않음

 

데이터 나누고 확인하기

import matplotlib.pyplot as plt

#행과 열로 나눌수 있음 [행,열]
#:는 전체 행, 도미인 0과 빙어인 1을 각각 산점도 만들기
plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(test_input[:,0], test_input[:,1])

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

 

두번째 머신러닝 프로그램

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

#1.0으로 결과 나옴

'STUDYING > 머신러닝&딥러닝' 카테고리의 다른 글

6강 : k-최근접 이웃 회귀  (0) 2021.07.14
5강 : 데이터 전처리  (0) 2021.07.14
3강 : 마켓과 머신러닝  (0) 2021.07.14
2강 : colab 사용하기  (0) 2021.07.14
1강 : 인공머신? 머신러닝? 딥러닝?  (0) 2021.07.14