AI

[AI 도전기 6일차] 훈련 세트와 테스트 세트 데이터 다루기

alsruds 2024. 4. 1. 17:22

 

데이터를 다루는 법에 대해 알아보는 주차 !!

 

https://www.youtube.com/playlist?list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q

 

[완결] 혼자 공부하는 머신러닝+딥러닝

[혼자 공부하는 머신러닝+딥러닝] 강의 동영상 혼자 공부하는 머신러닝+딥러닝: https://tensorflow.blog/hg-mldl 깃허브: https://github.com/rickiepark/hg-mldl 유튜브: http://bit.ly/hg-mldl-youtube

www.youtube.com

 


 

4강. 훈련 세트와 테스트 세트 나누어 사용하기

이전 시간의 문제점 : 모델을 구현하기 위한 샘플 데이터와, 구현 후 정확성을 측정하는 데이터가 같은 데이터다 !!

➡️ 같은 데이터이기 때문에 당연히 정확도 100%

➡️ 훈련 세트와 테스트 세트를 나누어 사용해야 한다

 

💡 주의 사항 : 테스트 케이스들이 잘 섞일 수 있도록 해주어야 한다 ex) 도미와 빙어 데이터가 골고루 섞이게

 

⬅️ 잘못된 상황

 

- 훈련 세트에는 도미 데이터만 존재하고, 테스트 세트에는 빙어 데이터만 존재한다

- 도미와 빙어 데이터를 훈련 세트와 테스트 세트에 적절히 배분할 필요성

 

 

 

 

- input 과 target 이 함께 쌍을 이루어 이동하게 해야 한다

- 인덱스를 섞어 분류하기 !

  1. 인덱스 랜덤 셔플

  2. 인덱스 기준 배열 슬라이싱

 

- 산점도에서 훈련 세트와 테스트 세트에 도미와 빙어 데이터가 골고루 섞여 있는 것을 확인할 수 있다

  - 파란색 : 훈련 데이터

  - 주황색 : 테스트 데이터

 

💡 두 번째 머신러닝 프로그램

# 모델 구현 (훈련 세트)
kn = kn.fit(train_input, train_target)

# 정확성 측정 (테스트 세트)
kn.score(test_input, test_target)

 

 

5강. 정교한 결과 도출을 위한 데이터 전처리 알아보기

📍 시나리오
길이 25cm, 무게 150g 인 물고기인 나!
나는 도미일까 빙어일까? 🐟

 

1. Numpy, Sklearn 으로 데이터 준비하기 (훈련 세트 & 테스트 세트)

- 넘파이로 물고기의 길이와 무게 데이터 리스트 합치기 : column_stack

- 사이킷런으로 훈련 세트, 테스트 세트 데이터 나누기

  - stratify : 분류 시 샘플링 편향이 생기지 않도록 타깃 배열을 전달하여 타깃값이 골고루 섞이도록 함

  - random_state : 랜덤 시드 선택 (실전에서는 사용되지 않음)

  - 전달하는 배열을 2개로 나누어줌

 

 

2. 문제점 발견 : 기존 산점도 표시로는 도미같아 보이는데 결과는 왜 빙어로 나올까?

 

- kn.kneighbors([[25, 150]]) : 어떤 샘플 데이터를 보고 있는지 거리 계산하는 함수

 

- 노란색 : 현재 추론하는 생선 데이터

- 초록색 : 추론을 위해 보고 있는 샘플 데이터

 

➡️ x 축과 y 축의 스케일이 달라서 산점도를 눈으로 봤을 때랑 실제 값이랑 차이가 난다 !

 

 

3. 데이터 전처리 : 표준 점수로 바꾸기

x축과 y축의 스케일을 통일하여 산점도에 다시 표시하기

 

- 표준 점수 (z 점수) = (샘플 데이터 - 평균) / 표준 편차

  - mean : 평균

  - std : 표준 편차

 

 

 

➡️ 훈련 세트의 평균과 표준 편차로 predict 하는 값 변경

➡️ 훈련 세트의 평균과 표준 편차로 테스트 세트 데이터 변환

 

 

📌 항상 데이터 변환은 훈련 세트가 기준 !!

 

 

 

 

🐟 나는 도미였다 !