Intro.
김 팀장🗣️"근데, 네가 훈련할 때 쓴 데이터로 평가를 하면 당연히 정확도가 100% 나오는 거 아냐...?"
ㅇ ㅁㅇ ....
1. 모델 개선 (1차)
데이터 준비 및 알고리즘 객체 생성
- 여기까진 이전 강의와 동일 (데이터 생성, KNN분류기 생성)
훈련세트와 테스트세트 분할
- 김 팀장 말을 듣고, 테스트 세트 떼어내야겠다고 판단 ⇒ 슬라이싱 사용함.
그런데 ...
- 훈련하고 평가해보니, 정확도가 0이 되어버림 ㅠㅠ
2. 다시 문제 발생
문제의 원인 (샘플링 편향)
- 다시 살펴보니, 애초에 데이터 합칠 때 순서대로 이어붙였음 = 그걸 그대로 35번째에서 자르면, 훈련은 도미로만 하고 평가는 빙어로 하게 됨
- 테스트세트 떼어내기 전에 샘플들을 골고루 섞었어야지! ⇒ 이런 문제를 "샘플링 편향"이라고 함!
문제의 해결책
- 골고루 섞으면 됨! = numpy 사용하자!
- ⭐ `numpy` : 고차원 배열을 손쉽게 조작할 수 있는 라이브러리 (74p)
- 파이썬 리스트를 넘파이 배열로 바꾸려면 `.array()` 함수 사용
- `.shape` : 배열의 크기를 알려주는 함수 = (몇 행, 몇 열)인지 알려줌.
3. 모델 개선 (2차)
Numpy로 샘플 골고루 섞기
- 🗝️Key Idea : "인덱스를 섞어버리자"
= 섞긴 섞어야 하는데, 입력과 타깃이 쌍으로 묶여 있어야 함.
= 샘플마다 인덱스 부여하고, 그 인덱스를 섞으면 됨! - `np.arange(k)` : 0부터 k-1까지, 1씩 증가하는 배열을 만드는 함수.
- `shuffle()` : np.random 패키지의 함수로, 입력 받은 리스트를 섞어줌.
섞은 상태에서 훈련/테스트 세트 다시 분할
- 위에서 섞은 인덱스를 사용해서 다시 슬라이싱!
- ➕numpy의 배열 인덱싱을 개념을 이해해야 함.
- ➕numpy의 배열 인덱싱을 개념을 이해해야 함.
- 잘 섞였는지 산점도로 확인. ⇒ 훈련세트와 테스트세트가 골고루 분포되어있음! (ok)
4. 개선된 모델 평가
모델 훈련 및 평가
- 마찬가지 방식으로 훈련(`fit`) 및 평가(`score`)
- `predict()`로 테스트셋의 예측값 직접 뽑아봄 = 실제 정답(target)과 동일하네! = 잘 예측했네!
➕플러스 알파
➊ 배열 인덱싱
- numpy에서는 여러 개의 인덱스로, 여러 개의 원소를 한 번에 부를 수 있다.
- 특히, 아래처럼 뽑으려는 원소의 범위가 연속적이지 않을 때 유용하다.
import numpy as np
a = np.array([5, 6, 7, 8]) #여기서 6와 8을 한 번에 뽑고 싶다면
a[[1, 3]] #이렇게 리스트 속 리스트로 배열 인덱싱을 활용해라
----------------------------------------------------------------------
array([6, 8]) #그럼 결과가 이렇게 나온다
➋ shuffle()
- random 패키지의 함수로, 주어진 배열을 랜덤하게 섞어준다.
- 아래처럼 다차원 배열일 경우, 첫 번째 축(행)에 대해서만 섞는다는 걸 알아두자.
example = np.array([ [1,2], [3,4], [5,6] ])
np.random.shuffle(example)
print(example)
---------------------------------------------------
[[3 4]
[5 6]
[1 2]] #즉, 안에 내용물까지는 안 섞어준다는 거임.
🤔 Hmmmm...
2차원 배열에서 인덱싱 하는 것(75p)과, 여러 개를 한 번에 인덱싱 하는 것(77p)이 헷갈리기 쉬운 것 같다. 기억하자. 핵심은 [ ]의 개수다! 🆗
🤓 To wrap up...
훈련했던 데이터로 그 모델을 평가하면 정확한 성능 측정이 안 됨 → 훈련세트와 테스트세트로 분할 → 정확도가 0이 되어버림 → 알고보니, 안 섞고 그냥 잘라서 그랬음 → 넘파이를 활용해 배열을 섞고 다시 분할 → 정확도 100으로 돌아옴!
제대로 된 알고리즘 모델을 만들기 위해, 훈련세트와 테스트세트를 나누어 평가하는 것을 배웠다. Kmooc <데이터로 배우는 통계학>에서 스치듯이 들었던 내용인데, 기억이 나니까 그래도 기분이 좋은 것 같다. 넘파이가 정말 중요한 놈이라는 게 벌써부터 느껴진다. 더 공부해야지...
*본 포스팅은 이전에 Velog(https://velog.io/@simon919)에서 작성했던 글을 Tistory로 옮긴 것입니다.
'ML & DL > 머신러닝 기초' 카테고리의 다른 글
[혼자 공부하는 머신러닝+딥러닝] 3-1. k-최근접 이웃 회귀 (0) | 2025.02.04 |
---|---|
[혼자 공부하는 머신러닝+딥러닝] 2-2. 데이터 전처리 (0) | 2025.02.04 |
[혼자 공부하는 머신러닝+딥러닝] 1-3. 마켓과 머신러닝 (1) | 2025.02.01 |
[혼자 공부하는 머신러닝+딥러닝] 1-2. 코랩과 주피터 노트북 (0) | 2025.02.01 |
[혼자 공부하는 머신러닝+딥러닝] 1-1. 인공지능과 머신러닝, 딥러닝 (1) | 2025.01.31 |