김 팀장🗣️"근데, 네가 훈련할 때 쓴 데이터로 평가를 하면 당연히 정확도가 100% 나오는 거 아냐...?"
ㅇ ㅁㅇ ....
"샘플링 편향"
"섞자, 넘파이로!"
numpy
: 고차원 배열을 손쉽게 조작할 수 있는 라이브러리 (⭐74p).array()
함수 사용.shape
: 배열의 크기를 알려주는 옵션. (몇 행, 몇 열)인지 알려줌.🗝️Key Idea🗝️ "인덱스를 섞어버리자"
= 섞긴 섞어야 하는데, 입력과 타깃이 쌍으로 묶여 있어야 함.
= 그러니 샘플마다 인덱스 부여하고, 아예 그 인덱스를 섞으면 됨!
np.arange(k)
: 0부터 k-1까지, 1씩 증가하는 배열을 만드는 함수..shuffle()
: random 패키지 속 함수로, 전달 받은 리스트를 섞는 역할.import numpy as np
a = np.array([5, 6, 7, 8]) #여기서 6와 8을 한 번에 뽑고 싶다면
a[[1, 3]] #이렇게 리스트 속 리스트로 배열 인덱싱을 활용해라
----------------------------------------------------------------------
array([6, 8]) #그럼 결과가 이렇게 나온다
example = np.array([ [1,2], [3,4], [5,6] ])
np.random.shuffle(example)
print(example)
---------------------------------------------------
[[3 4]
[5 6]
[1 2]] #즉, 안에 내용물까지는 안 섞어준다는 거임.
2차원 배열에서 인덱싱 하는 것(75p)과, 여러 개를 한 번에 인덱싱 하는 것(77p)이 헷갈리기 쉬운 것 같다. 기억하자. 핵심은 [ ]의 개수다! 🆗
훈련했던 데이터로 그 모델을 평가하면 정확한 성능 측정이 안 됨 → 훈련세트와 테스트세트로 분할 → 정확도가 0이 되어버림 → 알고보니, 안 섞고 그냥 잘라서 그랬음 → 넘파이를 활용해 배열을 섞고 다시 분할 → 정확도 100으로 돌아옴!
제대로 된 알고리즘 모델을 만들기 위해, 훈련세트와 테스트세트를 나누어 평가하는 것을 배웠다. Kmooc <데이터로 배우는 통계학>에서 스치듯이 들었던 내용인데, 기억이 나니까 그래도 기분이 좋은 것 같다. 넘파이가 정말 중요한 놈이라는 게 벌써부터 느껴진다. 더 공부해야지...